原文地址:http://www.yiidian.com/mybatis/mybatis-generator.htmlhtml
官網:http://mybatis.org/generator/java
MyBatis的開發須要程序員本身編寫sql語句,MyBatis官方提供逆向工程,能夠針對單表自動生成MyBatis執行所須要的代碼(Dao接口、Mapper.xml、Pojo等元素),可讓程序員將更多的精力放在繁雜的業務邏輯上。mysql
之因此強調單表兩個字,是由於Mybatis逆向工程生成的Mapper所進行的操做都是針對單表的,也許你可能會以爲那這就有點雞肋了,可是在大型項目中,不多有複雜的多表關聯查詢,因此做用仍是很大的。程序員
<dependencies> <!--mysql驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <!-- mybatis依賴--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency> </dependencies>
在resources創建jdbc.properties,內容以下:sql
jdbc.path=D:\\reponsitory_boot\\mysql\\mysql-connector-java\\5.1.46\\mysql-connector-java-5.1.46.jar jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=root
注意:jdbc.path是mysql驅動包的路徑,待會MyBatis逆向工程配置用到數據庫
在resources配置mybatis-generator-config.xml(名稱是默認的,不要修改),內容以下:api
<?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> <!--導入屬性配置--> <properties resource="jdbc.properties"></properties> <!--指定特定數據庫的jdbc驅動jar包的位置--> <classPathEntry location="${jdbc.path}"/> <context id="context" targetRuntime="MyBatis3"> <!-- 是否去除自動生成的註釋 true:是 : false:否 --> <commentGenerator> <property name="suppressAllComments" value="true"/> <property name="suppressDate" value="true"/> </commentGenerator> <!--數據庫鏈接的信息:驅動類、鏈接地址、用戶名、密碼 --> <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/> <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析爲 Integer,爲 true時把JDBC DECIMAL 和 NUMERIC 類型解析爲java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!--指定包名生成實體類 以及生成的地址 (能夠自定義地址,若是路徑不存在會自動建立) --> <javaModelGenerator targetPackage="com.yiidian.domain" targetProject="D:\idea_workspace\yiidian\mybatis\ch02_06_mybatis_generator\src\main\java"> <!-- enableSubPackages:是否讓schema做爲包的後綴 --> <property name="enableSubPackages" value="false"/> <!-- 從數據庫返回的值被清理先後的空格 --> <property name="trimStrings" value="true"/> </javaModelGenerator> <!--Mapper映射文件生成所在的目錄 爲每個數據庫的表生成對應的mapper文件 --> <sqlMapGenerator targetPackage="com.yiidian.dao" targetProject="D:\idea_workspace\yiidian\mybatis\ch02_06_mybatis_generator\src\main\resources"> <!-- enableSubPackages:是否讓schema做爲包的後綴 --> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- 客戶端代碼,生成易於使用的針對Model對象和XML配置文件 的代碼 type="ANNOTATEDMAPPER",生成Java Model 和基於註解的Mapper對象 type="MIXEDMAPPER",生成基於註解的Java Model 和相應的Mapper對象 type="XMLMAPPER",生成SQLMap XML文件和獨立的Mapper接口 --> <javaClientGenerator targetPackage="com.yiidian.dao" targetProject="D:\idea_workspace\yiidian\mybatis\ch02_06_mybatis_generator\src\main\java" type="XMLMAPPER"> <!-- enableSubPackages:是否讓schema做爲包的後綴 --> <property name="enableSubPackages" value="false"/> </javaClientGenerator> <!-- 指定數據庫表 --> <table schema="mybatis" tableName="t_customer" domainObjectName="Customer" mapperName="CustomerDao" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="true" enableUpdateByExample="false"/> </context> </generatorConfiguration>
在test目錄創建執行類,用於讀取逆向工程配置,生成代碼mybatis
package com.yiidian.mybatis; 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.InputStream; import java.util.ArrayList; import java.util.List; /** * myBatis逆向工程 * 一點教程網 - www.yiidian.com */ public class MyBatisGeneratorTest { public void generator() throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; //指定 逆向工程配置文件 InputStream in = MyBatisGeneratorTest.class.getClassLoader().getResourceAsStream("mybatis-generator-config.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(in); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); in.close(); } public static void main(String[] args) throws Exception { try { MyBatisGeneratorTest generatorSqlmap = new MyBatisGeneratorTest(); generatorSqlmap.generator(); } catch (Exception e) { e.printStackTrace(); } } }
package com.yiidian.dao; import com.yiidian.domain.Customer; import com.yiidian.domain.CustomerExample; import java.util.List; /** * 一點教程網 - www.yiidian.com */ public interface CustomerDao { int deleteByPrimaryKey(Integer id); int insert(Customer record); int insertSelective(Customer record); List<Customer> selectByExample(CustomerExample example); Customer selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(Customer record); int updateByPrimaryKey(Customer record); }
1)測試方法app
/** * 測試insert方法 * 一點教程網 - www.yiidian.com */ @Test public void testInsert(){ SqlSession sqlSession = MyBatisUtils.getSession(); CustomerDao customerDao = sqlSession.getMapper(CustomerDao.class); Customer cust = new Customer(); cust.setName("小明"); customerDao.insert(cust); sqlSession.commit(); sqlSession.close(); }
2)執行效果dom
能夠看到,insert方法會所有字段都插入數據,若是該屬性沒有賦值,則插入NULL。
1)測試方法
/** * 測試insertSelective方法 * 一點教程網 - www.yiidian.com */ @Test public void testInsertSelective(){ SqlSession sqlSession = MyBatisUtils.getSession(); CustomerDao customerDao = sqlSession.getMapper(CustomerDao.class); Customer cust = new Customer(); cust.setName("小明"); customerDao.insertSelective(cust); sqlSession.commit(); sqlSession.close(); }
2)執行效果
相對insert方法,insertSelective方法更加靈活些。它能根據屬性賦值狀況來判斷是否插入該字段,這種動態插入方式在項目中更推薦使用。
1)測試方法
/** * 測試UpdateByPrimaryKey方法 * 一點教程網 - www.yiidian.com */ @Test public void testUpdateByPrimaryKey(){ SqlSession sqlSession = MyBatisUtils.getSession(); CustomerDao customerDao = sqlSession.getMapper(CustomerDao.class); Customer cust = new Customer(); cust.setId(3); cust.setName("小明"); customerDao.updateByPrimaryKey(cust); sqlSession.commit(); sqlSession.close(); }
2)執行效果
update方法和insert相似,無論該屬性有沒有賦值,有會更新該字段,叫全字段更新。
1)測試方法
/** * 測試updateByPrimaryKeySelective方法 * 一點教程網 - www.yiidian.com */ @Test public void testUpdateByPrimaryKeySelective(){ SqlSession sqlSession = MyBatisUtils.getSession(); CustomerDao customerDao = sqlSession.getMapper(CustomerDao.class); Customer cust = new Customer(); cust.setId(3); cust.setName("小明"); customerDao.updateByPrimaryKeySelective(cust); sqlSession.commit(); sqlSession.close(); }
2)執行效果
能夠看到,updateByPrimaryKeySelective方法和insertSeletive方法相似,是一種動態更新效果。
/** * 測試SelectByExample方法 * 一點教程網 - www.yiidian.com */ @Test public void testSelectByExample(){ SqlSession sqlSession = MyBatisUtils.getSession(); CustomerDao customerDao = sqlSession.getMapper(CustomerDao.class); //1.建立Example對象,Example是MyBatis逆向工程生成的封裝了全部查詢條件的對象 CustomerExample customerExample = new CustomerExample(); //2.添加查詢條件 CustomerExample.Criteria criteria = customerExample.createCriteria(); //需求:根據name模糊查詢 //criteria.andNameLike("%小%"); //需求:根據gender查詢 //criteria.andGenderEqualTo("女"); List<Customer> list = customerDao.selectByExample(customerExample); System.out.println(list); sqlSession.close(); }
Criteria對象能夠設置條件很是多,根據表的結構的不一樣會有不一樣的可限制條件:
源碼下載:https://pan.baidu.com/s/1PIhaTRc1qAj-BsLON4qj6w
歡迎關注個人公衆號::一點教程。得到獨家整理的學習資源和平常乾貨推送。 若是您對個人系列教程感興趣,也能夠關注個人網站:yiidian.com