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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM