Mybatis学习笔记(九) —— Mybatis逆向工程

一、什么是Mybatis逆向工程?

  简单的解释就是通过数据库中的单表,自动生成java代码

  我们平时在使用Mabatis框架进行Web应用开发的过程中,需要根据数据库表编写对应的Pojo类和Mapper映射文件,而这个过程重复单一且浪费时间。基于此,MyBatis官方为了让开发者更加方便快捷地使用MYBatis框架而不必编写繁琐的Pojo类以及Mapper文件,提供了一个十分简洁的逆向工程的工具。

  Mybatis官方提供了逆向工程,可以针对数据库的表自动生成对应的mybatis代码(mapper.javamapper.xmlpojo类)有了这个工具可以大大简化我们持久层代码的编写,和写代码过程中出错的概率。

二、逆向工程的下载

  https://github.com/mybatis/generator/releases/tag/mybatis-generator-1.3.2

  下载完后,先将逆向工程复制到工作空间中

    

  然后再导入到eclipse中:

    

    

    

三、Mybatis逆向工程的使用步骤

  第一步:在generatorConfig.xml中配置Mapper生成的详细信息

      

  注意修改以下几点:

    1. 修改要生成的数据库表
    2. pojo文件所在包路径
    3. Mapper所在的包路径
<?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>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/e3mall" userId="root"
            password="123">
        </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.mybatis.pojo"
            targetProject=".src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="cn.itcast.mybatis.mapper" 
            targetProject=".src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="cn.itcast.mybatis.mapper" 
            targetProject=".src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定数据库表 -->
        <table schema="" tableName="user"></table>
        <table schema="" tableName="order"></table>
    </context>
</generatorConfiguration>

   第二步:生成逆向工程代码

  找到下图所示的java文件,执行工程main主函数

  

  

  刷新工程,发现代码生成:

  

  注意:Mapper映射文件已经存在时,如果重新生成mapper.xml文件,内容不被覆盖而是进行内容追加,结果导致mybatis解析失败。故需要重新生成代码时,先删除原来已经生成的mapper xml文件再进行生成。Mybatis自动生成的pojo类及对应的mapper.java文件不是内容而是直接覆盖没有此问题。

四、测试逆向工程代码

  第一步:将生成的代码复制到mybatis-spring工程中

      

  第二步:在applicationContext.xml修改spring配置文件

    <!-- Mapper代理的方式开发方式,扫描包方式配置代理 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 配置mapper接口 -->
        <property name="basePackage" value="cn.itcast.mybatis.mapper"/>
    </bean>

  第三步:编写测试方法:

public class UserMapperTest {

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

    @Test
    public void testInsert() {
        // 获取Mapper
        UserMapper userMapper = this.context.getBean(UserMapper.class);
        User user = new User();
        user.setUsername("曹操");
        user.setAddress("魏国");
        user.setSex("男");
        
        userMapper.insert(user);
    }

    @Test
    public void testSelectByExample() {
        // 获取Mapper
        UserMapper userMapper = this.context.getBean(UserMapper.class);
        
        // 创建User对象扩展类,用户设置查询条件
        UserExample example = new UserExample();
        Criteria criteria = example.createCriteria();
        criteria.andUsernameLike("%张%");
        
        // 查询数据
        List<User> list = userMapper.selectByExample(example);
        for (User user : list) {
            System.out.println(user);
        }
        
    }

    @Test
    public void testSelectByPrimaryKey() {
        // 获取Mapper
        UserMapper userMapper = this.context.getBean(UserMapper.class);
        User user = userMapper.selectByPrimaryKey(1);
        System.out.println(user);
    }

}

参考文章:https://blog.csdn.net/lisongjia123/article/details/51244029

原文地址:https://www.cnblogs.com/yft-javaNotes/p/10203322.html