0


EasyCode和Lombok插件的使用,一键生成所需代码(两大代码神器)

📒 程序员小王的博客:程序员小王的博客
🎉 欢迎点赞 👍 收藏 ⭐留言 📝
😊 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
🍅java自学的学习路线:java自学的学习路线

一、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")publicclassTAdminController{/**
     * 服务对象
     */@ResourceprivateTAdminService tAdminService;/**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */@GetMapping("{id}")publicResponseEntity<TAdmin>queryById(@PathVariable("id")Integer id){returnResponseEntity.ok(this.tAdminService.queryById(id));}/**
     * 新增数据
     *
     * @param tAdmin 实体
     * @return 新增结果
     */@PostMappingpublicResponseEntity<TAdmin>add(TAdmin tAdmin){returnResponseEntity.ok(this.tAdminService.insert(tAdmin));}/**
     * 编辑数据
     *
     * @param tAdmin 实体
     * @return 编辑结果
     */@PutMappingpublicResponseEntity<TAdmin>edit(TAdmin tAdmin){returnResponseEntity.ok(this.tAdminService.update(tAdmin));}/**
     * 删除数据
     *
     * @param id 主键
     * @return 删除是否成功
     */@DeleteMappingpublicResponseEntity<Boolean>deleteById(Integer id){returnResponseEntity.ok(this.tAdminService.deleteById(id));}}

4、自动生成的mapper文件

<mappernamespace="com.tjcu.dao.TAdminDao"><resultMaptype="com.tjcu.entity.TAdmin"id="TAdminMap"><resultproperty="id"column="id"jdbcType="INTEGER"/><resultproperty="username"column="username"jdbcType="VARCHAR"/><resultproperty="password"column="password"jdbcType="VARCHAR"/><resultproperty="name"column="name"jdbcType="VARCHAR"/><resultproperty="sex"column="sex"jdbcType="VARCHAR"/></resultMap><!--查询单个--><selectid="queryById"resultMap="TAdminMap">
        select
          id, username, password, name, sex
        from t_admin
        where id = #{id}
    </select><!--查询指定行数据--><selectid="queryAllByLimit"resultMap="TAdminMap">
        select
          id, username, password, name, sex
        from t_admin
        <where><iftest="id != null">
                and id = #{id}
            </if><iftest="username != null and username != ''">
                and username = #{username}
            </if><iftest="password != null and password != ''">
                and password = #{password}
            </if><iftest="name != null and name != ''">
                and name = #{name}
            </if><iftest="sex != null and sex != ''">
                and sex = #{sex}
            </if></where>
        limit #{pageable.offset}, #{pageable.pageSize}
    </select><!--统计总行数--><selectid="count"resultType="java.lang.Long">
        select count(1)
        from t_admin
        <where><iftest="id != null">
                and id = #{id}
            </if><iftest="username != null and username != ''">
                and username = #{username}
            </if><iftest="password != null and password != ''">
                and password = #{password}
            </if><iftest="name != null and name != ''">
                and name = #{name}
            </if><iftest="sex != null and sex != ''">
                and sex = #{sex}
            </if></where></select><!--新增所有列--><insertid="insert"keyProperty="id"useGeneratedKeys="true">
        insert into t_admin(username, password, name, sex)
        values (#{username}, #{password}, #{name}, #{sex})
    </insert><insertid="insertBatch"keyProperty="id"useGeneratedKeys="true">
        insert into t_admin(username, password, name, sex)
        values
        <foreachcollection="entities"item="entity"separator=",">
        (#{entity.username}, #{entity.password}, #{entity.name}, #{entity.sex})
        </foreach></insert><insertid="insertOrUpdateBatch"keyProperty="id"useGeneratedKeys="true">
        insert into t_admin(username, password, name, sex)
        values
        <foreachcollection="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><!--通过主键修改数据--><updateid="update">
        update t_admin
        <set><iftest="username != null and username != ''">
                username = #{username},
            </if><iftest="password != null and password != ''">
                password = #{password},
            </if><iftest="name != null and name != ''">
                name = #{name},
            </if><iftest="sex != null and sex != ''">
                sex = #{sex},
            </if></set>
        where id = #{id}
    </update><!--通过主键删除--><deleteid="deleteById">
        delete from t_admin where id = #{id}
    </delete></mapper>

5、自动生成的dao层

***(TAdmin)表数据库访问层
 **@author 程序员小王
 *@since2021-12-2621:07:15*/publicinterfaceTAdminDao{/**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */TAdminqueryById(Integer id);/**
     * 统计总行数
     *
     * @param tAdmin 查询条件
     * @return 总行数
     */longcount(TAdmin tAdmin);/**
     * 新增数据
     *
     * @param tAdmin 实例对象
     * @return 影响行数
     */intinsert(TAdmin tAdmin);/**
     * 批量新增数据(MyBatis原生foreach方法)
     *
     * @param entities List<TAdmin> 实例对象列表
     * @return 影响行数
     */intinsertBatch(@Param("entities")List<TAdmin> entities);/**
     * 批量新增或按主键更新数据(MyBatis原生foreach方法)
     *
     * @param entities List<TAdmin> 实例对象列表
     * @return 影响行数
     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
     */intinsertOrUpdateBatch(@Param("entities")List<TAdmin> entities);/**
     * 修改数据
     *
     * @param tAdmin 实例对象
     * @return 影响行数
     */intupdate(TAdmin tAdmin);/**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */intdeleteById(Integer id);}

6、自动生成的业务层

/**
 * (TAdmin)表服务实现类
 *
 * @author 程序员小王
 * @since 2021-12-26 21:07:18
 */@Service("tAdminService")publicclassTAdminServiceImplimplementsTAdminService{@ResourceprivateTAdminDao tAdminDao;/**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */@OverridepublicTAdminqueryById(Integer id){returnthis.tAdminDao.queryById(id);}/**
     * 新增数据
     *
     * @param tAdmin 实例对象
     * @return 实例对象
     */@OverridepublicTAdmininsert(TAdmin tAdmin){this.tAdminDao.insert(tAdmin);return tAdmin;}/**
     * 修改数据
     *
     * @param tAdmin 实例对象
     * @return 实例对象
     */@OverridepublicTAdminupdate(TAdmin tAdmin){this.tAdminDao.update(tAdmin);returnthis.queryById(tAdmin.getId());}/**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */@OverridepublicbooleandeleteById(Integer id){returnthis.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之前
publicclassTAdminimplementsSerializable{privatestaticfinallong serialVersionUID =-81568151678905514L;privateInteger id;privateString username;privateString password;privateString name;privateString sex;publicIntegergetId(){return id;}publicvoidsetId(Integer id){this.id = id;}publicStringgetUsername(){return username;}publicvoidsetUsername(String username){this.username = username;}publicStringgetPassword(){return password;}publicvoidsetPassword(String password){this.password = password;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicStringgetSex(){return sex;}publicvoidsetSex(String sex){this.sex = sex;}}
  • 使用Lombok之后
@Setter@Getter//生成所有成员变量的getter/setter方法;作用于成员变量上@ToString//覆盖默认的toString()方法@NoArgsConstructor//生成无参构造器@AllArgsConstructor//生成全参构造器publicclassTAdminimplementsSerializable{privatestaticfinallong serialVersionUID =-81568151678905514L;privateInteger id;privateString username;privateString password;privateString name;privateString 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@SetterpublicclassEmpimplementsSerializable{privatestaticfinallong serialVersionUID =1L;privateInteger id;privateString name;privateDouble salary;privateInteger age;}

(2)@ToString:

  • 作用于类,覆盖默认的toString()方法,可以通过of属性 限定显示某些字段,通过exclude属性 排除某些字段。
@Getter@Setter@ToString(of={"name","salary"},exclude ={"age"})@AllArgsConstructorpublicclassEmpimplementsSerializable{privatestaticfinallong serialVersionUID =1L;privateInteger id;privateString name;privateDouble salary;privateInteger age;}

(3)生成构造函数相关的注解

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor:

作用于类上,用于生成构造函数。有staticName、access等属性。

staticName属性一旦设定,将采用静态方法的方式生成实例,access属性可以限定访问权限。

@NoArgsConstructor

:生成无参构造器;

@RequiredArgsConstructor

:生成包含final和@NonNull注解的成员变量的构造器;

@AllArgsConstructor

:生成全参构造器

@Getter@Setter@ToString(of={"name","salary"},exclude ={"age"})@AllArgsConstructor//全参构造器@NoArgsConstructor//无参构造器publicclassEmpimplementsSerializable{privatestaticfinallong serialVersionUID =1L;privateInteger id;privateString name;privateDouble salary;privateInteger age;}

(4)@EqualsAndHashCode

  • 作用于类,覆盖默认的equals和hashCode

(5)@NonNull:

  • 主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常。
@Getter@Setter@ToString(of={"name","salary"},exclude ={"age"})@AllArgsConstructor//全参构造器@NoArgsConstructor//无参构造器@EqualsAndHashCode//作用于类,覆盖默认的equals和hashCodepublicclassEmpimplementsSerializable{privatestaticfinallong serialVersionUID =1L;privateInteger id;/**
     * @NonNull代码name不能为空,否则报错
     */@NonNullprivateString name;privateDouble salary;privateInteger age;}

(6)@Data

  • 作用于类上,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor
//@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor集合@Data@AllArgsConstructor//一定注意不包含全构造器publicclassEmpimplementsSerializable{privatestaticfinallong serialVersionUID =1L;privateInteger id;privateString name;privateDouble salary;privateInteger age;}


本文转载自: https://blog.csdn.net/weixin_44385486/article/details/122166596
版权归原作者 小王java 所有, 如有侵权,请联系我们删除。

“EasyCode和Lombok插件的使用,一键生成所需代码(两大代码神器)”的评论:

还没有评论