前言
mybatis逆向工程可以很方便的帮我们创建好常用的单表操作,对于更加复杂的业务流程,请自己添加相应的接口即可。
引用并生成
引用
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
配置文件
generatorConfig.xml
<?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>
<context id="testTables" targetRuntime="MyBatis3">
<!-- JavaBean 实现 序列化 接口 -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin">
</plugin>
<!-- genenat entity时,生成toString -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!-- 自定义查询指定字段 -->
<plugin type="org.mybatis.generator.plugins.field.FieldsPlugin"/>
<!-- 开启支持内存分页 可生成 支持内存分布的方法及参数
<plugin type="org.mybatis.generator.plugins.RowBoundsPlugin" />
-->
<!-- generate entity时,生成hashcode和equals方法-->
<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>
<!-- 此处是将Example改名为Criteria 当然 想改成什么都行~ -->
<plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
<property name="searchString" value="Example$"/>
<!-- 替换后
<property name="replaceString" value="Criteria" />
-->
<property name="replaceString" value="Query"/>
</plugin>
<!-- 此处是将UserMapper.xml改名为UserDao.xml 当然 想改成什么都行~ -->
<plugin type="org.mybatis.generator.plugins.rename.RenameSqlMapperPlugin">
<property name="searchString" value="Mapper"/>
<property name="replaceString" value="Dao"/>
</plugin>
<!-- 此处是将UserMapper改名为UserDao 接口 当然 想改成什么都行~ -->
<plugin type="org.mybatis.generator.plugins.rename.RenameJavaMapperPlugin">
<property name="searchString" value="Mapper$"/>
<property name="replaceString" value="Dao"/>
</plugin>
<commentGenerator type="org.mybatis.generator.plugins.comment.MyCommentGenerator">
<!-- 是否去除自动生成的注释 true:是 : false:否
<property name="suppressAllComments" value="true" />
-->
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/pyg" userId="root"
password="root">
</jdbcConnection>
<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
userId="yycg"
password="yycg">
</jdbcConnection> -->
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.alvin.pojo"
targetProject=".src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.alvin.dao"
targetProject=".
esources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.alvin.dao"
targetProject=".src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 指定数据库表 -->
<table schema="" tableName="tb_order" domainObjectName="order.Order"/>
<table schema="" tableName="tb_order_item" domainObjectName="order.OrderItem"/>
<table schema="" tableName="tb_address" domainObjectName="address.Address"/>
<table schema="" tableName="tb_areas" domainObjectName="address.Areas"/>
<table schema="" tableName="tb_cities" domainObjectName="address.Cities"/>
<table schema="" tableName="tb_provinces" domainObjectName="address.Provinces"/>
<table schema="" tableName="tb_content" domainObjectName="ad.Content"/>
<table schema="" tableName="tb_content_category" domainObjectName="ad.ContentCategory"/>
<table schema="" tableName="tb_pay_log" domainObjectName="log.PayLog"/>
<table schema="" tableName="tb_seller" domainObjectName="seller.Seller"/>
<table schema="" tableName="tb_user" domainObjectName="user.User"/>
<table schema="" tableName="tb_brand" domainObjectName="good.Brand"/>
<table schema="" tableName="tb_goods" domainObjectName="good.Goods"/>
<table schema="" tableName="tb_goods_desc" domainObjectName="good.GoodsDesc"/>
<table schema="" tableName="tb_specification" domainObjectName="specification.Specification"/>
<table schema="" tableName="tb_specification_option" domainObjectName="specification.SpecificationOption"/>
<table schema="" tableName="tb_type_template" domainObjectName="template.TypeTemplate"/>
<table schema="" tableName="tb_freight_template" domainObjectName="template.FreightTemplate"/>
<table schema="" tableName="tb_item_cat" domainObjectName="item.ItemCat"/>
<table schema="" tableName="tb_item" domainObjectName="item.Item"/>
<table schema="" tableName="tb_seckill_goods" domainObjectName="seckill.SeckillGoods"/>
<table schema="" tableName="tb_seckill_order" domainObjectName="seckill.SeckillOrder"/>
</context>
</generatorConfiguration>
- javaModelGenerator,生成PO类的位置
- sqlMapGenerator,mapper映射文件生成的位置
- javaClientGenerator,mapper接口生成的位置
- table,指定数据库表
日志配置
log4j.properties
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
生成
GeneratorSqlmap.java
public class GeneratorSqlmap {
public void generator() throws Exception{
List<String> warnings = new ArrayList<>();
boolean overwrite = true;
File configFile = new File("generatorConfig.xml");
System.out.println(configFile.getAbsolutePath());
System.out.println(System.getProperty("user.dir"));
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();
}
}
}
使用
select
// 查询所有
List<Brand> brandList = brandDao.selectByExample(null);
// 根据id查询
Brand brand = brandDao.selectByPrimaryKey(id);
// 根据条件拼接查询
//判断mybatis查询对象
BrandQuery query = new BrandQuery();
//拼接sql语句的查询列名
//query.setFields("name, first_char");
//设置是否sql语句去除重复数据, 不设置默认是false, 不去重
//query.setDistinct(true);
//设置排序
//query.setOrderByClause("name asc");
//创建sql语句中的where条件对象
BrandQuery.Criteria criteria = query.createCriteria();
//判断条件对象是否为空
if (brand != null) {
//判断名称不为空
if (brand.getName() != null && !"".equals(brand.getName())) {
criteria.andNameLike("%"+brand.getName()+"%");
}
//判断首字母不为空
if(brand.getFirstChar() != null && !"".equals(brand.getFirstChar())){
criteria.andFirstCharEqualTo(brand.getFirstChar());
}
}
brandDao.selectByExample(query);
insert
itemsMapper.insert(items);
update
//根据主键进行修改, 并且如果传入的参数中有为null的不参与拼接sql语句修改
brandDao.updateByPrimaryKeySelective(brand);
//根据主键修改, 不管传入对象中的属性是否为null, 都会进行拼接sql语句, 进行修改
//brandDao.updateByPrimaryKey();
//传入两个参数, 第一个参数: 就是要修改的对象, 第二个参数:是修改条件, 这个条件是非主键条件, 例如根据名称修改等
//brandDao.updateByExample(, );
//第一个参数是修改对象, 第二个参数:非主键条件, 这个方法修改的时候对于传入的修改对象也会判断是否为null, 进行拼接
//brandDao.updateByExampleSelective(, )
delete
brandDao.deleteByPrimaryKey(id);