Mybatis-Generator开发教程
转载:https://blog.csdn.net/qqyb2000/article/details/80031559
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录,MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po)。在开发中,常用的逆向工程方式是通过数据库的表生成代码,以提高开发效率。
使用逆向工程
使用MyBatis的逆向工程,需要导入逆向工程的jar包,我用的是mybatis-generator-core-1.3.2.jar,下面开始总结一下MyBatis逆向工程的使用步骤。
新建一个工程(重要)
我们要新建一个java工程,这个工程专门用来使用逆向工程生成代码的。有些人可能会问,为什么要新建一个工程呢?直接在原来工程中你想生成不就可以了么?确实是这样,可以在原来的工程中生成,但是有风险,因为MyBatis是根据配置文件来生成的(下面会说到),如果生成的路径中有相同的文件,那么就会覆盖原来的文件,这样会有风险。所以开发中一般都会新建一个java工程来生成,然后将生成的文件拷贝到自己的工程中,这也不麻烦,而且很安全。如下:
从上图中看,①就是要执行的java代码,执行它即可生成我们需要的dao接口;②是生成的vo③生成的mybatis的映射文件;④mybatis生成器的配置文件。
以下是mavan工程的配置文件
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
配置逆向工程的配置文件
MyBatis逆向工程生成代码需要一个配置文件,名字随便起。然后MyBatis会根据这个配置文件中的配置,生成相应的代码。mybatis-generator-core-1.3.6.jar这个jar包里面有帮助文档,打开后里面有配置文件的模板,这里就不再赘述了,下面先把配置文件写好:
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration1.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/books"userId="root"
password="tiger">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals"value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.oracle.mybatis.vo"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages"value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings"value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.oracle.mybatis.mapper"
targetProject=".\src\main\resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages"value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.oracle.dao"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages"value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table schema=""tableName="book"></table>
<table schema=""tableName="account"></table>
<!-- 有些表的字段需要指定java类型
<table schema=""tableName="">
<columnOverridecolumn="" javaType="" />
</table> -->
</context>
</generatorConfiguration>
从上面的配置文件中可以看出,配置文件主要做的几件事是:
1. 连接数据库,这是必须的,要不然怎么根据数据库的表生成代码呢?
2. 指定要生成代码的位置,要生成的代码包括po类,mapper.xml和mapper.java
3. 指定数据库中想要生成哪些表
执行逆向工程生成代码
配置文件搞好了,然后就执行以下程序即可生成代码了,生成的java程序,下载的逆向工程文档中都有示例,如下:
publicclass Generator {
publicvoid generator() throws Exception{
List<String> warnings = new ArrayList<String>();
booleanoverwrite = true;
//指定逆向工程配置文件
File configFile = new File("src/main/resources/Configuration.xml");
System.out.println(configFile.getAbsolutePath());
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);
}
/**主函数*/
publicstaticvoid main(String[] args) throws Exception {
try {
GeneratorgeneratorSqlmap = new Generator();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行一下即可,运行完了后刷新一下工程,就可以看到最新生成的代码了。
这里可以看出有个细节,每个vo类多了一个东西,就是xxxExample.java,这个类是给用户自定义sql使用的,后面我会提到。到这里就生成好了,下面我们就把生成的代码拷贝到自己的工程使用了。
逆向工程测试
在这里我把生成的代码拷贝到上文的工程案例中,:
接着在Spring核心配置文件——application-context.xml添加如下配置:
<bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource"ref="dataSource"></property>
<!-- 映射文件所在的位置 -->
<property name="mapperLocations"value="classpath*:com/oracle/mapper/*.xml"></property>
<property name="typeAliasesPackage"value="com.oracle.vo"></property>
<property name="configurationProperties">
<props>
<prop key="logImpl">LOG4J</prop>
</props>
</property>
<!-- 配置分页插件 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
dialect=mysql
reasonable=true
</value>
</property>
</bean>
</array>
</property>
</bean>
<!-- dao接口的位置 -->
<mybatis-spring:scan base-package="com.oracle.dao"/>
最后编写UserMapper接口的单元测试类——UserMapperTest.java,内容如下:
publicclassUserMapperTest {
privateApplicationContext applicationContext;
@Before
publicvoidinit() {
// 初始化Spring容器
applicationContext = newClassPathXmlApplicationContext("capplication-context.xml");
}
@Test
publicvoidtestDeleteByPrimaryKey() {
// 请读者自行测试...
}
@Test
publicvoidtestInsert() {
BookMapper bookMapper = applicationContext.getBean(BookMapper.class);
Book book = new Book();
book.setName("数学之美");
book.setIsbn(4578963);
book.setPrice(39);
bookMapper.insert(book);
}
@Test
publicvoidtestSelectByExample() {
BookMapper bookMapper = applicationContext.getBean(BookMapper.class);
BookExample example = new bookExample();
// Criteria类是UserExample类里面的内部类,Criteria类是干什么用的呢?它专门用于封装自定义查询条件的
// Criteria criteria = example.createCriteria();
// criteria.andNameLike("%数学%");
// 执行查询
List<BookMapper> list = bookMapper.selectByExample(example);
for (BookMapper book : list) {
System.out.println(user);
}
}
@Test
publicvoidtestSelectByPrimaryKey() {
BookMapper bookMapper = applicationContext.getBean(BookMapper.class);
BookMapper book = bookMapper.selectByPrimaryKey(10);
System.out.println(book);
}
@Test
publicvoidtestUpdateByPrimaryKey() {
// 请读者自行测试...
}
}
可以看出,逆向工程生成的代码,基本上和之前使用的差不多,只不过它更规范一点,而且还多了自定义查询条件的java类,用起来还是挺方便的。
---------------------
作者:戚爱斌
来源:CSDN
原文:https://blog.csdn.net/qqyb2000/article/details/80031559
版权声明:本文为博主原创文章,转载请附上博文链接!
Mybatis-Generator开发教程的更多相关文章
- mybatis generator 使用教程(生成带注释的实体类)
引言: 最近的一个项目,由于数据库表巨多,导致需要创建N多个java实体.dao.mapper.xml映射文件,如果均使用纯手工编写,无疑需要耗费大量时间和精力.于是上网学习了mybatis gene ...
- SpringBoot使用Mybatis注解开发教程-分页-动态sql
代码示例可以参考个人GitHub项目kingboy-springboot-data 一.环境配置 1.引入mybatis依赖 compile( //SpringMVC 'org.springframe ...
- springboot(二十一):SpringBoot使用Mybatis注解开发教程-分页-动态sql
https://blog.csdn.net/KingBoyWorld/article/details/78948304
- SpringBoot入门教程(四)MyBatis generator 注解方式和xml方式
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...
- [springboot 开发单体web shop] 2. Mybatis Generator 生成common mapper
Mybatis Generator tool 在我们开启一个新项目的研发后,通常要编写很多的entity/pojo/dto/mapper/dao..., 大多研发兄弟们都会抱怨,为什么我要重复写CRU ...
- MyBatis 注解开发+逆向(Generator)
注解开发 最初设计时,MyBatis 是一个 XML 驱动的框架.配置信息是基于 XML 的,而且映射语句也是定义在 XML 中的.随着技术的更新发展,对于开发效率要求也原来越高,特别是一些小型项目; ...
- 取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!
作为一名 Java 后端开发,日常工作中免不了要生成数据库表对应的持久化对象 PO,操作数据库的接口 DAO,以及 CRUD 的 XML,也就是 mapper. Mybatis Generator 是 ...
- mybatis0212 mybatis逆向工程 (MyBatis Generator)
1mybatis逆向工程 (MyBatis Generator) .1什么是mybatis的逆向工程 mybatis官方为了提高开发效率,提高自动对单表生成sql,包括生成 :mapper.xml.m ...
- spring boot集成mybatis(3) - mybatis generator 配置
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- mybatis Generator生成代码及使用方式
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5889312.html 为什么要有mybatis mybatis 是一个 Java 的 ORM 框架,OR ...
随机推荐
- Python学习日记(二十四) 继承
继承 什么是继承?就是一个派生类(derived class)继承基类(base class)的字段和方法.一个类可以被多个类继承;在python中,一个类可以继承多个类. 父类可以称为基类和超类,而 ...
- PyCharm-安装&调试
windows安装pycharm 和python的链接: PyCharm:http://www.jetbrains.com/pycharm/ Python:https://www.python.org ...
- web中cookie和session_转
转自:Python爬虫番外篇之Cookie和Session python修行路 关于cookie和session估计很多程序员面试的时候都会被问到,这两个概念在写web以及爬虫中都会涉及,并且两者可 ...
- consul-服务发现、服务隔离、服务配置
一.服务发现 服务发现组件记录了(大规模)分布式系统中所有服务的信息,其它服务可以据此找到这些服务.DNS 就是一个简单的例子.当然,复杂系统的服务发现组件要提供更多的功能,例如,服务元数据存储.健康 ...
- System V共享内存
目录 1. 概述 2. System V共享内存API shmget shmat shmdt shmctl 3. 简单的程序 代码实现 common.h shmcreate.c shmrmid.c s ...
- Access、Trunk和Hybrid三种端口模式
网络交换机(英语:Network switch)是一个扩大网络的器材,能为子网中提供更多的连接端口,以便连接更多的电脑. 通俗来说其起到的作用就是把一个网络端口分成多个网络端口 交换机和路由器的区别 ...
- CentOS 7.6最小化安装(系统盘和数据盘分离安装)
CentOS 7.6最小化安装(系统盘和数据盘分离安装) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.创建虚拟机 鉴于大家使用的平台操作系统可能不尽相同,博主精力有限,仅演示 ...
- pytest使用
安装: pip install pytest pip install pytest-cov utils.py代码 def add(a, b): return a+b def inc(x): retur ...
- memcached的缺点
上篇博客说了为什么引入memcached,主要讲述了memcached的优点,接下来就是我们在使用中必须要注意的内容,memcached的缺点,只有正确认识它,才能运用自如,接下来先看一下memcac ...
- 原生JavaScript和jQuery的较量
JavaScript和jQuery有很多相似知促,那么二者又是如何进行较量,我们先了解一下什么是JavaScript和jQuery,知其源头,才能知其所以然. 简介: [JavaScript] 一种直 ...