本文以 Spring 整合 MyBatis 环境下, 介绍 MyBatis 逆向工程主动生成 pojo,mapper,dao 的 Java 类。MyBatis 的一个次要的特点就是须要程序员本人编写 sql,那么如果表太多的话,难免会很麻烦,所以 mybatis 官网提供了一个逆向工程,能够针对单表主动生成 mybatis 执行所须要的代码,个别在开发中,罕用的逆向工程形式是通过数据库的表生成代码。下图为逆向工程依赖的 jar 包。
mybatis-generator-core-1.3.6.jar 为逆向工程的外围包
mysql-connector-java-8.0.9-rc.jar 为连贯数据库所需驱动
mybatis-3.4.6.jar 为 mybatis 框架依赖的 jar 包, 到这里就足够了, 这里能够增加日志文件, 因为不是必须的所以就省略了, 咱们只须要下面三个包就能够应用 mybatis 的逆向工程了。上面看一下它依赖的配置文件。
这是配置文件的寄存地位, 肯定要放在我的项目的根目录下, 不要办法 src 下, 因为一会用到 File 来加载这个配置文件。
<context 标签,id 轻易取, 目前用不到。targetRuntime 运行环境, 目前 2018 年 4 月 30 号 Mybatis 最新的版本为 3.4.6, 所以这里写 3 就好, 再过几年有可能会变成 4。<commentGenerator> 下有个
<property name=”suppressAllComments” value=”true” />
标签, 该标签 value 为 true 的时候不显示生成 pojo 外面的正文, 这里生成的是英文正文, 所以默认抉择为 true 即可。<jdbcConnection> 标签须要创立 connection 对象根本的 url,user,password,driverClass 四个属性, 依照图中格局配置即可。被正文掉的局部是链接 oracle 数据库的格局
<javaTypeResolver> 标签用于将数据库中的 DECIMAL 和 NUMERIC 在 pojo 类中解析为 java.math.BigDecimal 类型, 所以咱们这里写 false, 全副解析为 Integer 类型。
这里的三个标签用于指定生成的 mapper,pojo, 与 mapper 接口的包名。和指定我的项目名, 有时候开发中个别都会新建一个 java 工程来生成,而后将生成的文件拷贝到本人的工程中,这也不麻烦,而且很平安。
最初的 table 标签用于对哪些表应用逆向工程。正文掉的局部用于指定数据库字段的 Java 类型。上面咱们看一下执行代码。
如图所示, 红色框框标识出的为逆向工程配置文件的地位, 因为这里应用 File 构造方法传入门路, 所以该配置文件必须放下我的项目录下, 不要放在 src/ 上面,否则读不到, 会抛出文件没找到的异样, 上面咱们执行一下试试。
这是控制台 log4j 日志打印出的, 能够看到它找到数据库中的,字段, 类型, 长度等信息, 到这里阐明生成胜利了。
咱们刷新一下我的项目发现 src/ 下多少 mapper 和 pojo 包, 都是方才逆向工程本人生成的。接下来咱们将 mapper 和 pojo 拷贝到 Spring 整合 MyBatis 环境中测试是否执行 SQL 语句操作。
这里补充下上一篇 Spring 整合 MyBatis 文章中遗记提到的, 咱们通过配置 mybatis 的 mapper 扫描包, 可能让 Spring 将 MapperScannerConfigurer 装入容器中,MapperScannerConfigurer 可能扫描包下所有子孙包中的 mapper 接口, 为咱们创立 mapper 的实现类。图中红色框框局部能够代替曾经正文掉的配置。因为没有指定接口的 bean 名称, 所以咱们只能通过传入 mapper 接口的 class 对象获取实现类, 代码如下。
图中重要代码曾经用红色框框标识出,UserExample 是逆向工程生成 pojoUser 时创立的, 该类封装了一些条件。Example.createCriteria() 这个办法时创立了一个条件查问对象, 这里和 hibernate 的 Criteria 对象十分相似, 通过 andSexEqualTo(“1”); 办法, 这个办法相当于 where sex =“1”这种限定条件, 而后当初调用 usermapper 中的办法, 这里调用的是 cunnt 办法, 传入 example 对象, 因为上一行中 example 对象曾经被咱们封装了 where sex =“1”的限定条件,usermapper.countByExample(example); 这句代码执行后拼接成的 sql 语句就是 select count(1) form user where sex = ‘1’; 这也就是 mybatis 被称为半 ORM 框架的起因, 也有了些许面向对象的意为, 但性能上还不足以与弱小的 hibernate 相媲美。咱们在创立限定条件对象 createCriteria() 时, 前面的条件是能够有限减少的, 该对象反对各种简单查问, 性能也还是非常弱小的。
以上就是 mybatis 的逆向工程介绍了, 不光可能本人生成 sql,pojo,mapper 外, 也封装了对数据库面向对象的操作,。