mybatis学习笔记(五):mybatis 逆向工程

在日常开发中,如果数据库中存在多张表,自己手动创建 多个pojo 类和编写 SQL 语法配置文件,未免太过繁琐,mybatis 也提供了一键式生成这些文件的操作,我们称为 mybatis 逆向工程。一般我们在开发中采用由数据库的表生成java代码。

mybatis 逆向工程的下载

贴上官网链接:Mybatis Generator

当然对于 jar 包的下载,我们可以直接使用 maven 导入:

<dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.7</version>
</dependency>

运行逆向工程

Mybatis Generator 提供了好几种方式来运行逆向工程:

可以通过 maven 工程,java 程序,eclipse 插件等方式运行,为了后续开发的兼容性问题,在这里我们采用 java 程序通过 xml 方式配置,不用依赖于开发工具。

mybatis 逆向工程实例

在这里我们通过一个具体的例子来演示 mybatis 逆向工程的操作过程。

  • 创建一个新的maven工程:mybatis-generator。配置 pom.xml 文件,导入 相关的 jar 包:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.itcast</groupId><artifactId>mybatis-generator</artifactId><version>1.0-SNAPSHOT</version><dependencies><!-- mysql 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.12</version></dependency><!-- mybatis 核心jar包 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency><!-- mybatis 附加功能包,如日志功能等 --><dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId><version>1.9.6</version></dependency><dependency><groupId>org.apache.ant</groupId><artifactId>ant-launcher</artifactId><version>1.9.6</version></dependency><dependency><groupId>org.ow2.asm</groupId><artifactId>asm</artifactId><version>5.2</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.2.5</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.22.0-GA</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.3</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.3</version></dependency><dependency><groupId>ognl</groupId><artifactId>ognl</artifactId><version>3.1.16</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version><scope>test</scope></dependency><!-- mybatis-generator --><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.7</version></dependency></dependencies>
</project>
  • 在 resources 下创建生成代码配置文件 generatorConfig.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//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:///sampledb"userId="root"password=""></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.itcast.ssm.po"targetProject="src/main/java"><!-- enableSubPackages:是否让schema作为包的后缀 --><property name="enableSubPackages" value="false" /><!-- 从数据库返回的值被清理前后的空格 --><property name="trimStrings" value="true" /></javaModelGenerator><!-- targetProject:mapper映射文件生成的位置 --><sqlMapGenerator targetPackage="cn.itcast.ssm.mapper"targetProject="src/main/java"><!-- enableSubPackages:是否让schema作为包的后缀 --><property name="enableSubPackages" value="false" /></sqlMapGenerator><!-- targetPackage:mapper接口生成的位置 --><javaClientGenerator type="XMLMAPPER"targetPackage="cn.itcast.ssm.mapper"targetProject="src/main/java"><!-- enableSubPackages:是否让schema作为包的后缀 --><property name="enableSubPackages" value="false" /></javaClientGenerator><!-- 指定数据库表 --><table tableName="items"></table><table tableName="orders"></table><table tableName="orderdetail"></table><table tableName="user"></table><!-- 有些表的字段需要指定java类型<table schema="" tableName=""><columnOverride column="" javaType="" /></table> --></context>
</generatorConfiguration>

我们指定需要的文件路径:

javaModelGenerator:生成PO类的位置。

sqlMapGenerator:mapper映射文件生成的位置。

javaClientGenerator:mapper接口生成的位置。

table:指定数据库表。

重要:

需要注意的是这里关于 MySQL 数据库配置这方面,如果按上面的配置文件的话会报如下错误:

Loading class com.mysql.jdbc.Drive. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

其实就是因为我们导入的 mysql-connector包使用了新的驱动,上述的com.mysql.jdbc.Driver已经废弃,建议我们使用 com.mysql.cj.jdbc.Driver,并且还应在连接的URL中需要增加时区信息。另外我们还需要通过设置useSSL=false来显式禁用SSL连接,不然也会报关于 SSL 连接的错误。

改为如下:

<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql:///sampledb?serverTimezone=GMT&amp;useSSL=false"userId="root"password="">
</jdbcConnection>
  • 创建生成程序 GeneratorSqlmap.java ,执行生成程序,生成 mybatis 逆向工程:
package cn.itcast.ssm.generator;import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;import java.io.File;
import java.util.ArrayList;
import java.util.List;public class GeneratorSqlmap {public void generator() throws Exception {List<String> warnings = new ArrayList<String>();boolean overwrite = true;//指定逆向工程配置文件File configFile = new File("/Users/weixuqin/IdeaProjects/mybatis-generator/src/main/resources/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();}}}
  • 生成后的目录如图所示:

注:

这里我遇到了一个问题,自己有编写日志文件,但是不知道为什么总是无法加载日志信息,报如下信息,查阅相关资料后也没能解决这个问题,以后有时间自己会解决这个问题。

应用 mybatis 逆向工程文件

我们可以复制粘贴逆向工程中的项目到自己另外的项目中使用,不推荐在原有项目中使用 mybatis generator 生成,因为很容易发生命名冲突覆盖的问题。

这里我们将 ItemsMapper.java, ItemsMapper.xml, Items.java, ItemsExample.java 复制粘贴到我们原有项目中,编写测试文件 ItemsMapperTest.java ,查询数据库中 "笔记本" 的记录:

package cn.itcast.ssm.test;import cn.itcast.ssm.mapper.ItemsMapper;
import cn.itcast.ssm.po.Items;
import cn.itcast.ssm.po.ItemsExample;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.List;public class ItemsMapperTest {private ApplicationContext applicationContext;private ItemsMapper itemsMapper;//在 setUp这个方法得到 spring 容器@Beforepublic void setUp() throws Exception{applicationContext = new ClassPathXmlApplicationContext("classpath:config/spring/applicationContext.xml");itemsMapper = (ItemsMapper) applicationContext.getBean("itemsMapper");}@Testpublic void testSelectByExample(){ItemsExample itemsExample = new ItemsExample();//通过criteria 构造查询条件ItemsExample.Criteria criteria = itemsExample.createCriteria();criteria.andNameEqualTo("笔记本");//可能返回多条记录List<Items> list = itemsMapper.selectByExample(itemsExample);System.out.println(list);}
}

输出结果如下:

这里我刚开始运行的时候始终找不到 selectByExample() 这个方法,其实是因为找不到我的 mapper.xml 映射文件,困惑了好久,发现 mapper.xml 并没有发布到目标文件中,(idea下,eclipse 下并没有这个问题,接口类和映射文件放在同一目录下是允许的)。

所以我们应该将映射文件放在 resourcs 目录下,再在 mybatis 全局配置文件中加载映射文件,再次执行上述测试文件,便不会找不到我们的映射文件了。

<!-- 加载映射文件 --><mappers><!-- 通过 resource 方法一次加载一个映射文件 --><mapper resource="config/sqlmap/ItemsMapper.xml"/></mappers>

转载于:https://www.cnblogs.com/weixuqin/p/9543454.html

mybatis学习笔记(五):mybatis 逆向工程相关推荐

  1. Mybatis学习笔记(一) —— mybatis介绍

    一.Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...

  2. 【最全Mybatis学习笔记(导入mybatis相关jar包)】

    目录 1. 什么是Mybatis 2. 如何引入Mybatis? 3.编写Mybatis工具类 4. 万能Map 5. 模糊查询怎么写? 6. 作用域(Scope)和生命周期SqlSessionFac ...

  3. mybatis 学习笔记:mybatis 初认识

    简介 MyBatis是一个Java持久层框架,它通过XML描述符或注解把对象与存储过程或SQL语句关联起来.mybatis 可以将 preparedStatement 中的输入参数自动进行映射,将查询 ...

  4. MyBatis学习笔记(一)——MyBatis快速入门

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4261895.html 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优 ...

  5. MyBatis多参数传递之混合方式——MyBatis学习笔记之十五

    在本系列文章的<MyBatis多参数传递之Map方式示例>一文中,网友mashiguang提问如下的方法如何传递参数:public List findStudents(Map condit ...

  6. MyBatis多参数传递之Map方式示例——MyBatis学习笔记之十三

    前面的文章介绍了MyBatis多参数传递的注解.参数默认命名等方式,今天介绍Map的方式.仍然以前面的分页查询教师信息的方法findTeacherByPage为例(示例源代码下载地址:http://d ...

  7. 【应用篇】MyBatis学习笔记

    MyBatis学习笔记 一 环境配置 1 什么是MyBatis? ​ MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的 JDBC 代码和参 ...

  8. 超详细Mybatis学习笔记(可供下载)

    文章目录 1.简介 2.第一个Mybatis程序 搭建环境 编写代码 测试 3.CRUD(增删改查) 3.1.几个属性 3.2.select 3.3.insert 3.4.delete 3.5.upd ...

  9. Mybatis学习笔记——第一天

    Mybatis学习打卡 Mybatis学习笔记---第一天 Mybatis笔记 第一天 一.引言 1. 现有Jdbc的缺陷 2. Mybatis框架 3. 搭建环境 1) 引入jar包 2) 引入配置 ...

  10. Mybatis学习笔记(二)【框架基础搭建】

    Mybatis框架基础搭建 一.数据库搭建 二.创建一个maven工程 三.在pom.xml中导入依赖 四.创建一个mybatis的核心配置文件 配置连接数据库的字段值文件(如果使用方式一就不需要配置 ...

最新文章

  1. 收藏 | 28个R语言绘图的实用程序包!
  2. 利用python将txt文件中的内容写入Excel文件中
  3. 阿加莎•克里斯蒂作品04东方快车谋杀案
  4. 网站运行怎么选服务器,wordpress外贸建站服务器怎么选
  5. 神州12号航天员确定:住110米“大平层” 有120种美食
  6. 树莓派搭建VSFTP记录---自用简记
  7. StataIC——协整检验与误差修正模型
  8. cacti mysql 压缩 备份_CactiEZ备份和恢复
  9. SSM 实现学生成绩管理系统(完整代码)
  10. 集成百度街景报错Error inflating class com.baidu.lbsapi.panoramaview.PanoramaView
  11. 《8问》| 程晓明:未来一定有世界货币,关键在于设计逻辑
  12. 关于contiki中的Ctimer和Etimer
  13. 菜鸟的一些常用快捷键的使用总结
  14. 北京理工大学操作系统复习——习题+知识点
  15. 网易云音乐歌单的推荐算法
  16. matlab失明的小猫,从小失明的小猫,手术后第一次见到猫妈妈,场面让人泪崩!...
  17. windows 网络正常 浏览器却打不开网页解决办法
  18. 刘利刚老师谈什么是计算机图形学?
  19. 表单Form提交数据和PHP数据处理
  20. 星巴克REST案例分析(转载自InfoQ)

热门文章

  1. python数学建模可视化,[Python与数学建模-数据处理与可视化]-3数据处理工具Pandas...
  2. oracle 只有年和月怎么拼_oracle 两表关联时,年月条件的写法引起的巨大性能的差异...
  3. Docker安装vi命令
  4. 哪些计算机的应用需采用多媒体技术,计算机多媒体技术的应用现状与发展前景...
  5. 点线面的特点_黑白装饰画——点线面 设计入门必备
  6. 给本地Git配置账号信息
  7. async spring 默认线程池_springboot中@Async默认线程池导致OOM问题
  8. 【渝粤教育】国家开放大学2018年春季 8601-22T燃气工程概论 参考试题
  9. 【渝粤教育】国家开放大学2018年春季 0242-21T机械制图 参考试题
  10. SQL Server和Oracle数据库索引介绍