Mybatis逆向工程构建项目实例.

来源:互联网 发布:淘宝上的喵喵通讯 编辑:程序博客网 时间:2024/06/01 08:25
2016/11/06更新: 
因为有博友可能需要这份代码, 所以我就直接发到百度云上面和大家共享, 如果链接失效请大家留言提示即可.
下载地址: http://pan.baidu.com/s/1i57E8PR

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的代码:

 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中的一些配置:

  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     @Resource26     private ProductDao productDao;27     28     @Test29     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 desc43         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全都是自动生成的, 所以里面的代码还有必要再去多看两眼的.

 

 

0 0
原创粉丝点击