一、EasyCode和Lombok插件的安装
1、在idea中下载EasyCode插件
Easycode是idea的一个插件,可以直接对资料的表生成 entity(物体类层)、controller(控制层)、service(业务层)、dao(dao层)、mapper(mapper档案) 无需任何编码,简单而强大 ,懒人必备呀!
- 安装成功后设定作者名
2、LomBok插件的安装
Lombok能通过注解的方式,在编译时自动为物体类中的属性生成构造器、getter/setter、equals、hashcode、toString方法 ,效果是在原始码中没有getter和setter方法,但是在编译生成的字节码档案中有getter和setter方法,
二、EasyCode的使用
1、使用easyCode需要idea链接数据库
- 选择mysql数据库
- 设定账户的用户密码和数据库
- 测验链接下载驱动
- 测验成功可以链接
- 链接成功后
2、使用easyCode自动生成代码
- 右击数据库表=》选EasyCode=》选择GenerateCode
- 选择entity(物体类层)、controller(控制层)、service(业务层)、dao(dao层)、mapper(mapper档案)
- 自动生成结构,并且控制层满足restFul风格
3、自动生成的Controller层
/**
* (TAdmin)表控制层
*
* @author 程序员小王
* @since 2021-12-26 21:07:13
*/
@RestController
@RequestMapping("tAdmin")
public class TAdminController {
/**
* 服务物件
*/
@Resource
private TAdminService tAdminService;
/**
* 通过主键查询单条资料
*
* @param id 主键
* @return 单条资料
*/
@GetMapping("{id}")
public ResponseEntity<TAdmin> queryById(@PathVariable("id") Integer id) {
return ResponseEntity.ok(this.tAdminService.queryById(id));
}
/**
* 新增资料
*
* @param tAdmin 物体
* @return 新增结果
*/
@PostMapping
public ResponseEntity<TAdmin> add(TAdmin tAdmin) {
return ResponseEntity.ok(this.tAdminService.insert(tAdmin));
}
/**
* 编辑资料
*
* @param tAdmin 物体
* @return 编辑结果
*/
@PutMapping
public ResponseEntity<TAdmin> edit(TAdmin tAdmin) {
return ResponseEntity.ok(this.tAdminService.update(tAdmin));
}
/**
* 洗掉资料
*
* @param id 主键
* @return 洗掉是否成功
*/
@DeleteMapping
public ResponseEntity<Boolean> deleteById(Integer id) {
return ResponseEntity.ok(this.tAdminService.deleteById(id));
}
}
4、自动生成的mapper档案
<mapper namespace="com.tjcu.dao.TAdminDao">
<resultMap type="com.tjcu.entity.TAdmin" id="TAdminMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="username" column="username" jdbcType="VARCHAR"/>
<result property="password" column="password" jdbcType="VARCHAR"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="sex" column="sex" jdbcType="VARCHAR"/>
</resultMap>
<!--查询单个-->
<select id="queryById" resultMap="TAdminMap">
select
id, username, password, name, sex
from t_admin
where id = #{id}
</select>
<!--查询指定行资料-->
<select id="queryAllByLimit" resultMap="TAdminMap">
select
id, username, password, name, sex
from t_admin
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="username != null and username != ''">
and username = #{username}
</if>
<if test="password != null and password != ''">
and password = #{password}
</if>
<if test="name != null and name != ''">
and name = #{name}
</if>
<if test="sex != null and sex != ''">
and sex = #{sex}
</if>
</where>
limit #{pageable.offset}, #{pageable.pageSize}
</select>
<!--统计总行数-->
<select id="count" resultType="java.lang.Long">
select count(1)
from t_admin
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="username != null and username != ''">
and username = #{username}
</if>
<if test="password != null and password != ''">
and password = #{password}
</if>
<if test="name != null and name != ''">
and name = #{name}
</if>
<if test="sex != null and sex != ''">
and sex = #{sex}
</if>
</where>
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into t_admin(username, password, name, sex)
values (#{username}, #{password}, #{name}, #{sex})
</insert>
<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
insert into t_admin(username, password, name, sex)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.username}, #{entity.password}, #{entity.name}, #{entity.sex})
</foreach>
</insert>
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
insert into t_admin(username, password, name, sex)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.username}, #{entity.password}, #{entity.name}, #{entity.sex})
</foreach>
on duplicate key update
username = values(username),
password = values(password),
name = values(name),
sex = values(sex)
</insert>
<!--通过主键修改资料-->
<update id="update">
update t_admin
<set>
<if test="username != null and username != ''">
username = #{username},
</if>
<if test="password != null and password != ''">
password = #{password},
</if>
<if test="name != null and name != ''">
name = #{name},
</if>
<if test="sex != null and sex != ''">
sex = #{sex},
</if>
</set>
where id = #{id}
</update>
<!--通过主键洗掉-->
<delete id="deleteById">
delete from t_admin where id = #{id}
</delete>
</mapper>
5、自动生成的dao层
**
* (TAdmin)表数据库访问层
*
* @author 程序员小王
* @since 2021-12-26 21:07:15
*/
public interface TAdminDao {
/**
* 通过ID查询单条资料
*
* @param id 主键
* @return 实体物件
*/
TAdmin queryById(Integer id);
/**
* 统计总行数
*
* @param tAdmin 查询条件
* @return 总行数
*/
long count(TAdmin tAdmin);
/**
* 新增资料
*
* @param tAdmin 实体物件
* @return 影响行数
*/
int insert(TAdmin tAdmin);
/**
* 批量新增资料(MyBatis原生foreach方法)
*
* @param entities List<TAdmin> 实体物件串列
* @return 影响行数
*/
int insertBatch(@Param("entities") List<TAdmin> entities);
/**
* 批量新增或按主键更新资料(MyBatis原生foreach方法)
*
* @param entities List<TAdmin> 实体物件串列
* @return 影响行数
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL陈述句错误的例外,请自行校验入参
*/
int insertOrUpdateBatch(@Param("entities") List<TAdmin> entities);
/**
* 修改资料
*
* @param tAdmin 实体物件
* @return 影响行数
*/
int update(TAdmin tAdmin);
/**
* 通过主键洗掉资料
*
* @param id 主键
* @return 影响行数
*/
int deleteById(Integer id);
}
6、自动生成的业务层
/**
* (TAdmin)表服务实作类
*
* @author 程序员小王
* @since 2021-12-26 21:07:18
*/
@Service("tAdminService")
public class TAdminServiceImpl implements TAdminService {
@Resource
private TAdminDao tAdminDao;
/**
* 通过ID查询单条资料
*
* @param id 主键
* @return 实体物件
*/
@Override
public TAdmin queryById(Integer id) {
return this.tAdminDao.queryById(id);
}
/**
* 新增资料
*
* @param tAdmin 实体物件
* @return 实体物件
*/
@Override
public TAdmin insert(TAdmin tAdmin) {
this.tAdminDao.insert(tAdmin);
return tAdmin;
}
/**
* 修改资料
*
* @param tAdmin 实体物件
* @return 实体物件
*/
@Override
public TAdmin update(TAdmin tAdmin) {
this.tAdminDao.update(tAdmin);
return this.queryById(tAdmin.getId());
}
/**
* 通过主键洗掉资料
*
* @param id 主键
* @return 是否成功
*/
@Override
public boolean deleteById(Integer id) {
return this.tAdminDao.deleteById(id) > 0;
}
}
7、访问数据库
- 数据库资料
- 前端访问数据库
三、LomBok插件使用
1、LomBok解决的问题及缺点
(1)优点
lombok主要解决物体类层的get,set方法,构造器,例外处理;I/O流的关闭操作等等,这些代码没有什么技术含量,又影响着代码的美观,Lombok插件接收解决这些问题的
(2)缺点
但是企业开发中有些公司不使用lomBok,因为只要有一个人使用了lombok,整个项目组都需要使用lombok
2、Lombok的使用
(1)SpringBoot和IDEA官方有推荐使用
- Idea已经内置了LomBok插件
- SpringBoot2.1x之后的版本已经内置了LomBok的相关依赖
(2)引入相关的依赖
<!--lombok的相关依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
注意:Lombok的scope=provided
,说明它只在编译阶段生效,不需要打入包中,事实正是如此,Lombok在编译期将带Lombok注解的Java档案正确编译为完整的Class档案,
(3)IDEA对LomBok的支持
- 点击File-- Settings设定界面,开启 AnnocationProcessors:
开启该项是为了让Lombok注解在编译阶段起到作用
(4)LomBok相关注解的使用
- 没使用Lombok之前
public class TAdmin implements Serializable {
private static final long serialVersionUID = -81568151678905514L;
private Integer id;
private String username;
private String password;
private String name;
private String sex;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
- 使用Lombok之后
@Setter
@Getter //生成所有成员变量的getter/setter方法;作用于成员变量上
@ToString //覆写默认的toString()方法
@NoArgsConstructor //生成无参构造器
@AllArgsConstructor //生成全参构造器
public class TAdmin implements Serializable {
private static final long serialVersionUID = -81568151678905514L;
private Integer id;
private String username;
private String password;
private String name;
private String sex;
}
3、Lombok实作原理
javac就支持“JSR 269 Pluggable Annotation Processing API
”规范,只要程序实作了该API,就能在javac运行的时候得到呼叫,
- javac对原始码进行分析,生成一棵抽象语法树(
AST
) - javac编译程序中呼叫实作了JSR 269的Lombok程序
- 此时Lombok就对第一步骤得到的AST进行处理,找到Lombok注解所在类对应的语法树 (AST),然后修改该语法树(AST),增加Lombok注解定义的相应树节点
- javac使用修改后的抽象语法树(AST)生成字节码档案
4、Lombok里面的相关注解
(1)@Getter/@Setter:
- 作用类上,生成所有成员变量的
getter/setter方法
;作用于成员变量上,生成该成员变量的getter/setter方法,可以设定访问权限及是否懒加载等,
@Getter
@Setter
public class Emp implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Double salary;
private Integer age;
}
(2)@ToString:
- 作用于类,覆写默认的toString()方法,可以通过of属性 限定显示某些栏位,通过exclude属性 排除某些栏位,
@Getter
@Setter
@ToString(of={"name","salary"},exclude = {"age"})
@AllArgsConstructor
public class Emp implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Double salary;
private Integer age;
}
(3)生成建构式相关的注解
标签:
发表评论
您的电子邮件地址不会被公开。 必填的字段已做标记 *
0 评论