Mybatis自己主动生成代码

在mybatis自己主动生成代码有两种方式:

方式一:是通过使用eclipse作为开发工具。採用maven来构建项目生成的。以下的演示是通过第一种方式。

今天来记录下mybatis-generator插件自己主动生成xml mapper和model还有dao接口,这样我们就能够把精力放在业务代码上。而不须要关心数据库的详细操作。

这里我使用eclipse作为开发工具,採用maven来构建项目。

1. 编写pom.xml文件

这里仅仅有3个jar文件,数据库使用mysql

<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>com.jacksoft.mybatis</groupId>
  <artifactId>mybatis-generator</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <properties>
		<mybatis-generator.version>1.3.1</mybatis-generator.version>
		<mysql.version>5.1.13</mysql.version>
		<mybatis.version>3.0.3</mybatis.version>
	</properties>

  <dependencies>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql.version}</version>
		</dependency>

		<dependency>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-core</artifactId>
			<version>${mybatis-generator.version}</version>
		</dependency>

		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>${mybatis.version}</version>
		</dependency>
	</dependencies>

	<build>
		<finalName>mybatis-generator</finalName>
	<plugins>
		<plugin>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-maven-plugin</artifactId>
			<version>${mybatis-generator.version}</version>
			<dependencies>
			<!-- 数据库驱动  -->
				<dependency>
					<groupId>mysql</groupId>
					<artifactId>mysql-connector-java</artifactId>
					<version>${mysql.version}</version>
				</dependency>

			</dependencies>
			<!-- 自己主动生成 -->
			<executions>
				<execution>
					<id>Generate MyBatis Artifacts</id>
					<goals>
						<goal>generate</goal>
					</goals>
					<configuration>
						<configurationFile>src/main/resources/config/mysqlGeneratorConfig.xml</configurationFile>
						<overwrite>true</overwrite>
						<jdbcDriver>com.mysql.jdbc.Driver</jdbcDriver>
						<jdbcURL>jdbc:mysql://localhost:3306/demo</jdbcURL>
						<jdbcUserId>root</jdbcUserId>
						<jdbcPassword>hwroot</jdbcPassword>
					</configuration>
				</execution>
			</executions>
		</plugin>

		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<configuration>
				<source>1.5</source>
				<target>1.5</target>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>

		</plugins>
	</build>
</project>

我这里通过配置插件,让maven在运行install的时候。自己主动又一次生成代码。由于生成的代码中包括mybatis包中的类,所以也须要引入该包。

2.创建mysqlGeneratorConfig.xml文件

在src/main/resources/config文件夹以下创建mysqlGeneratorConfig.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> 

	<context id="mysqlTables" targetRuntime="MyBatis3">
		<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/demo"
		 userId="root" password="hwroot"/>

		<!-- 指定生成的类型为java类型,避免数据库中number等类型字段 -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false"/>
		</javaTypeResolver>

		<!-- 生成model模型,相应的包。存放位置能够指定详细的路径,如/ProjectName/src,也能够使用MAVEN来自己主动生成 -->
		<javaModelGenerator targetPackage="com.jacksoft.mybatis.generator.model" targetProject="MAVEN">
			<property name="enableSubPackages" value="true"/>
		</javaModelGenerator>

		<!--相应的xml mapper文件  -->
		<sqlMapGenerator targetPackage="com.jacksoft.mybatis.generator.dao" targetProject="MAVEN">
			<property name="enableSubPackages" value="true"/>
		</sqlMapGenerator>

		<!-- 相应的dao接口 -->
		<javaClientGenerator type="XMLMAPPER" targetPackage="com.jacksoft.mybatis.generator.dao" targetProject="MAVEN">
			<property name="enableSubPackages" value="true"/>
		</javaClientGenerator>

		<table tableName="user" domainObjectName="User"/>
	</context>
</generatorConfiguration>

3. 生成代码

到这里就差点儿相同了。保存为该文件后,实际上就已经開始生成代码了,可是在source code界面,还是看不到代码,我们通过刷新或者 右键项目-->Maven-->Update Project Configuration

这样就把生成的代码找到了。详细例如以下图:

相应的mapper,xml,model,example都生成好了。是不是非常方便啊?

可是该插件默认不带分页功能,分页插件将在下一次记录。

对于自己写的插件无法初始化的问题,能够參照:

http://code.google.com/p/mybatis/issues/detail?id=343

也就是须要将自己的插件在配置plugin的时候增加,如:

<plugin>
    			<groupId>org.mybatis.generator</groupId>
    			<artifactId>mybatis-generator-maven-plugin</artifactId>
    			<version>${mybatis-generator.version}</version>
    			<dependencies>
    				<dependency>
    					<groupId>mysql</groupId>
    					<artifactId>mysql-connector-java</artifactId>
    					<version>${mysql.version}</version>
    				</dependency>
    				<dependency>
    					 <groupId>com.jacksoft</groupId>
						  <artifactId>mybatis-plugins-paging</artifactId>
						  <version>${mybatis.paging.version}</version>
    				</dependency>
    			</dependencies>

方式二:是通过mybatis插件的方式来自己主动生成的。以下的演示是通过另外一种方式。

本文将简要介绍如何利用Mybatis Generator自己主动生成Mybatis的相关代码:

一、构建一个环境:

1. 首先创建一个表:

Sql代码  

  1. CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

2. 然后注入数据

Sql代码  

  1. insert into pet values(‘Fluffy‘, ‘Harold‘, ‘cat‘, ‘f‘, ‘1993-02-04‘, null);
  2. insert into pet values(‘Claws‘, ‘Gwen‘, ‘cat‘, ‘m‘, ‘1994-03-17‘, null);
  3. insert into pet values(‘Buffy‘, ‘Harold‘, ‘dog‘, ‘f‘, ‘1989-05-13‘, null);
  4. insert into pet values(‘Fang‘, ‘Benny‘, ‘dog‘, ‘m‘, ‘1990-08-27‘, null);
  5. insert into pet values(‘Bowser‘, ‘Diane‘, ‘dog‘, ‘m‘, ‘1979-08-31‘, ‘1995-07-29‘);
  6. insert into pet values(‘Chirpy‘, ‘Gwen‘, ‘bird‘, ‘f‘, ‘1998-09-11‘, null);
  7. insert into pet values(‘Whistler‘, ‘Gwen‘, ‘bird‘, null, ‘1997-12-09‘, null);
  8. insert into pet values(‘Slim‘, ‘Benny‘, ‘snake‘, ‘m‘, ‘1996-04-29‘, null);

注:这里的sql样例来自 http://dev.mysql.com/doc/refman/5.5/en/creating-tables.html

3. 在 Mybatis 主页 http://code.google.com/p/mybatis/ 上下载 Mybatis mybatis-generator-core [本文使用的是 1.3.0 版本号]。当然执行 mybatis-generator 生成的代码还须要下载 mybatis 的 jar 包[本例使用的是 3.0.2 版本号]。和相关数据库的 jdbc [本文中使用的是MySql的jdbc] 。

二、执行 mybatis-generator

1. 要执行 generator ,须要给 generator 提供一个配置文件,指定其生成的数据库的相关信息。

下面是一个演示样例:

Xml代码  

  1. <?xml version="1.0" encoding="UTF-8"?

    >

  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <classPathEntry location="mysql-connector-java-5.1.6-bin.jar" />
  7. <context id="DB2Tables" targetRuntime="MyBatis3">
  8. <commentGenerator>
  9. <property name="suppressDate" value="true" />
  10. </commentGenerator>
  11. <jdbcConnection driverClass="com.mysql.jdbc.Driver"
  12. connectionURL="jdbc:mysql://localhost/test" userId="qgd" password="123456">
  13. </jdbcConnection>
  14. <javaTypeResolver>
  15. <property name="forceBigDecimals" value="false" />
  16. </javaTypeResolver>
  17. <javaModelGenerator targetPackage="test.model"
  18. targetProject="../src/main/java">
  19. <property name="enableSubPackages" value="true" />
  20. <property name="trimStrings" value="true" />
  21. </javaModelGenerator>
  22. <sqlMapGenerator targetPackage="test.dao"
  23. targetProject="../src/main/java">
  24. <property name="enableSubPackages" value="true" />
  25. </sqlMapGenerator>
  26. <javaClientGenerator type="XMLMAPPER"
  27. targetPackage="test.dao" targetProject="../src/main/java">
  28. <property name="enableSubPackages" value="true" />
  29. </javaClientGenerator>
  30. <table tableName="pet" domainObjectName="Pet">
  31. </table>
  32. </context>
  33. </generatorConfiguration>

这个配置文件提供了 mybatis-generator所须要的參数信息:

* 当中classPathEntry 是引用的jdbc的类路径,这里将jdbc jar和generator的jar包放在一起了;

* commentGenerator 是用来除去时间信息的,这在配合类似subversion的代码管理工具时使用非常有效,由于能够降低没有必要的凝视迁入。

* jdbcConnection是指定的jdbc的连接信息;

* javaTypeResolver式类型转换的信息,这里并没实用到;

* javaModelGenerator是模型的生成信息,这里将指定这些Java model类的生成路径;

* sqlMapGenerator是mybatis 的sqlMapper XML文件的生成信息,包含生成路径等。

* javaClientGenerator是应用接口的生成信息;

* table是用户指定的被生成相关信息的表,它必须在指定的jdbc连接中已经被建立。

2. mybatis-generator 有多种执行方式。最简单的就是命令行的方式。仅仅须要指定对应的配置文件的路径就可以:

Java代码  

  1. java -jar mybatis-generator-core-1.3.0.jar -configfile ../src/main/resource/config.xml -overwrite

执行后生成的代码包含模型类 test.model.Pet 和 test.model.PetExample 。 test.dao.PetMapper 接口以及其相相应的 xml 映射文件,在这里就不在赘述了。

三、使用 mybatis-generator 生成的代码

1. 如今我们要利用这些生成的代码,首先我们须要一个关于全部映射的配置文件。须要我们手写例如以下:【不知道为什么generator没有选择自己主动生成这个文件,毕竟这些信息generator都能够得到】

Xml代码  

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <environments default="development">
  7. <environment id="development">
  8. <transactionManager type="JDBC" />
  9. <dataSource type="POOLED">
  10. <property name="driver" value="com.mysql.jdbc.Driver" />
  11. <property name="url" value="jdbc:mysql://localhost/test" />
  12. <property name="username" value="qgd" />
  13. <property name="password" value="123456" />
  14. </dataSource>
  15. </environment>
  16. </environments>
  17. <mappers>
  18. <mapper resource="test/dao/PetMapper.xml" />
  19. </mappers>
  20. </configuration>

2. 另外还要使用然后我们还须要一个Main演示样例方法来调用这些已生成的代码:

Java代码  

  1. package test;
  2. import java.io.Reader;
  3. import java.util.List;
  4. import org.apache.ibatis.io.Resources;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8. import test.dao.PetMapper;
  9. import test.model.Pet;
  10. import test.model.PetExample;
  11. public class Test {
  12. public static void main(String[] args) throws Exception {
  13. String resource = "MapperConfig.xml";
  14. Reader reader = Resources.getResourceAsReader(resource);
  15. SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
  16. SqlSession sqlSession = sqlMapper.openSession();
  17. PetExample pet = new PetExample();
  18. pet.or().andDeathIsNotNull();
  19. try {
  20. PetMapper mapper = sqlSession.getMapper(PetMapper.class);
  21. List<Pet> allRecords = mapper.selectByExample(pet);
  22. for (Pet s : allRecords)
  23. System.out.println(s);
  24. finally {
  25. sqlSession.close();
  26. }
  27. }
  28. }

这样就能够打印出对应的查询结果信息了。

四、小结

该演示样例的完整的Eclipseproject见附件mybatis-generator-usage.zip,当中已经包括了演示样例须要使用的jar包。

本文中仅仅是用到了mybatis-generator 的一部分功能,mybatis-generator 生成代码的方式还包含ant或Maven脚本,或者直接使用java API生成。另外通过改动配置文件,generator还能够指定表的生成细节,并能够加入插件。其功能文档在generator的分发包的doc目录下有更具体的介绍。

这里使用的表示没有主键的表。针对有一个主键或多个主键的表,mybatis-generator的生成的内容也有所不同,感兴趣的读者能够自行试验一下。

时间: 2024-08-02 23:08:02

Mybatis自己主动生成代码的相关文章

mybatis使用generator自己主动生成代码时的类型转换

使用mybatis的generator自己主动生成代码,可是oracle数据库中number(6,2)总是自己主动转成BigDecimal.我想要转成的是float类型 这样就写了一个类型转换器,须要继承JavaTypeResolver接口 然后在mybaties配置文件generatorConfig.xml中类型转换配置位置加入上就可以 <javaTypeResolver type="com.generator.MyJavaTypeResolver"> <prope

Mybatis generator 逆向生成代码

Mybatis generator 逆向生成代码 简单介绍 本文介绍用mybatis逆向生成javaben dao接口 1.创建maven项目 创建相应的包 附上项目创建完成的图片 然后在pom.xml文件里面引入需要的jar的依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schema

idea中mybatis generator自动生成代码配置 数据库是sqlserver

好长时间没有写博客了,最近公司要用java语言,开始学习java,属于初学者,今天主要记录一下mybatis generator自动生成代码,首先在如下图的目录中新建两个文件,如下图 generatorConfig.xml and jdbc.properties都要放在resource根目录下 具体generatorConfig.xml内容如下: <?xml version="1.0" encoding="UTF-8"?>   <!DOCTYPE

SpringBoot 添加mybatis generator 自动生成代码插件

自动生成数据层代码,提高开发效率 1.pom添加插件,并指定配置文件路径 <!-- mybatis generator 自动生成代码插件 --> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.5</version> <

Spring 中使用 Mybatis generator 自动生成代码

Mybatis generator 是一个 Mybatis 插件,可以用于自动生成项目中需要的 pojo 类.对应的 Mapper 接口和 mapper.xml 文件.使用该插件,一方面可以节省开发时间,另一方面也避免手写时打错字的问题. 由于工作需要,我打算在原有的 Spring 项目中使用 Mybatis generator 自动生成代码,以便简化 DAO 层的开发. 闲言少叙,just do it! 1. 引入依赖 a. 父模块配置 <properties> <spring_ver

【MyBatis学习15】MyBatis的逆向工程生成代码

1. 什么是逆向工程 mybatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml.mapper.Java.po..).一般在开发中,常用的逆向工程方式是通过数据库的表生成代码. 2. 使用逆向工程 使用mybatis的逆向工程,需要导入逆向工程的jar包,我用的是mybatis-generator-core-1.3.2,已经上传到下载频道了(点

回顾一下MyBatis逆向工程——自动生成代码

前言 最近做的项目(SSM+Shiro)的数据库表已经创建完成,一共有15张表,如果我们一个个去写pojo/bean的代码以及各种sql语句的话未免太过麻烦而且很容易出错,这个时候我们就需要MyBatis逆向工程去为我们生成这些基本的东西.先来简单的了解一下什么是逆向工程 一 什么是逆向工程 官网解释浓缩版:MyBatis逆向工程需要用到的就是MyBatis官方提供的MyBatis Generator(MBG).MBG是MyBatis和iBATIS的代码生成器,它将为所有版本的MyBatis以及

mybatis之generator生成代码

首先在pom文件中引入以下代码 <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <verbose>true</verbose> <over

在Spring Boot中使用MyBatis并且自动生成代码,详细一看就懂

MyBatis目前是主流的数据访问层框架,我司目前的项目大部分都是用MyBatis.本文将使用Spring Boot快速创建项目,并且在Spring Boot中使用MyBatis,编写了一个根据区域id获取区域信息的接口例子.在最后,使用MyBatis的Generator自动生成代码. 0.新建Spring Boot项目 打开开发工具:IntelliJ IDEA,选择jdk 1.8以上. 点击File→New→Project...,选择Spring Initializr. 然后next: nex