说明:偶然看到一个视频,讲到了使用mybatis的逆向工程实现自动生成代码的部分(根据数据表生成相应的实体类、映射文件、接口),因为之前没有学习过这类东西,今天照着弄了下,然后自己写了一个测试案例,特来记录。。。。
=============================================
1.首先是maven结构的项目(以下圈起来的部分不需要我们编写,是由mybatis逆向工程生成的)
------------------------------------------------------------
2.数据表比较简单,仅仅只是为了测试生成代码的过程是否成功。表结构如下
--------------------------------------------------------------
3.首先先看需要加载的依赖
pom.xml
<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.lin</groupId>
<artifactId>MyBatisGeneratorTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- MyBati Generator逆向工程(代码生成器) -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<!-- 添加项目jdk编译插件 -->
<build>
<!-- 设置编译版本为1.8 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 配置tomcat7的插件,如果使用maven的命令方式运行,则命令为:tomcat7:run ,
而不能是tomcat:run(如果使用该命令,还是会使用maven默认的tomcat来编译运行项目)。
可以直接使用eclipse中的tomcat来运行项目(就是原先没有使用maven时的那样运行项目就可以了,那样的话也不需要配这个插件了)。
-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
</project>
4.然后搭建mybatis的运行环境
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 要使延迟加载生效必须配置下面两个属性 -->
<!-- lazyLoadingEnabled属性表示延迟加载的全局开关,默认为false -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- aggressiveLazyLoading属性启用时,会使带有延迟加载属性的对象立即加载;反之,会按需加载。默认为true -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<!-- 定义数据库信息,默认使用development数据库构建环境 -->
<environments default="development">
<environment id="development">
<!-- 采用JDBC事务管理 -->
<transactionManager type="JDBC"/>
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/maven"/>
<property name="username" value="root"/>
<property name="password" value="546784"/>
</dataSource>
</environment>
</environments>
<!-- 定义映射器,加载映射文件 -->
<mappers>
<package name="com.lin.mapper"/>
</mappers>
</configuration>
-----------------------------------------------------------------
5.然后就是本测试最重要的逆向工程配置了,其配置文件参考的官方文档http://www.mybatis.org/generator/afterRunning.html。。。具体说明在注解中标的详细了(这是比较简单的配置,但是应对普通的开发还是可以用的。。)
mbg.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="DB2Tables" targetRuntime="MyBatis3">
<!-- 配置在逆向生成时不需要有他们默认的注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 配置数据库连接信息 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/maven"
userId="root"
password="546784">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 指定javabean生成的位置
targetPackage:在哪个包下生成
targetProject:在哪个工程下
-->
<javaModelGenerator targetPackage="com.lin.domain"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 指定sql映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.lin.mapper"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 指定到接口生成的位置 ,mapper接口 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.lin.mapper"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 指定每个表的生成策略 -->
<table tableName="t_user" domainObjectName="User"></table>
</context>
</generatorConfiguration>
------------------------------------------
6.然后要编写一个来执行逆向工程的代码(这段代码具体是什么意思我也没有搞懂,但是以下需要我们指定的就是mbg.xml文件所在的位置,然后执行就可以生成我们所需要的代码了
)
MBGTest.java
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
public class MBGTest {
public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("mbg.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);
}
}
---------------------------------------------------------------------
OK,以上就可以生成我们所需要的代码了(
PS:
生成后会多出一个类
看视频上的介绍是说这个是用来做复杂查询用的,但是不知道是我配置错了还是怎么回事,这个生成的类跟我实际的业务完全不相关。。。还有值得一提的是,生成的映射文件还是得需要我们手动的进行部分的修改,因为不会完全的符合我们预期的效果的。),但是不影响我们使用别的生成的文件就是了,接下来简单测试一下是否可以运行
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.lin.domain.User;
import com.lin.mapper.UserMapper;
public class MybatisTest {
//根据用户id查询用户信息
@Test
public void insertUser() throws Exception {
//ͨ定义SqlSession
SqlSession sqlSession = null;
try {
//读取MyBatis的全局配置文件
String resource = "mybatis/mybatis-config.xml";
//读取MyBatis的全局配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//根据流对象获取会话工厂sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建会话sqlSession
sqlSession = sqlSessionFactory.openSession();
//通过sqlSession执行对数据库的相关操作
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//测试插入一条数据
// User u = new User();
// u.setUserId(1);
// u.setUserName("lin");
// int i = userMapper.insert(u);
// //这里一定要提交事务,不然不会更新到数据库!!!
// sqlSession.commit();
// System.out.println("成功插入了"+i+"条数据!");
//测试按主键查询用户
User u = userMapper.selectByPrimaryKey(1);
System.out.println(u.getUserName()+" "+u.getUserId());
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭会话
sqlSession.close();
}
}
}
=====================================================
到这里,逆向工程所生成的文件就可以使用了~~~