Mybatis逆向工程構建項目實例.

Mybatis逆向工程構建項目實例.

 

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

相關文章
相關標籤/搜索