基于前两章给大家讲解了一下 MyBatis 的基础和稍进阶一点的用法,这一篇文章呢,主要是给大家讲一个工具,那就是 MyBatis 可以使用逆向工程快速构建 pojo 类和 Mapper 文件,那么我们一起来了解一下吧!
使用官方网站的 mapper 自动生成工具 mybatis-generator-core-1.3.2 来生成 po 类和 mapper 映射文件。
作用: mybatis 官方提供逆向工程, 可以使用它通过数据库中的表来自动生成 Mapper 接口和映射文件 (单表增删改查) 和 Po 类.
导入的 jar 包有:
在 generatorConfig.xml 中配置 mapper 生成的详细信息,注意改下几点:
1、添加要生成的数据库表
2、po 文件所在包路径
3、mapper 文件所在包路径
配置文件如下:
- <?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/mybatis" userId="root"
- password="admin">
- </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="cn.zy.ssm.po"
- targetProject=".\src">
- <!-- enableSubPackages:是否让schema作为包的后缀 -->
- <
- property
- name
- =
- "enableSubPackages"
- value
- =
- "false"
- />
- <!-- 从数据库返回的值被清理前后的空格 -->
- <
- property
- name
- =
- "trimStrings"
- value
- =
- "true"
- />
- </javaModelGenerator>
- <!-- targetProject:mapper映射文件生成的位置 -->
- <sqlMapGenerator targetPackage="cn.zy.ssm.mapper"
- targetProject=".\src">
- <!-- enableSubPackages:是否让schema作为包的后缀 -->
- <
- property
- name
- =
- "enableSubPackages"
- value
- =
- "false"
- />
- </sqlMapGenerator>
- <!-- targetPackage:mapper接口生成的位置 -->
- <javaClientGenerator type="XMLMAPPER"
- targetPackage="cn.zy.ssm.mapper"
- targetProject=".\src">
- <!-- enableSubPackages:是否让schema作为包的后缀 -->
- <
- property
- name
- =
- "enableSubPackages"
- value
- =
- "false"
- />
- </javaClientGenerator>
- <!-- 指定数据库表 -->
- <table tableName="items"></table>
- <table tableName="orders"></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>
- 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();
- }
- }
Mapper.xml 的文件拷贝至 mapper 目录内
Mapper.java 的文件拷贝至 mapper 目录内
注意:mapper xml 文件和 mapper.java 文件在一个目录内且文件名相同。
学会使用 mapper 自动生成的增、删、改、查方法。
- //删除符合条件的记录
- 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);
XXXMapper.xml 文件已经存在时,如果进行重新生成则 mapper.xml 文件内容不被覆盖而是进行内容追加,结果导致 mybatis 解析失败。
解决方法:删除原来已经生成的 mapper xml 文件再进行生成。
Mybatis 自动生成的 po 及 mapper.java 文件不是内容而是直接覆盖没有此问题。
下边是关于针对 oracle 数据库表生成代码的 schema 问题:
Schma 即数据库模式,oracle 中一个用户对应一个 schema,可以理解为用户就是 schema。
当 Oralce 数据库存在多个 schema 可以访问相同的表名时,使用 mybatis 生成该表的 mapper.xml 将会出现 mapper.xml 内容重复的问题,结果导致 mybatis 解析错误。
解决方法:在 table 中填写 schema,如下:
XXXX 即为一个 schema 的名称,生成后将 mapper.xml 的 schema 前缀批量去掉,如果不去掉当 oracle 用户变更了 sql 语句将查询失败。
快捷操作方式:mapper.xml 文件中批量替换:"from XXXX." 为空
Oracle 查询对象的 schema 可从 dba_objects 中查询,如下:
select * from dba_objects
写到最后,我们已经讲完了关于 MyBatis 的逆向工程的使用了,当然,这只能操作单张表结构,如果需要使用到多表查询,显然当中提供的方法和配置是不够用的,还要求我们自己会在 Mapper.java 和 Mapper.xml 文件中进行自己配置,感谢大家,如果有什么问题,欢迎留言,有错误的地方,欢迎大家指出并改正,谢谢~ 么么哒~
来源: http://blog.csdn.net/woshizisezise/article/details/78807660