Mybatis的逆向工程可以在设计好数据库表的基础上,通过java程序,生成pojo、mapper、和mapper.xml
生成了mapper.xml可满足大部门的增删改查的接口和方法。
在Service中可直接掉用mapper.java中的方法操作数据库。
步骤:
1. 在eclipse中new一个普通的project.
2. 导包
3. 数据库表
CREATE TABLE `items` (
`items_id` int(11) NOT NULL AUTO_INCREMENT,
`items_name` varchar(32) NOT NULL COMMENT '商品名称',
`items_price` float(10,1) NOT NULL COMMENT '商品定价',
`items_detail` text COMMENT '商品描述',
`items_pic` varchar(64) DEFAULT NULL COMMENT '商品图片',
`items_createtime` datetime NOT NULL COMMENT '生产日期',
PRIMARY KEY (`items_id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf84. 编写generatorConfig.xml,打开官方下载的docs文件夹,打开index.html,里面有详细的介绍和生成方法
在这里使用xml和java程序的方式。参照Running MyBatis和XML Configuration File Reference就可以完成这个Java程序。
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="caigouTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root"
password="123456">
</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.plin.ssm.po"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetPackage:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.plin.ssm.mapper"
targetProject=".\src">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口的生成位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.plin.ssm.mapper"
targetProject=".\src">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定表 -->
<!-- 商品表 -->
<table schema="mybatis" tableName="items" />
</context>
</generatorConfiguration>主要是三个地方:(其他地方不用管)
数据库连接信息;
生成的pojo包名和生产的mapper包名
要生成的数据库名称和表名
5. 新建一个class(GeneratorSqlmap.class), 包含Main方法。里面的代码也是官方文档Ctrl+c过来。主要修改配置的src/generatorConfig.xml的位置和名字。
GeneratorSqlmap.class
package com.plin.mybatis_generator_main;
import java.io.File;
import java.io.IOException;
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.exception.XMLParserException;
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("src/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();
}
}
}6. 运行这个程序。自动生成包、pojo、mapper.java、mapper.xml。
7. 使用生成的包和测试
将mapper包和po包直接拷贝到需要工程的src下。注意拷贝后查看Mapper的Namespace,要与原来的Spring配置文件一致,否则会出现mapper的namespace错误,期望的namespace和实际的namespace不一致,因为namespace是根据包名和类名来生成的。建议在生成的java程序中,就将包名设置为项目实际的包名。
关于Maven和spring,MyBatis整合参考我另一篇文章:Spring Boot和Maven 整合Mybatis项目
测试一个程序:
@Test
public void testSelectByExample() {
ItemsExample itemsExample = new ItemsExample();
Criteria criteria = itemsExample.createCriteria();
criteria.andItemsNameEqualTo("水杯");
criteria.andItemsIdEqualTo(3);
List<Items> list= (List<Items>) itemsMapper.selectByExample(itemsExample);
System.out.println(list);
}运行结果