• MyBatis逆向工程自动生成代码


    什么是逆向工程

    MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po..)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。

    使用逆向工程

    使用MyBatis的逆向工程,需要导入逆向工程的jar包,我用的是mybatis-generator-core-1.3.2.jar,下面开始总结一下MyBatis逆向工程的使用步骤。

    新建一个工程(重要)

    我们要新建一个java工程,这个工程专门用来使用逆向工程生成代码的。有些人可能会问,为什么要新建一个工程呢?直接在原来工程中你想生成不就可以了么?确实是这样,可以在原来的工程中生成,但是有风险,因为MyBatis是根据配置文件来生成的(下面会说到),如果生成的路径中有相同的文件,那么就会覆盖原来的文件,这样会有风险。所以开发中一般都会新建一个java工程来生成,然后将生成的文件拷贝到自己的工程中,这也不麻烦,而且很安全。如下:

    从上图中看,GeneratorSqlmap.java就是要执行的java代码,执行它即可生成我们需要的代码;cn.itcast.ssm.mapper/po是执行过程中新建的包,这个包都可以在generatorConfig.xml的配置文件中指定,最好是跟我们自己项目的包名一致,后面就可以直接拷贝了,就不需要修改包名了;就是jar包;generatorConfig.xml是配置文件,下面会详细分析。 

    配置逆向工程的配置文件

     MyBatis逆向工程生成代码需要一个配置文件,名字随便起。然后MyBatis会根据这个配置文件中的配置,生成相应的代码。mybatis-generator-core-1.3.2.jar这个jar包里面有帮助文档,打开后里面有配置文件的模板,这里就不再赘述了,下面先把配置文件写好:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration
    PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    <generatorConfiguration>
    <context id="testTables" targetRuntime="MyBatis3">
    <commentGenerator>
    <!-- 是否去除自动生成的注释 -->
    <property name="suppressAllComments" value="true"/>
    </commentGenerator>
    <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/day15"
    userId="root" password="123456">
    </jdbcConnection>

    <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
    NUMERIC 类型解析为java.math.BigDecimal -->
    <javaTypeResolver>
    <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>

    <!-- targetProject:生成PO类的位置 -->
    <javaModelGenerator targetPackage="cn.itcast.ssm.po"
    targetProject=".src">
    <!-- enableSubPackages:是否让schema作为包的后缀 -->
    <property name="enableSubPackages" value="false" />
    <!-- 从数据库返回的值被清理前后的空格 -->
    <property name="trimStrings" value="true" />
    </javaModelGenerator>
    <!-- targetProject:mapper映射文件生成的位置 -->
    <sqlMapGenerator targetPackage="cn.itcast.ssm.mapper"
    targetProject=".src">
    <!-- enableSubPackages:是否让schema作为包的后缀 -->
    <property name="enableSubPackages" value="false" />
    </sqlMapGenerator>
    <!-- targetPackage:mapper接口生成的位置 -->
    <javaClientGenerator type="XMLMAPPER"
    targetPackage="cn.itcast.ssm.mapper"
    targetProject=".src">
    <!-- enableSubPackages:是否让schema作为包的后缀 -->
    <property name="enableSubPackages" value="false" />
    </javaClientGenerator>

    <table tableName="items"></table>
    <table tableName="orders"></table>
    <table tableName="orderdetail"></table>
    <table tableName="user"></table>

    </context>

    </generatorConfiguration>

    从上面的配置文件中可以看出,配置文件主要做的几件事是:

    1. 连接数据库,这是必须的
    2. 指定要生成代码的位置,要生成的代码包括po类,mapper.xml和mapper.java
    3. 指定数据库中想要生成哪些表

    执行逆向工程生成代码

    package cn.itcast.ssm.mapper;

    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    import cn.itcast.ssm.po.User;

    public class UserMapperTest {

    private ApplicationContext applicationContext;

    @Before
    public void setUp() throws Exception {
    applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
    }

    @Test
    public void testFindUserById() throws Exception {
    UserMapper userMapper=(UserMapper) applicationContext.getBean("userMapper");
    User user=userMapper.selectByPrimaryKey(1);
    System.out.println(user);
    }

    }

     生成后刷新项目

    接着在Spring核心配置文件——application-context.xml添加如下配置:

    最后编写UserMapper接口的单元测试类——UserMapperTest.java,内容如下:

    package cn.itcast.ssm.mapper;

    import java.util.Date;

    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    import cn.itcast.ssm.po.User;

    public class UserMapperTest {

    private ApplicationContext applicationContext;

    @Before
    public void setUp() throws Exception {
    applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
    }

    @Test
    public void testSelectByPrimaryKey() throws Exception {
    UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");
    User user = userMapper.selectByPrimaryKey(1);
    System.out.println(user);
    }

    @Test
    public void testInsert() throws Exception {
    UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");
    User user = new User();
    user.setName("武松");
    user.setSex("1");
    user.setBirthday(new Date());
    user.setAddress("河北邢台");
    userMapper.insert(user);
    }

    }

    可以看出,逆向工程生成的代码,基本上和之前使用的差不多,只不过它更规范一点,而且还多了自定义查询条件的java类,用起来还是挺方便的。

  • 相关阅读:
    线程池
    在Pycharm中使用GitHub
    “全能”选手—Django 1.10文档中文版Part3
    “全能”选手—Django 1.10文档中文版Part2
    “全能”选手—Django 1.10文档中文版Part1
    CSS3点点滴滴
    Django之Form、CSRF、cookie和session
    Django之路由、模板和模型系统
    jQuery 3.1 API中文文档
    html/css/js小技巧实例
  • 原文地址:https://www.cnblogs.com/xiqoqu/p/9240670.html
Copyright © 2020-2023  润新知