zoukankan      html  css  js  c++  java
  • mybatis逆向工程

    mybatis的逆向工程生成


    一、引入jar包  

               MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器。它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码。它将内省数据库表(或许多表),并将生成可用于访问表的工件。 这减少了设置对象和配置文件以与数据库表交互的初始麻烦。MBG寻求对简单CRUD(创建,检索,更新,删除)的大部分数据库操作产生重大影响。您仍然需要为连接查询或存储过程手动编写SQL和对象代码。
    官方地址: http://www.mybatis.org/generator, mybatis的逆向工程需要引入数据库驱动包,mybatis包,以及逆向工程jar包,本文案例使用当前版本最新的jar包,数据库使用mysql,由于jar少就不再创建maven工程,查看官方地址可使用谷歌浏览器自带翻译功能,虽然是机译,但是看懂还是可以的。
         jar下载地址:https://mvnrepository.com/
         数据库连接包:mysql-connector-java-8.0.15.jar
         逆向工程核心包:mybatis-generator-core-1.3.7.jar
         mybatis核心包:mybatis-3.5.0.jar

    二、配置xml文件

        创建简单的java项目,引入jar包如下,在src目录下创建generatorConfig.xml,xml文件名字自定义,xml文件中需要配置:

              (1)数据库连接

              (2)使用的表名

              (3)生成mapper接口、pojo类及 mapper.xml文件的包名

              (4)字段类型进行对应配置

           完整的xml文件如下:

         

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE generatorConfiguration
     3   PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
     4   "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
     5 <generatorConfiguration>
     6     <context id="testTables" targetRuntime="MyBatis3">
     7         <commentGenerator>
     8         <!-- 去除自动生成的注释 true -->
     9            <property name="suppressAllComments" value="true" />
    10         </commentGenerator>
    11         <!--数据库连接的信息:驱动类、连接地址、用户名、密码,这里配置的是mysql的,当然也可以配置oracle等数据库 -->
    12         <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
    13             connectionURL="jdbc:mysql://localhost:3306/goods" 
    14             userId="root"
    15             password="www1928..com">
    16         </jdbcConnection>
    17         <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL和 NUMERIC 类型解析为java.math.BigDecimal -->
    18         <javaTypeResolver>
    19             <property name="forceBigDecimals" value="false" />
    20         </javaTypeResolver>
    21         <!-- targetProject:生成PO类的位置 -->
    22         <javaModelGenerator targetPackage="com.idt.mybatis.pojo" targetProject=".src">
    23             <!-- enableSubPackages:是否让schema作为包的后缀 -->
    24             <property name="enableSubPackages" value="false" />
    25             <!-- 从数据库返回的值被清理前后的空格 -->
    26             <property name="trimStrings" value="true" />
    27         </javaModelGenerator>
    28         <!-- targetProject:mapper映射文件生成的位置 -->
    29         <sqlMapGenerator targetPackage="com.idt.mybatis.mapper" targetProject=".src">
    30             <!-- enableSubPackages:是否让schema作为包的后缀 -->
    31             <property name="enableSubPackages" value="false" />
    32         </sqlMapGenerator>
    33         <!-- targetPackage:mapper接口生成的位置 -->
    34         <javaClientGenerator type="XMLMAPPER"
    35             targetPackage="com.idt.mybatis.mapper" targetProject=".src">
    36             <!-- enableSubPackages:是否让schema作为包的后缀 -->
    37             <property name="enableSubPackages" value="false" />
    38         </javaClientGenerator>
    39         <!-- 指定数据库表 -->
    40         <table tableName="fan"></table>
    41     </context>
    42 </generatorConfiguration>

    三、建立工程类

    package com.idt.generator;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    
    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;
    
    public class GeneratorExcute {
        public static void main(String[] args) {
            String path = GeneratorExcute.class.getClassLoader().getResource("generatorConfig.xml").getPath();
            //由于绝对路径中出现了%20代替空格,所以替换一下空格                
            path = path.replaceAll("%20", " ");
            List<String> listStr = new ArrayList<String>();
            try {
                ConfigurationParser cp = new ConfigurationParser(listStr);
                Configuration config = cp.parseConfiguration(new File(path));
                DefaultShellCallback callback = new DefaultShellCallback(true);
                MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, listStr);
                myBatisGenerator.generate(null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

         执行代码,refresh刷新项目,便可以到生成代码,拷贝到需要的工程下面即可。

         最终项目结构如图:

         

         PS: 在测试工程类的时候,发现控制台打印了

         Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'.The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
         该原因是由于mysql的驱动升级造成的,将驱动从com.mysql.jdbc.Driver改成com.mysql.cj.jdbc.Driver即可,

    四、测试  

         查看生成的代码文件,我们会发现与我们以前自定义使用pojo类有些不同,pojo包下有正常定义的TUser.java类和TUserExample.java两个类。TUserExample这个类是专门用来对这个单表进行条件查询的类,大家可以用下面的例子来测试:

        创建mybatisConfig.xml文件

      

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC">
                </transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://127.0.0.1:3306/goods" />
                    <property name="username" value="root" />
                    <property name="password" value="www1928..com" />
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="com/idt/mybatis/mapper/TUserMapper.xml"/>
        </mappers>
    </configuration>

    创建测试类:

    package com.idt;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    import java.util.List;
    import java.util.function.Consumer;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import com.idt.mybatis.mapper.TUserMapper;
    import com.idt.mybatis.pojo.TUser;
    import com.idt.mybatis.pojo.TUserExample;
    import com.idt.mybatis.pojo.TUserExample.Criteria;
    
    public class TestExample {
        private static SqlSessionFactory sqlSessionFactory = null;
        private static SqlSession session = null;
        static {
          InputStream in = null;
         try {
            //此处由于我的文件夹名有中文,所以直接写绝对路径
            //如果没有中文,可用TestExample.class.getClassLoader().getResourceAsInputStreat("mybatisConfig.xml");
            in = new FileInputStream(new File("D:\20181112项目\eclipse\eclispeworkspace\mybatisgenerator\bin\mybatisConfig.xml"));
         } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
          sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
          session = sqlSessionFactory.openSession();
        }
        
        public void queryList() {
            TUserMapper tUserMapper = session.getMapper(TUserMapper.class);
            TUserExample example = new TUserExample();
            Criteria criteria = example.createCriteria();
            criteria.andLoginnameEqualTo("张三");
            List<TUser> userList = tUserMapper.selectByExample(example);
            userList.forEach(new Consumer<TUser>() {
                @Override
                public void accept(TUser user) {
                    System.out.println(user.getLoginname());
                }
            });
        }
        public static void main(String[] args) {
            TestExample example = new TestExample();
            example.queryList();
        }
    }

    可以看出通过内部Criteria类可以将where的各种条件查询,根据条件和字段,Criteria会提供很多方法,就需要小伙伴们自己手动去测试验证。   

    五、使用eclipse插件直接生成

      除了手动代码生成,高版本eclipse还提供逆行工程的mybatis generator插件,具体工具使用方法,请移步博客

      https://blog.csdn.net/itltx1024/article/details/80021637

  • 相关阅读:
    vue3.0中如何使用ueditor
    如何在vue+element中实现选择框和穿梭框的根据拼音以及拼音首字母以及汉字的模糊搜索
    select 使其默认选中文本不为空
    java环境配置
    amaze ui 滚动监听
    vue项目中如何使用less
    强大的css3库
    input type file兼容性
    select中想要加a链接 并且新窗口打开
    echarts绘制k线图为什么写candlestick类型就报错
  • 原文地址:https://www.cnblogs.com/zhexuejun/p/11047326.html
Copyright © 2011-2022 走看看