Mybatis逆向工程构建项目实例
Posted java版web项目
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis逆向工程构建项目实例相关的知识,希望对你有一定的参考价值。
作者:一枝花算不算浪漫
来源:https://www.cnblogs.com/wang-meng/
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下即可。
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 GeneratorSqlmap {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
下面就是看下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 @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全都是自动生成的, 所以里面的代码还有必要再去多看两眼的.
推荐作品
●
●
●
●
●
●
●
●
●
●
以上是关于Mybatis逆向工程构建项目实例的主要内容,如果未能解决你的问题,请参考以下文章
springboot+thymeleaf+mybatis逆向工程和pageHelper
Spring+Mybatis+SpringMVC后台与前台分页展示实例(附工程)(转)
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段
13.1 MyBatis Generator概述(MyBatis Generator逆向代码生成工具) -《SSM深入解析与项目实战》