2016/11/06更新:
由於有博友可能須要這份代碼, 因此我就直接發到百度雲上面和你們共享, 若是連接失效請你們留言提示便可.
下載地址: http://pan.baidu.com/s/1i57E8PRhtml
mybaits須要程序員本身編寫sql語句,mybatis官方提供逆向工程 能夠針對單表自動生成mybatis執行所須要的代碼(mapper.java,mapper.xml、pojo等)
有了sql表的結構後, 咱們就能夠利用逆向工程直接生成相應的Dao和JavaBean代碼, 這樣可以大大減小咱們平時開發的工做量.
可是我仍是以爲使用逆向工程侷限性很大, 例如咱們的逆向工程main方法只能執行一次, 若是再次執行就會繼續生成相應的Dao和JavaBean, 除非咱們把以前生成的全都刪除. 這樣對於代碼的擴展性就不是很好, 若是咱們須要對錶結構進行修改, 那麼咱們就必須對生成的Dao和JavaBean進行一個個修改.
下面就直接進入開發階段:
1, 數據庫表結構
2,將逆向工程導入到Eclipse中
3,使用逆向工程
逆向工程目錄結構:
這裏的bean和dao都是使用逆向工程自動生成的兩個包, 咱們只須要將相應的Dao和Javabean拷貝到相應的project下便可.
看下生成Dao和Bean的代碼:
java
1 import java.io.File; 2 import java.util.ArrayList; 3 import java.util.List; 4 5 import org.mybatis.generator.api.MyBatisGenerator; 6 import org.mybatis.generator.config.Configuration; 7 import org.mybatis.generator.config.xml.ConfigurationParser; 8 import org.mybatis.generator.internal.DefaultShellCallback; 9 10 public class GeneratorSqlmap { 11 12 public void generator() throws Exception{ 13 14 List<String> warnings = new ArrayList<String>(); 15 boolean overwrite = true; 16 File configFile = new File("generatorConfig.xml"); 17 ConfigurationParser cp = new ConfigurationParser(warnings); 18 Configuration config = cp.parseConfiguration(configFile); 19 DefaultShellCallback callback = new DefaultShellCallback(overwrite); 20 MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, 21 callback, warnings); 22 myBatisGenerator.generate(null); 23 24 } 25 public static void main(String[] args) throws Exception { 26 try { 27 GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap(); 28 generatorSqlmap.generator(); 29 } catch (Exception e) { 30 e.printStackTrace(); 31 } 32 33 } 34 35 }
下面就是看下generatorConfig.xml中的一些配置:
mysql
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 6 <generatorConfiguration> 7 <context id="testTables" targetRuntime="MyBatis3"> 8 9 <!-- JavaBean 實現 序列化 接口 --> 10 <plugin type="org.mybatis.generator.plugins.SerializablePlugin"> 11 </plugin> 12 <!-- genenat entity時,生成toString --> 13 <plugin type="org.mybatis.generator.plugins.ToStringPlugin" /> 14 <!-- 自定義物理分頁 可生成支持Mysql數據的limit 不支持Oracle --> 15 <plugin type="org.mybatis.generator.plugins.page.PaginationPlugin" /> 16 <!-- 自定義查詢指定字段 --> 17 <plugin type="org.mybatis.generator.plugins.field.FieldsPlugin" /> 18 <!-- 開啓支持內存分頁 可生成 支持內存分佈的方法及參數 19 <plugin type="org.mybatis.generator.plugins.RowBoundsPlugin" /> 20 --> 21 <!-- generate entity時,生成hashcode和equals方法 22 <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin" /> 23 --> 24 <!-- 此處是將Example更名爲Criteria 固然 想改爲什麼都行~ --> 25 <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin"> 26 <property name="searchString" value="Example$" /> 27 <!-- 替換後 28 <property name="replaceString" value="Criteria" /> 29 --> 30 <property name="replaceString" value="Query" /> 31 </plugin> 32 <!-- 此處是將UserMapper.xml更名爲UserDao.xml 固然 想改爲什麼都行~ --> 33 <plugin type="org.mybatis.generator.plugins.rename.RenameSqlMapperPlugin"> 34 <property name="searchString" value="Mapper" /> 35 <property name="replaceString" value="Dao" /> 36 </plugin> 37 38 <!-- 此處是將UserMapper更名爲UserDao 接口 固然 想改爲什麼都行~ --> 39 <plugin type="org.mybatis.generator.plugins.rename.RenameJavaMapperPlugin"> 40 <property name="searchString" value="Mapper$" /> 41 <property name="replaceString" value="Dao" /> 42 </plugin> 43 44 45 46 <commentGenerator type="org.mybatis.generator.plugins.comment.MyCommentGenerator"> 47 <!-- 是否去除自動生成的註釋 true:是 : false:否 48 <property name="suppressAllComments" value="true" /> 49 --> 50 </commentGenerator> 51 52 <!--數據庫鏈接的信息:驅動類、鏈接地址、用戶名、密碼 --> 53 <jdbcConnection driverClass="com.mysql.jdbc.Driver" 54 connectionURL="jdbc:mysql://localhost:3306/babasport" userId="root" 55 password="123456"> 56 </jdbcConnection> 57 <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" 58 connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" 59 userId="yycg" 60 password="yycg"> 61 </jdbcConnection> --> 62 63 <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析爲 Integer,爲 true時把JDBC DECIMAL 和 64 NUMERIC 類型解析爲java.math.BigDecimal --> 65 <javaTypeResolver> 66 <property name="forceBigDecimals" value="false" /> 67 </javaTypeResolver> 68 69 70 <!-- targetProject:生成PO類的位置 --> 71 <javaModelGenerator targetPackage="cn.itcast.core.bean" 72 targetProject=".\src"> 73 <!-- enableSubPackages:是否讓schema做爲包的後綴 --> 74 <property name="enableSubPackages" value="false" /> 75 <!-- 從數據庫返回的值被清理先後的空格 --> 76 <property name="trimStrings" value="true" /> 77 </javaModelGenerator> 78 79 <!-- targetProject:mapper映射文件生成的位置 --> 80 <sqlMapGenerator targetPackage="cn.itcast.core.dao" 81 targetProject=".\src"> 82 <!-- enableSubPackages:是否讓schema做爲包的後綴 --> 83 <property name="enableSubPackages" value="false" /> 84 </sqlMapGenerator> 85 <!-- targetPackage:mapper接口生成的位置 --> 86 <javaClientGenerator type="XMLMAPPER" 87 targetPackage="cn.itcast.core.dao" 88 targetProject=".\src"> 89 <!-- enableSubPackages:是否讓schema做爲包的後綴 --> 90 <property name="enableSubPackages" value="true" /> 91 </javaClientGenerator> 92 93 <!-- 指定數據庫表 --> 94 <!-- 用戶模塊表 --> 95 <table schema="" tableName="bbs_buyer" domainObjectName="user.Buyer"/> 96 97 <!-- 商品模塊表 --> 98 <table schema="" tableName="bbs_product" domainObjectName="product.Product"> 99 <!-- 商品介紹 大字段映射 --> 100 <columnOverride column="description" javaType="String" jdbcType="VARCHAR" /> 101 <!-- 包裝清單 大字段映射 --> 102 <columnOverride column="package_list" javaType="String" jdbcType="VARCHAR" /> 103 <!-- 商品圖片 大字段映射 --> 104 <columnOverride column="img_url" javaType="String" jdbcType="VARCHAR" /> 105 </table> 106 <table schema="" tableName="bbs_brand" domainObjectName="product.Brand"/> 107 <table schema="" tableName="bbs_Color" domainObjectName="product.Color"/> 108 <table schema="" tableName="bbs_sku" domainObjectName="product.Sku"/> 109 110 <!-- 訂單模塊表 --> 111 <table schema="" tableName="bbs_order" domainObjectName="order.Order"> 112 <!-- 支付方式 0:到付 1:在線 2:郵局 3:公司轉賬 --> 113 <columnOverride column="payment_way" javaType="Integer"/> 114 <!-- 貨到付款方式.1現金,2POS刷卡 --> 115 <columnOverride column="payment_cash" javaType="Integer" /> 116 <!-- 送貨時間 --> 117 <columnOverride column="delivery" javaType="Integer"/> 118 <!-- 支付狀態 :0到付1待付款,2已付款,3待退款,4退款成功,5退款失敗 --> 119 <columnOverride column="is_paiy" javaType="Integer"/> 120 <!-- 訂單狀態 0:提交訂單 1:倉庫配貨 2:商品出庫 3:等待收貨 4:完成 5待退貨 6已退貨 --> 121 <columnOverride column="state" javaType="Integer"/> 122 <!-- 訂單狀態 默認Boolean --> 123 <columnOverride column="order_state" javaType="Integer"/> 124 </table> 125 <table schema="" tableName="bbs_detail" domainObjectName="order.Detail"/> 126 127 <!-- 指定數據庫全部表 128 <table schema="" tableName="%"/> 129 --> 130 131 <!-- 有些表的字段須要指定java類型 132 <table schema="" tableName=""> 133 <columnOverride column="" javaType="" /> 134 </table> --> 135 </context> 136 </generatorConfiguration>
主要核心內容就是在這個配置文件中寫入相應的配置, 具體的使用方法和配置註釋中都有說明.
4, 使用逆向工程進行增刪改查操做
程序員
1 package cn.itcast; 2 3 import java.util.Date; 4 import java.util.List; 5 6 import javax.annotation.Resource; 7 8 import org.junit.Test; 9 import org.junit.runner.RunWith; 10 import org.springframework.beans.factory.annotation.Autowired; 11 import org.springframework.test.context.ContextConfiguration; 12 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 13 14 import cn.itcast.core.bean.TestTb; 15 import cn.itcast.core.bean.product.Product; 16 import cn.itcast.core.bean.product.ProductQuery; 17 import cn.itcast.core.dao.TestTbDao; 18 import cn.itcast.core.dao.product.ProductDao; 19 import cn.itcast.core.service.TestTbService; 20 21 @RunWith(SpringJUnit4ClassRunner.class) 22 @ContextConfiguration(locations = {"classpath:application-context.xml"}) 23 public class TestProduct { 24 25 @Resource 26 private ProductDao productDao; 27 28 @Test 29 public void testProduct() throws Exception { 30 31 //Product p = productDao.selectByPrimaryKey(1L); 32 //System.out.println(p); 33 34 //查詢: 按照條件查詢, 支持模糊查詢, 分頁 排序 指定字段查, 查詢總數 35 ProductQuery productQuery = new ProductQuery(); 36 //模糊查詢 37 //productQuery.createCriteria().andNameLike("%" + "顯瘦" + "%"); 38 //設置條件精準查詢 39 //productQuery.createCriteria().andNameEqualTo("2016最新款的締彩楓2015秋冬新款時尚英倫風大衣簡約收腰顯瘦灰色中長款毛呢外套 灰色 S") 40 //.andBrandIdEqualTo(3L); 41 42 //排序 id desc 43 productQuery.setOrderByClause("id desc"); 44 45 //分頁 46 productQuery.setPageNo(1); 47 productQuery.setPageSize(3); 48 49 //根據指定字段查詢 50 productQuery.setFields("id, name"); 51 52 List<Product> products = productDao.selectByExample(productQuery); 53 for (Product product : products) { 54 System.out.println(product); 55 } 56 57 //查詢總條數 58 productDao.countByExample(productQuery); 59 60 //保存 61 //productDao.insertSelective(product); 62 63 //更新 64 //productDao.updateByExampleSelective(record, example); 65 //productDao.updateByPrimaryKeySelective(record); 66 } 67 68 }
測試類就是如上, 若是對於dao中的方法中的參數不是很詳細, 那麼就能夠直接看dao.xml中的sql語句, 這樣就能夠一目瞭然了.
這裏只是作個簡單的總結, 因爲dao和bean全都是自動生成的, 因此裏面的代碼還有必要再去多看兩眼的.spring