Mybatis(七) mybatis的逆向工程的配置详解
还是觉得看书学习有意思 ~ 嘿嘿。今天把 mybatis 给结束掉。
--WZY
一、什么是逆向工程?
简单点说,就是通过数据库中的单表,自动生成 java 代码。
Mybatis 官方提供了逆向工程,可以针对单表自动生成 mybatis 代码(mapper.java\mapper.xml\po 类)
企业中,逆向工程是个很常用的工具,之前我们就学习了 hibernate 的逆向工程,比我们手动创建映射文件的配置信息方便很多,
二、下载逆向工程
三、创建 java 工程
此步骤截图略,
四、添加 jar 包
逆向工程 jar 包,mybatis-generator-core-1.3.2.jar,每个人版本不一样,这里不一定就完全相同
数据库驱动包,使用的是 mysql
五、创建核心代码
点击进入 jar 包的 docs 目录下找到 index.html 来查询复制核心代码。
点击 index.html 进入
给出核心代码方便日后直接复制
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);
六、创建 generatorConfig.xml 配置文件
根据上面的核心代码,仔细看一下不难发现,其运行需要加载一个 generatorConfig.xml 配置文件,在 index.html 中也有该配置文件的模版。
这个也比较清楚,下面有什么不懂的都有做出解释,但是我们不这样直接复制,我给出一份好的,有注释的,日后直接复制改点数据即可
在我上面框出来的地方就是需要修改的地方,根据自己的实际情况来进行修改,并且这里的配置文件是将数据库中的 user、orders、orderdetail、items 这四张表进行逆向,配置文件中需要指定需要逆向生成的表的名称
<?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/test"userId="root"
password="root">
</jdbcConnection><!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"<span style="color: rgba(0, 0, 0, 1)"> userId</span>="yycg" password="yycg"> </jdbcConnection> --> <!--<span style="color: rgba(0, 0, 0, 1)"> 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal </span>--> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetProject:生成PO类的位置 --> <javaModelGenerator targetPackage="com.wuhao.mt.domain"<span style="color: rgba(0, 0, 0, 1)"> targetProject</span>=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="com.wuhao.mt.mapper"<span style="color: rgba(0, 0, 0, 1)"> targetProject</span>=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER"<span style="color: rgba(0, 0, 0, 1)"> targetPackage</span>="com.wuhao.mt.mapper" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定数据库表 --> <table tableName="user"></table> <table tableName="orders"></table> <table tableName="orderdetail"></table> <table tableName="items"></table> </context>
</generatorConfiguration>
注意核心代码中加载 generatorConfig.xml 的配置文件的位置需要写正确,根据你自己的存放位置进行相应的修改,并不是固定的。
七、目录结构
完成核心代码和其配置文件之后的工程就成这样了,然后直接运行核心代码就会自动帮我们从数据库中指定的表生成 mybatis 的 mapper 类。
运行 Generator.java
这里需要注意一个问题,点击运行之后,就已经帮我们生成好了对应的类,但是我们需要手动刷新项目才看得见,有些人就会觉得看不见,以为没有生效,然后又第二次运行核心代码,这里就会出现一个很严重的问题,[Mapper.xml 文件已经存在时,如果进行重新生成则 mapper.xml 文件时,内容不被覆盖而是进行内容追加,结果导致 mybatis 解析失败]
解决办法:删除生成的所有类和 mapper.xml,重新在运行一遍即可。
生成之后的目录
其他都不用说,说两个地方
第一:mapper 接口报错了,这里不用管,报的错的原因是缺少 mybatis 核心的 jar 包,和 mapper 接口中却用到了这些类,所以就会报错,
解决:加入所需要 jar 包错误消失,但是我们不会这样做,因为这个项目就是用来生成 mapper 相关类的,加入 jar 包没什么用,多此一举,我们需要用的时候将其加入我们开发时的项目中,就不会在报错了。
第二:生成的持久化对象中,多了一个 xxxExample.java 类,这个类是用来 [构造复杂的筛选条件],通俗点讲就是[专门用来封装自定义查询条件],等会会介绍他的使用方法。
八、测试
将我们逆向工程所生成的 mapper 相关的类和接口等东西都加入到我们开发的项目中来,进来实验,这里就不过多陈述了,不会的话,就看前几章节的 mybatis 的构建和使用
目录
这里我们将 Items 相关的类,都加入到与 spring 集成的项目中去,框起来的就是我们从逆向工程中获取到的。注意,逆向工程就是使用 mapper 方式进行开发,而不是 dao 方式
测试,OrderMapperTest.java
//问题描述:查询出 Items 中 name 中有 "记" 字的记录,模糊查询,使用查询条件 (xxxExample) //获取 applicationContext.xml 配置并加载 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //获取 ItemsMapper 代码对象 ItemsMapper im = (ItemsMapper) ac.getBean("itemsMapper"); //封装查询条件的对象在该类 (ItemsExample) 中,所以先构造该对象 ItemsExample ie = new ItemsExample(); //通过 ItemsExample 的对象获取封装查询条件的对象 Criteria Criteria c = ie.createCriteria(); //构建查询条件,这里使用方法将其内部实现封装了,其实做的事情就是在 //sql 语句的 where 后面加入: and name like "% 记 %" c.andNameLike("% 记 %"); //通过 im 将查询条件传送进去。 List<Items> list = im.selectByExample(ie); //查询出 name 为笔记本这条记录 System.out.println(list.get(0).getName());
九、总结
这里就将 mybatis 的逆向工程给讲完了,一点都不难,一步步实现下去即可,关键是后的多的那个 xxxExample 类可能大家有一点不理解,下一篇文章会将其讲解清楚,详细介绍一下这个类。这一节就学会如何创建逆向工程即可。