一步步学Mybatis-告别繁琐的配置之Mybatis配置文件生成工具 (7)
今年是2013年的杀青之日,前几天由于比较忙,没有及时更新本篇的最后一篇东西,前六篇中我们主要都是采用手动配置相关的Mybatis映射文件与相应的接口类与实体类。当然如果在真正的使用过程中,由于业务的复杂度,表少点的话还好如果相关业务表很多,难道我们都要一个个这样去配置嘛,这显然不可能,今天就要讲述怎么通过官方提供的MyBatisGenerator生成相应的配置文件。还记得第一章中我们要求准备的2个核心jar包嘛,一个是用于Mybatis的核心业务,另一个mybatis-generator-core-1.3.1.jar就是这边用到的,闲话不多少了,我们看看怎么样用这个工具自动生成相应的配置。
对于使用这个MybatisGenerator(下面简称MBG)配置工具我们必须了解和知道的信息:
MBG工具主要能够生成
1. Java POJO(对应于表结构的生成),主要可以生成满足如下条件的实体类
1.1 表的主键字段(如果有的话)
1.2 表的非主键字段(不包含BLOB类型的字段)
1.3 一个包含BLOB字段的表
1.4 该类允许动态的select,update,delete操作
2. 对应MBG配置里面配置表的那些简单CRUD操作,如果需要的选择语句是多表联合查询的还是需要自己在那个基础上手动修改。
2.1 新增记录
2.2 根据主键更新记录
2.3 根据动态条件更新记录
2.4 根据主键删除记录
2.5 根据非主键的条件删除记录
2.6 根据主键查询记录
2.7 根据相应条件查询记录
2.8 统计相应记录数
上述的那些语句是表结构情况来定(例如如果这个表没有主键,那MBG就不会生成相应的与主键相关的Mapper信息节点)
3. 如果过多次运行生成操作,如果发现有同名的Mapper文件,MBG将自动合并相应的Mapper.xml并把他合并后的文件当成新的配置文件,
当然它不会合并掉你已经添加的那些自定义的配置文件变化信息,你可以多次运行而不必担心定制的内容被覆盖。
4. Mapper配置会相应的合并,但是MBG是不会去合并相应的Java文件,包括POJO的实体类,与相应的接口类,它会采取覆盖或者重新成
成另外个名字的新文件,如果你多次生成了配置文件,你只有手动去合并那些已经有的改动,当然如果你运行Eclipse的插件那么MBG就可
以自动合并相应的Java信息文件了
5. 依赖性,该MBG工具除了要求是JRE5.0以上的环境与一个JDBC驱动包,没有其他特别需要的依赖。
说了那么多注意事项,我们可以动手开始弄了。
MBG的运行主要依靠一份XML配置文件,首先我们可以重新新建一个项目名为MybatisGenerator,新建3个包分别名叫config,david.test,与david.mbg,config包主要存放真正的Mybatis里面需要用到的配置文件,可以把前几章中项目中的mybatis_demo_config.xml拷贝过来放在这个目录下,等等用作测试程序之用,david.test顾名思义就是存放以下常用的方法和测试程序大家也可以吧前几章中用到MybatisUtils工具类拿过来,新建好相应的MainFunction以备测试之用。而最后的david.mbg中就是我们今天要配置的XML,MBG生成配置文件。
如图所示,我们在下面新建好一个名为mbg_configuration.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>
<classPathEntry
location="./lib/mysql-connector-java-5.1.26-bin.jar" />
<context id="mybatisDemoForMysql" targetRuntime="MyBatis3">
<!-- 控制注释 -->
<commentGenerator>
<!-- 是否去除所有自动生成的注释文件 -->
<property name="suppressAllComments" value="true" />
<!-- 是否去除所有自动生成的文件的时间戳,默认为false -->
<property name="suppressDate" value="true" />
</commentGenerator>
<!-- 控制数据库 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis_db?characterEncoding=utf8"
userId="root" password="david0110" /> <javaTypeResolver>
<!-- 把jdbc中的decimal与numberic类型转化为integer类型 -->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 数据库表对应的model -->
<javaModelGenerator targetPackage="david.model"
targetProject="src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 控制Model的xmlMapper文件 -->
<sqlMapGenerator targetPackage="david.mappers"
targetProject="src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 控制mapper接口 -->
<javaClientGenerator targetPackage="david.inter"
type="XMLMAPPER" targetProject="src">
<property name="enableSubPackages" value="true" />
<property name="methodNameCalculator" value="extended" />
</javaClientGenerator>
<!-- schema你的数据库,tableName表明,domainObjectName对应你的javabean类名,是否生成相应的example -->
<table schema="mybatis_db" tableName="visitor" domainObjectName="Visitor"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
<generatedKey column="id" sqlStatement="MySql" />
<columnOverride column="name" property="visitor_name" />
<ignoreColumn column="status" delimitedColumnName="false" />
</table>
</context>
</generatorConfiguration>
MBG配置文件
大家可以注意到其实主要是这几个节点
<classPathEntry>=> 存放jdbc驱动包的位置,可以采用相对路径,也可以采用绝对路径,此处示例中采用了相对路径
<context>=>对应一个数据库下所有表的配置,可以有多个context,一个配置mysql,一个配置oracle。
<context>节点下主要有:
<commentGenerator> => 注释生成节点,此示例中下的2个子节点分表代表
suppressAllComments => 是否去除所有自动生成的注释文件
suppressDate => 是否去除所有自动生成的文件的时间戳,默认为false
<jdbcConnection> => 数据库连接配置信息
<javaTypeResolver> => 把jdbc中的decimal与numberic类型转化为java.math.BigDeciaml形式表示
<javaModelGenerator> => 配置你的POJO实体类,targetPackage="david.model",对应你的报名,可以自己根据实际业务取名,targetProject="src",在Eclipse环境下,指代的是项目和源文件夹的路径一般是指src目录,你的包都会新建在这个目录下,如果不是Eclipse环境,此处的值应该是个实际存在的文件系统路径,如果指定的路径不存在会报错,因为MBG不会自己创建相应的文件夹
<sqlMapGenerator> => 配置生成相应的实体Mapper.xml,对于Mapper3.X我们需要把type="XMLMAPPER"
<javaClientGenerator> => 配置生成相应的接口类,对应与Mapper.xml中的一系列CRUD方法SQL语句
<table> => 配置相应的数据库,对应的表明与想要生成领域类名(也就是实体类名字),此示例中我关闭了所有不必要的Example生成信息
上述所有的信息都可以去官网查阅相应文档,或者到我的文件中去下载,里面相应的配置说明与相关应用示例。下载文档
配置完上面的信息,最后一步是什么呢,我们就是要运行这个脚本文件了,官方说明中有4种方式,第一通过命令行方式,第二,三都是通过Ant或者Maven之类的工具生成,最后一种就是通过Java代码生成,我们这里就采用通过Java大麦生成的方式。在DemoRun类中添加一个生成脚本的方法如下:
private static void generateMbgConfiguration() {
/*
* Mybatis自带Generator工具生成相应东西
*/
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("./src/david/mbg/mbg_configuration.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = null;
try {
config = cp.parseConfiguration(configFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XMLParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
try {
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
} catch (InvalidConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} System.out.println("生成Mybatis配置成功!");
}
脚本生成方法
运行后再Refresh下项目你会发现下面神奇的帮你生成了主要配置,下图红框部分:
最后我们来使用下自动生成的成果吧,我们可以参照前六章的方式,在DemoRun中添加相应的CRUD测试方法如下:
/*
* 查询访问者信息
*/
public static void testGenerateAdd() {
SqlSession session = MybatisUtils.getSqlSession();
VisitorMapper vOperation = session.getMapper(VisitorMapper.class);
Visitor visitor = new Visitor();
visitor.setVisitor_name("hello2");
visitor.setEmail("helloworld2@qq.com");
visitor.setCreatetime(new Date());
int count = vOperation.insert(visitor);
session.commit();
MybatisUtils.closeSession(session);
MybatisUtils.showMessages(CRUD_Enum.Add, count);
} /*
* 查询访问者信息
*/
public static void testGenerateQuery(int id) {
SqlSession session = MybatisUtils.getSqlSession();
VisitorMapper vOperation = session.getMapper(VisitorMapper.class);
Visitor visitor = vOperation.selectByPrimaryKey(id);
MybatisUtils.closeSession(session);
MybatisUtils.showMessages(CRUD_Enum.Query, 1);
System.out.println(visitor);
} public static void testGenerateDelete(int id) {
SqlSession session = MybatisUtils.getSqlSession();
VisitorMapper vOperation = session.getMapper(VisitorMapper.class);
int count = vOperation.deleteByPrimaryKey(id);
session.commit();
MybatisUtils.closeSession(session);
MybatisUtils.showMessages(CRUD_Enum.Delete, count);
} public static void testGenerateUpdate(int id) {
SqlSession session = MybatisUtils.getSqlSession();
VisitorMapper vOperation = session.getMapper(VisitorMapper.class);
Visitor visitor = vOperation.selectByPrimaryKey(id);
System.out.println(visitor);
String name = visitor.getVisitor_name();
if (name.contains("update")) {
visitor.setVisitor_name(name.substring(0, name.indexOf("update")));
} else {
visitor.setVisitor_name(name + "update");
}
int count = vOperation.updateByPrimaryKey(visitor);
session.commit();
MybatisUtils.closeSession(session);
MybatisUtils.showMessages(CRUD_Enum.Update, count);
System.out.println(visitor);
}
CRUD测试方法
运行下测试程序,结果就出来了
有没有感觉使用这个帮你提高了不少效率,不必在为繁琐的配置而头痛了,至少不用做重复的无谓的步骤了,让这些都交给工具去做吧^0^,当然在实际的使用中我们可能需要在生成后修改相应的类信息与接口信息名字,当然这些工作量已经不是太多了。希望今天这些内容对需要配置的同学有所帮助。
一步步学Mybatis-告别繁琐的配置之Mybatis配置文件生成工具 (7)的更多相关文章
- 使用Mybatis的一些基本配置及Mybatis与数据库交互测试验证
1.简介 什么是MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.My ...
- 菜鸟学SSH(十一)——Hibernate之SchemaExport+配置文件生成表结构
今天说点基础的东西,说说怎样通过SchemaExport跟Hibernate的配置文件生成表结构.事实上方法很easy,仅仅须要两个配置文件,两个Java类就能够完毕. 首先要生成表,得先有实体类,以 ...
- idea 配置springmvc+mybatis(图文教程)
idea配置 spirngmvc+maven+mybatis 数据库采用的是mysql 服务器容器用的是tomcat8 废话不多说直接干! 首先新建一个 maven工程, "File&qu ...
- Java EE数据持久化框架 • 【第5章 MyBatis代码生成器和缓存配置】
全部章节 >>>> 本章目录 5.1 配置MyBatis Generator 5.1.1 MyBatis Generator介绍 5.1.2 MyBatis Generat ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)
你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)
从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...
- MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql
一.MyBatis简介与配置MyBatis+Spring+MySql 1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的J ...
- MyBatis复习【简单配置CRUD】
这里的案例集成了log4j的日志框架,项目架构: 用到的jar文件 添加配置文件:mybatis-config.xml 和dao层配置文件StudentDao.xml 这里书写了个简单的案例仅为了说 ...
- Mybatis的二级缓存配置
一个项目中肯定会存在很多共用的查询数据,对于这一部分的数据,没必要每一个用户访问时都去查询数据库,因此配置二级缓存将是非常必要的. Mybatis的二级缓存配置相当容易,要开启二级缓存,只需要在你的 ...
随机推荐
- Raspberry Pi3 ~ Eclipse中添加wiringPi 库函数
这篇是在博客园原创 转载注明出处啊 以前用单片机.STM32之类的时候都是在一个集成的开发环境下进行的 比如Keil.IAR等 那么linux下编程,eclipse是个不错的选择 关于树莓派的GPIO ...
- Unreal Engine 虚幻引擎宣布对开发者免费
虚幻引擎4现在可供每个人免费使用,而且所有未来的更新都将免费!您可以下载引擎并将其用于游戏开发的各个方面,包括教育.建筑以及可视化,甚至虚拟现 实.电影和动画. 当您发布游戏或应用时,在您的每个游戏在 ...
- CSS中animate属性
我记得,在工作中直接使用animation,只要能做出动画就完了,根本没有看每一个细节. 其实,这样做对于我们来说,的确没有错,因为工作中没有时间给你看每一个细节,大致看一篇就没下文了. 当我们想要好 ...
- MFC中TRACE
错误 1 error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shar ...
- Yii 1.1 URL两个笔记 同时支持PATH于GET路由和隐藏index.php
同时支持PATH于GET格式路由(修改框架文件 简直坑) framework/web/CUrlManager.php parseUrl方法 第一行判断修改成 if($this->getUrlFo ...
- Container View Controller
有时候,我们的Controler中包含有另一个controler view的view时,可以使用这种方式. https://developer.apple.com/library/ios/featur ...
- CSStickyHeaderFlowLayout collectionView headerView 悬浮
github:https://github.com/levyleo/CSStickyHeaderFlowLayout iOS 10 使用时会出现崩溃:https://github.com/CSStic ...
- Google Glass应用开发探索
摘要:2012年6月的Google开发者大会上,作者有幸预定到了Google Glass.8个月后,她收邀参加了Google纽约总部举行的Google Glass Foundry开发大赛.在为期两天的 ...
- dom 侧栏分享
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- ESB的XmlProPertyMgr类的getNode(xxx)方法
//------------------------------------------------------------------------------ public static Eleme ...