MyBatis逆向工程-根据数据库表自动生成bean、mapper接口以及映射文件

说明:偶然看到一个视频,讲到了使用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的运行环境

扫描二维码关注公众号,回复: 2174145 查看本文章

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();
        }
        
    }
}

=====================================================

到这里,逆向工程所生成的文件就可以使用了~~~


猜你喜欢

转载自blog.csdn.net/satisfy_555/article/details/80529391