HUAFA框架入门(先登录:运行登录test)
1. 创建实体类(entity)
1.1 使用插件lombok(注意安装插件)
注解@Data 为实体类提供set、get、toString方法
扩展:
@Data :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Setter:注解在属性上;为属性提供 setting 方法 @Getter:注解在属性上;为属性提供 getting 方法 @Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象 @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法 @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法
1.2 spring @Table注解 作用是 : 声明此对象映射到数据库的数据表,通过它可以为实体指定表(talbe)
@ApiModelProperty()用于方法,字段; 表示对model属性的说明或者数据操作更改 value–字段说明 name–重写属性名字 dataType–重写属性类型 required–是否必填 example–举例说明 hidden–隐藏
@Id
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModel(value="user对象",description="用户对象user")
public class User implements Serializable{
private static final long serialVersionUID = 1L;
@ApiModelProperty(value="用户名",name="username",example="xingguo")
private String username;
@ApiModelProperty(value="状态",name="state",required=true)
private Integer state;
private String password;
private String nickName;
private Integer isDeleted;
@ApiModelProperty(value="id数组",hidden=true)
private String[] ids;
private List<String> idList;
//省略get/set
}
2.参数(传入参数Request)
2.1 使用注解
@ToString(callSuper = true)
@ToString
无需启动调试器即可查看您的字段:只需让lombok为您生成一个toString!
Overview
任何类定义可以使用@ToString让 lombok 生成toString()方法的实现。默认情况下,它会按顺序打印您的类名以及每个字段,并以逗号分隔。
通过将includeFieldNames参数设置为true,您可以为toString()方法的输出添加一些清晰度(但也有一些长度)。
默认情况下,将打印所有非静态字段。如果要跳过某些字段,可以使用@ToString.Exclude标注这些字段。或者,您可以使用@ToString(onlyExplicitlyIncluded = true)标准确定要使用的字段,然后标记要包含的每个字段@ToString.Include。
通过设置callSuper为true,可以将父类实现toString的输出包含到输出中。请注意,toString()的默认实现java.lang.Object几乎毫无意义,因此除非您扩展另一个类,否则您可能不希望这样做。
您还可以在您的方法中包含方法调用的输出toString。只能包含不带参数的实例(非静态)方法。为此,请使用@ToString.Include标记方法。
您可以更改用于标识成员的名称@ToString.Include(name = "some other name"),并且可以更改成员的打印顺序@ToString.Include(rank = -1)。没有等级的成员被认为具有等级0,更高等级的成员被首先打印,并且相同等级的成员以它们在源文件中出现的相同顺序被打印。
With Lombok
import lombok.ToString;
@ToString
public class ToStringExample {
private static final int STATIC_VAR = 10;
private String name;
private Shape shape = new Square(5, 10);
private String[] tags;
@ToString.Exclude private int id;
public String getName() {
return this.name;
}
@ToString(callSuper=true, includeFieldNames=true)
public static class Square extends Shape {
private final int width, height;
public Square(int width, int height) {
this.width = width;
this.height = height;
}
}
}
Vanilla Java
import java.util.Arrays;
public class ToStringExample {
private static final int STATIC_VAR = 10;
private String name;
private Shape shape = new Square(5, 10);
private String[] tags;
private int id;
public String getName() {
return this.getName();
}
public static class Square extends Shape {
private final int width, height;
public Square(int width, int height) {
this.width = width;
this.height = height;
}
@Override public String toString() {
return "Square(super=" + super.toString() + ", width=" + this.width + ", height=" + this.height + ")";
}
}
@Override public String toString() {
return "ToStringExample(" + this.getName() + ", " + this.shape + ", " + Arrays.deepToString(this.tags) + ")";
}
}
Supported configuration keys:
lombok.toString.includeFieldNames = [true | false] (default: true)
通常,lombok会以形式为每个字段生成toString响应的片段fieldName = fieldValue。如果将此设置设置为false,则lombok将省略该字段的名称,并只是部署所有字段值的逗号分隔列表。includeFieldNames如果明确指定,注释参数优先于此设置。
lombok.toString.doNotUseGetters = [true | false] (default: false)
如果设置为true,则lombok将直接访问字段,而不是在生成toString方法时使用getter(如果可用)。doNotUseGetters如果明确指定,注释参数优先于此设置。
lombok.toString.callSuper = [call | skip | warn] (default: skip)
如果设置为call,toString则如果您的类扩展了某些内容,lombok将生成对超类实现的调用。如果设置为skip,不会生成此类调用。如果设置为warn,也不会生成此类调用,但lombok会生成警告以告知您。
lombok.toString.flagUsage = [warning | error] (default: not set)
如果配置, Lombok会将任何@ToString用法标记为警告或错误。
Small print
如果存在任何toString不带参数的方法,则无论返回类型如何,都不会生成任何方法,而是会发出警告,说明您的@ToString注释不执行任何操作。你可以标记任何方法@lombok.experimental.Tolerate来隐藏它们从lombok。
数组是通过打印的Arrays.deepToString,这意味着包含自身的数组将导致StackOverflowErrors。但是,这种行为与ArrayList例如没有区别。
如果某个方法被标记为包含并且它与字段具有相同的名称,它将替换该字段的toString输出(包含该方法,排除该字段,并在该字段将被打印的位置打印方法的输出)。
在lombok 1.16.22之前,可以使用注释的of和exclude参数完成包含/排除@ToString。这种旧式包含机制仍然受支持,但将来会被弃用。
同时具有@ToString.Exclude和@ToString.Include成员上生成一个警告; 在这种情况下,会员将被排除在外。
我们不保证toString()在lombok版本之间保持生成的方法的输出相同。你永远不应该设计你的API,以便其他代码被迫解析你的toString()输出!
默认情况下,任何以$符号开头的变量都会自动排除。您只能使用@ToString.Include注释包含它们。
如果存在要包含的字段的getter,则调用它而不是使用直接字段引用。可以抑制此行为:
@ToString(doNotUseGetters = true)
@ToString也可以用于枚举定义。
@NotBlank(message = "主键Id不能为空")
@NotNull:不能为null,但可以为empty(用于判断一个变量是否已初始化)
@NotEmpty:不能为null,而且长度必须大于0
@NotBlank:只能作用在String上,不能为null,而且调用trim()后(移除字符串两侧的空白字符或其他预定义字符),长度必须大于0 案例:
注意在使用@NotBlank等注解时,一定要和@valid一起使用,不然@NotBlank不起作用
3. Service(业务层)
3.1 增加、修改、查询、删除的抽象接口
CommonResponse /** * 通用响应父类的封装 * 目的:封装响应的公共属性,例如响应编码等 * @param <T> */
CommonRequest /** * 通用请求父类的封装 * 目的:封装请求的公共属性,例如模块名称等 * @param <T> */
4.myBatis的Mapper
public interface StuMapper {
}
5.TK层(crud方法从这里继承)
public interface StuMapperTk extends Mapper<Student> {
}
6.StuSaveService
@Service
public class StuSaveService extends SingleTemplate<StuSaveRequest,Boolean> {
@Autowired
private StuMapperTk stuMapperTk;
@Override
protected Boolean callInner(CommonRequest<StuSaveRequest> request) throws Exception {
StuSaveRequest stuSaveRequest=request.getRequest();
Student student=new Student();
BeanUtils.copyProperties(stuSaveRequest,student);
int i = stuMapperTk.insertSelective(student);
if (i>0){
return true;
}else {
return false;
}
}
}
7.StuServerImpl实现类
@Slf4j
@Service
public class StuServerImpl implements StudyServer {
@Autowired
private StuSaveService stuSaveService;
@Override
public CommonResponse<Boolean> saveStu(CommonRequest<StuSaveRequest> request) {
return stuSaveService.call(request);
}
@Override
public CommonResponse<Boolean> modifyStu(CommonRequest<Student> request) {
return null;
}
@Override
public CommonResponse<Boolean> deleteStu(CommonRequest<Boolean> request) {
return null;
}
@Override
public CommonResponse<Boolean> findStu(CommonRequest<SkuStockModifyRequest> request) {
return null;
}
}
8. test方法
@Slf4j
public class StudyTest extends BaseTest {
@Autowired
private StudyServer studyServer;
@Test
public void saveSpuTest() {
StuSaveRequest request = new StuSaveRequest();
request.setId("2");
request.setName("hwm");
request.setNum("2016131335");
request.setPrice(new BigDecimal(4500.00));
request.setCreateTime(new Date());
BaseTest.request.setRequest(request);
CommonResponse<Boolean> response = studyServer.saveStu(BaseTest.request);
log.info(response.toString());
}
@Override
public void fullMockInner() {
}
@Override
public void initRequestInner() {
}
}