• (十五)mybatis 逆向工程


    目录


    为什么需要逆向工程

    对于数据库中的那么多的表 ,基本的 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

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

    总结

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

  • 相关阅读:
    第3章 Activity的生命周期
    掌握jQuery插件开发,这篇文章就够了
    第22章 Master-Detail 用户界面
    JavaScript动画1-速度动画
    Compass学习指南
    Compass中导入Normalize
    Sass学习指南
    BASIC-2 01字串
    leetocode题解
    机器学习算法的sklearn实现
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665665.html
Copyright © 2020-2023  润新知