(十五)mybatis 逆向工程

版权声明:转载请给出原文链接 https://blog.csdn.net/youngyouth/article/details/82682980

目录


为什么需要逆向工程

对于数据库中的那么多的表 ,基本的 CRUD 操作 ,以及 mybatis 需要使用的 接口mapper ,这些工作,mybatis 官方提供了工具,生成这些代码;

但是注意生成的代码都是基于 单表 的,也就是外键关系是不会考虑的;

我们这里使用逆向是 数据库 ——> java 代码


使用方法

有好几种方法,这里介绍 Java代码 + 配置文件 的方式 ;


  1. 导入整合包

    导入 mybatis-generator-core-1.3.2.jar 包 ,这里需要注意导入的包,是根据你的 JDK 版本 来选择的 ;

    最新的整合包 1.3.7 使用了 JDK8TemporalAccessor 类,假如你的 JDK 版本低于 8,没有这个类,就会爆错!

    (笔者自己调试了 三个半小时

      Exception in thread "main" java.lang.NoClassDefFoundError: java/time/temporal/TemporalAccessor
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:274)
        at org.mybatis.generator.internal.ObjectFactory.internalClassForName(ObjectFactory.java:142)
        at org.mybatis.generator.internal.ObjectFactory.createInternalObject(ObjectFactory.java:178)
        at org.mybatis.generator.internal.ObjectFactory.createCommentGenerator(ObjectFactory.java:239)
        at org.mybatis.generator.config.Context.getCommentGenerator(Context.java:333)
        at org.mybatis.generator.codegen.mybatis3.model.ExampleGenerator.getCompilationUnits(ExampleGenerator.java:57)
        at org.mybatis.generator.codegen.mybatis3.IntrospectedTableMyBatis3Impl.getGeneratedJavaFiles(IntrospectedTableMyBatis3Impl.java:177)
        at org.mybatis.generator.config.Context.generateFiles(Context.java:517)
        at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:269)
        at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:139)
        at test.MybatisGeneratorTest.generator(MybatisGeneratorTest.java:22)
        at test.MybatisGeneratorTest.main(MybatisGeneratorTest.java:26)

  2. 导入数据库驱动

    导入驱动包,就好了!


  3. 导入配置文件

    官网给我模板了,我们只需要修改下,其中只需要,改动我写注释的地方

    <?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="DB2Tables" targetRuntime="MyBatis3">
            <commentGenerator>
                <property name="suppressDate" value="true"/>
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
    
            <!--数据库链接地址账号密码-->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql:///mybatisDay01?charset=utf-8"
                            userId="root" password="root">
            </jdbcConnection>
    
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
    
            <!--生成 pojo 类存放位置-->
            <javaModelGenerator targetPackage="xin.ijava.ssm.po" targetProject="src">
                <property name="enableSubPackages" value="true"/>
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
            <!--生成 映射文件 存放位置-->
            <sqlMapGenerator targetPackage="xin.ijava.ssm.mapper" targetProject="src">
                <property name="enableSubPackages" value="true"/>
            </sqlMapGenerator>
            <!--生成 DaoMapper  类存放位置-->
            <javaClientGenerator type="XMLMAPPER" targetPackage="xin.ijava.ssm.mapper" targetProject="src">
                <property name="enableSubPackages" value="true"/>
            </javaClientGenerator>
    
            <!--指定为什么表,逆向工程生成java代码-->
            <!--前面是表名,后面是生成的类名字-->
            <table tableName="items" domainObjectName="Item"/>
            <table tableName="order" domainObjectName="Order"/>
            <table tableName="user" domainObjectName="User"/>
            <table tableName="orderdetail" domainObjectName="OrderDetail"/>
    
    
        </context>
    
    </generatorConfiguration>
    

  4. 逆向工程java代码

    同样是官网给出的,只需要自己填入上面的配置文件的路径,就行 ;

    import org.mybatis.generator.api.MyBatisGenerator;
    import org.mybatis.generator.config.Configuration;
    import org.mybatis.generator.config.xml.ConfigurationParser;
    import org.mybatis.generator.internal.DefaultShellCallback;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MybatisGeneratorTest {
        public static void generator() throws Exception{
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;
    
            //传入逆向工程的配置文件
            File configFile = new File("E:\\myIDEAWorkspace\\MybatisGenerator\\src\\generatorConfig.xml");
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(configFile);
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
        }
        public static void main(String[] args) {
            try {
                generator();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    

  5. 生成的目录截图

    这里写图片描述


如何读懂生成的代码

可以去生成的配置文件中,读源代码 !

但是这里有几个,单独说一下 ;

  1. xxxByExample

    selectByExample 类似于这样的 xxxByExample ,是根据 条件查询 进行操作的,有根据条件查询、删除、更新 ;

        @Test
        public void selectByExample() {
    //        按照条件查询
            ItemsExample example = new ItemsExample();
    //        该对象是用于构造条件的
            ItemsExample.Criteria criteria = example.createCriteria();
    //      查询名字是笔记本,并且 id 在8000 - 9000 之间的
            criteria.andIdBetween(8000, 9000);
            criteria.andNameEqualTo("笔记本");
    
            List<Items> items = itemsMapper.selectByExample(example);
        }

  2. xxxSelective

    这是 有选择性 的干嘛。只有 更新插入 才有这个,只有传入的对象的字段不为空的属性,才会被更新到数据库里面 ;

总结

逆向工程,操作很简单,下面就是自己去理解生成的代码了。加油!

猜你喜欢

转载自blog.csdn.net/youngyouth/article/details/82682980
今日推荐