一.mybatis逆向工程简介
MyBatis Generator(MBG)是MyBatis和iBATIS的代码生成器。它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码。它将内省数据库表(或许多表),并将生成可用于访问表的工件。这减少了设置对象和配置文件以与数据库表交互的初始麻烦。MBG寻求对简单CRUD(创建,检索,更新,删除)的大部分数据库操作产生重大影响。您仍然需要为连接查询或存储过程手动编写SQL和对象代码。
二、使用步骤
1.导入jar包
generator包下载地址:https://github.com/mybatis/generator/releases
2.新建配置文件
在src目录下新建generator.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">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/demo" userId="root"
password="12345">
</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:生成实体类的位置 -->
<javaModelGenerator targetPackage="com.shop.domain"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.shop.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.shop.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<!-- <table tableName="items"></table> -->
<table tableName="order"></table>
<!-- <table tableName="orderdetail"></table> -->
<table tableName="user"></table>
<!-- <table schema="" tableName="sys_user"></table>
<table schema="" tableName="sys_role"></table>
<table schema="" tableName="sys_permission"></table>
<table schema="" tableName="sys_user_role"></table>
<table schema="" tableName="sys_role_permission"></table> -->
<!-- 有些表的字段需要指定java类型
<table schema="" tableName="">
<columnOverride column="" javaType="" />
</table> -->
</context>
</generatorConfiguration>
3.编写测试代码
在src目录下建立test包和test文件
编写测试用例:
package org.yqzc.test;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
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.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
public class GeneratorTest {
public static void main(String[] args) throws InvalidConfigurationException, SQLException, IOException, InterruptedException, XMLParserException {
//指定逆向工程文件位置
File file=new File("src/generator.xml");
//定义警告内容字符串
List<String> warnings=new ArrayList<>();
//打印提示内容
ConfigurationParser cp=new ConfigurationParser(warnings);
//配置文件格式
Configuration config=cp.parseConfiguration(file);
//翻译目录结构
DefaultShellCallback callback=new DefaultShellCallback(true);
//建立逆向生成对象,生成代码文件
MyBatisGenerator generator=new MyBatisGenerator(config,callback,warnings);
generator.generate(null);
}
}
运行之后会生成使用类java、数据接口dao、数据存储对象mapper
example类是教你如何使用的,可以删除掉,在接口层也有几行相关exp代码,也删掉
4 项目中使用逆向工程代码
增删改查的方法,根据生成类更改类的声明
//删除符合条件的记录
int deleteByExample(UserExample example);
//根据主键删除
int deleteByPrimaryKey(String id);
//插入对象所有字段
int insert(User record);
//插入对象不为空的字段
int insertSelective(User record);
//自定义查询条件查询结果集
List<User> selectByExample(UserExample example);
//根据主键查询
UserselectByPrimaryKey(String id);
//根据主键将对象中不为空的值更新至数据库
int updateByPrimaryKeySelective(User record);
//根据主键将对象中所有字段的值更新至数据库
int updateByPrimaryKey(User record);
对数据库的完整操作方法
public class Demo1 {
@Test
public void fun1() throws IOException {
// 读取mybatis的核心配置文件
String configXml = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(configXml);
// 创建sqlSessionFactory
SqlSessionFactory sqlSession = new SqlSessionFactoryBuilder().build(inputStream);
// 使用sqlSessionFactory 创建sqlSession
SqlSession session = sqlSession.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = userMapper.selectByPrimaryKey(1);
System.out.println(user);
}
@Test
public void fun2() throws IOException {
// 读取mybatis的核心配置文件
String configXml = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(configXml);
// 创建sqlSessionFactory
SqlSessionFactory sqlSession = new SqlSessionFactoryBuilder().build(inputStream);
// 使用sqlSessionFactory 创建sqlSession
SqlSession session = sqlSession.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameLike("%陈%");
criteria.andSexEqualTo("1");
List<User> list = userMapper.selectByExample(example);
for (User user : list) {
System.out.println(user);
}
}
}
总结
本文仅仅简单介绍了Generator的使用,Generator.xml提供了使我们快速便捷地创建mybatis数据操作相关代码,减少繁琐的创建生成。