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.jarjava
建立簡單的java項目,引入jar包以下,在src目錄下建立generatorConfig.xml,xml文件名字自定義,xml文件中須要配置:mysql
(1)數據庫鏈接sql
(2)使用的表名數據庫
(3)生成mapper接口、pojo類及 mapper.xml文件的包名apache
(4)字段類型進行對應配置api
完整的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刷新項目,即可以到生成代碼,拷貝到須要的工程下面便可。session
最終項目結構如圖:mybatis
PS: 在測試工程類的時候,發現控制檯打印了oracle
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便可,
4、測試
查看生成的代碼文件,咱們會發現與咱們之前自定義使用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還提供逆行工程的mybatis generator插件,具體工具使用方法,請移步博客
https://blog.csdn.net/itltx1024/article/details/80021637