MyBaits Generator
MyBatis Generator
MyBatis Generator是官方提供的逆向工程,通过xml配置文件和java程序,能够用于根据数据库表结构自动生成mapper.xml,mapper.java以及pojo类
生成的mapper具备单表的增删改查功能
缺陷:只能进行单表操作
使用前需要先导入依赖
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
</dependency>
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="mysqlTable" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释-->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库配置-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?useSSL=false"
userId="root"
password="zm19980225">
</jdbcConnection>
<!-- 数据库类型与java类型转换
当属性为false或未指定时,默认Java类型解析器将尝试通过替换Integral类型(如果可能)来使JDBC DECIMAL和NUMERIC类型更易于使用。
替代规则如下:
如果比例大于零,或者长度大于18,则将使用java.math.BigDecimal类型
如果比例为零,并且长度为10到18,那么Java类型解析器将替换java.lang.Long。
如果比例为零,并且长度为5到9,那么Java类型解析器将替换java.lang.Integer。
如果比例为零,并且长度小于5,那么Java类型解析器将替换java.lang.Short。-->
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成Model类存放位置 -->
<javaModelGenerator targetPackage="com.xm.pojo" targetProject="src">
<!-- 是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="true" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="false" />
</javaModelGenerator>
<!-- 生成映射文件存放位置 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src">
<!-- 是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 生成Dao类存放位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.xm.dao" targetProject="src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 生成对应表及类名 -->
<!-- 指定是否需要生成xxxbyExample的mapper -->
<table schema="" tableName="authors" enableCountByExample="false" enableDeleteByExample="false"/>
<table schema="" tableName="blogs" />
<table schema="" tableName="comments"/>
<table schema="" tableName="posts"/>
<table schema="" tableName="tags"/>
</context>
</generatorConfiguration>
运行MBG生成实体类,mapper和映射文件
此处使用的mysql-connector-java包因该为6.0以下版本,否则生成的mapper中只会含有xxxByExample方法
运行后会生成mapper等文件,将他们复制到项目中即可
如果mapper.xml文件已经存在,重新生成后的xml文件内容将在原有基础上进行追加,将会导致内容重复,mybatis解析失败
使用java程序
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);
使用maven插件配置
使用maven时,generator的配置文件必须命名为generatorConfig.xml同时必须添加mysql驱动包依赖
- 首先在maven配置文件中导入插并指定插件依赖
安装插件
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
</dependency>
指定插件依赖
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
之后在maven中执行generate即可
使用
使用前需要在mybatis配置文件的mappers节点中配置mapper
基本使用
基本使用方式同普通mybatis一样
@Test
public void testDeleteByPrimaryKey(){
SqlSession session = MyBatisUtil.sqlSession();
BlogsMapper mapper = session.getMapper(BlogsMapper.class);
int num = mapper.deleteByPrimaryKey(9);
session.commit();
session.close();
System.out.println(num);
}
Example类的使用
@Test
public void testExampleClass(){
SqlSession session = MyBatisUtil.sqlSession();
BlogsMapper mapper = session.getMapper(BlogsMapper.class);
BlogsExample example = new BlogsExample();
BlogsExample.Criteria criteria = example.createCriteria();
List<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
criteria.andIdIn(list);
List<Blogs> blogs = mapper.selectByExample(example);
for (Blogs blog : blogs) {
System.out.println(blog);
}
}