猿蜕变19——一文掌握代码自动生成

时间:2022-07-22
本文章向大家介绍猿蜕变19——一文掌握代码自动生成,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

看过之前的蜕变系列文章,相信你对SpringMVC 、Spring、 Mybatis的整合有了一定的心得,学会了搭建属于自己的开发框架,也了解了如何使用整合后的框架进行开发。今天,我们为了解决你在开发中的体力劳动以及编写sql出错的概率,让你从入门到放弃,教你使用一个工具——mybatis generator。

我们之前使用mybatis时,需要人工编写dao层,bean,mapper配置文件,在一些简单的场景下,这些操作有一些套路化的问题,比如单表操作的基于字段的新增、修改、删除、查找等简单工作会显得比较繁琐,这类代码也比较固定。mybatis提供了帮助开发者解决这些繁琐的问题,提供了一个工具——mybatisgenerator用于生成相关的mapper文件、并且生成增删改查相关的sql语句的功能。

不过对于核心业务的工作流程,我们还是要很小心的把流程控制在sql层面,这个帮助就不是很大了,核心的业务用它上层一个bug,数据出问题,真心伤不起。生产的代码也算不上规范,也有一些冗余吧,后续工厂君会根据某些代码规范搞一套代码生成器来帮助大家。

在没有自己定义的代码生成器前,不过这玩意儿有一个比较好的作用就是,能够生成一些代码,和公共的可以利用的sql,而这些字段如果手动编写,容易出错,选择使用它来做半自动化开发,还是阔以的……

mybatis-generator的使用方式有很多种,由于我们使用maven进行应用开发,这里我们就以maven为例进行介绍。

第一步

首先要在maven项目中添加依赖,当然你得确保在你的maven中已经添加了mybatis相关的其他依赖jar包:

<dependency>
            <groupId>org.mybatis.generator</groupId>
           <artifactId>mybatis-generator-maven-plugin</artifactId>
           <version>1.3.5</version>
        </dependency>

第二步

添加generator的插件:

<plugin>
               <groupId>org.mybatis.generator</groupId>
               <artifactId>mybatis-generator-maven-plugin</artifactId>
               <version>1.3.5</version>
                <executions>
                    <execution>
                        <id>Generate MyBatisArtifacts</id>
                        <goals>
                           <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                       <groupId>mysql</groupId>
                       <artifactId>mysql-connector-java</artifactId>
                       <version>5.1.46</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <!--配置文件的路径-->
                   <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
                   <overwrite>true</overwrite>
                </configuration>
            </plugin>

第三步

在resources目录中创建一个generatorConfig.xml逆向工程的配置文件:

<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
       PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration1.0//EN"
       "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
 
<generatorConfiguration>
   <!--如果不需要生成example的话将targetRuntime设置为MyBatis3Simple即可-->
   <context id="test" targetRuntime="MyBatis3">
 
       <commentGenerator>
           <!-- 生成的注释是否包含生成的时间,一般设置为true,不生成时间 -->
           <property name="suppressDate" value="true" />
           <!-- 是否去除自动生成的注释 true:是 :false:否-->
           <property name="suppressAllComments" value="true"/>
       </commentGenerator>
       <!--数据库链接URL,用户名、密码 -->
       <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                       connectionURL="jdbc:mysql://127.0.0.1:3306/route"userId="root"
                       password="123456">
       </jdbcConnection>
       <javaTypeResolver>
           <!-- 是否将数据库中的decimal类型转换为java的BigDecimal类型-->
           <property name="forceBigDecimals" value="false"/>
       </javaTypeResolver>
       <!-- 生成模型的包名和位置 -->
       <javaModelGenerator targetPackage="com.pz.domain"
                           targetProject="srcmainjava">
           <property name="enableSubPackages" value="true"/>
           <property name="trimStrings" value="true" />
       </javaModelGenerator>
       <!-- 生成映射文件的包名和位置 -->
       <sqlMapGenerator targetPackage="com.pz.dao"
                         targetProject="srcmainjava">
           <property name="enableSubPackages" value="true"/>
       </sqlMapGenerator>
       <!-- 生成DAO的包名和位置 -->
       <javaClientGenerator type="XMLMAPPER"
                            targetPackage="com.pz.dao"
                             targetProject="srcmainjava">
           <property name="enableSubPackages" value="true"/>
       </javaClientGenerator>
 
       <!-- 要生成哪些表 注意后面的属性,如果不需要Example查询工具类 将这几个属性设置为false即可,
        如果有多张表,复制粘贴即可-->
       <table tableName="travel_route"domainObjectName="TravelRoute"
              enableCountByExample="true"
              enableUpdateByExample="true"
              enableDeleteByExample="true"
              enableSelectByExample="true"
               selectByExampleQueryId="true">
 
       </table>
 
 
   </context>
</generatorConfiguration>

第四步

添加完毕之后,在idea的maven中执行下面命令mybatis-generator:generate,即可:如果成功了,在你指定的目录中可以看到dao、bean、mapper全部生成了。

注意噢:mybatis generator 只会根据单表来生成文件,并不会生成表之间的关系,假如Mapper文件已经存在时,如果进行重新生成mapper文件时,内容不被覆盖而是进行内容追加,结果导致mybatis解析失败。 解决方法:删除原来已经生成的mapper文件之后再进行生成。Mybatis自动生成的bean及dao文件不是内容而是直接覆盖没有此问题。

Example类的用法

我们使用mybatis generator生成的文件中有一个TravelRouteExample类,该类的作用就是帮我们实现多条件的查询,比如,根据id查询线路我们可以像下面这样编写代码:

public TravelRoute findUserById(int id) {
 
        TravelRoute.Criteria criteria =example.createCriteria();
 
        criteria.andIdEqualTo(id);
 
        List< TravelRoute > routes = travelRouteDao.selectByExample(example);
 
        if (routes!= null){
            return routes.get(0);
        }else{
            return null;
        }
 
}