您的位置:首页 > 其它

MyBatis研习录(14)——MyBatis逆向工程

2019-11-27 21:56 183 查看

C语言自学完备手册(33篇)

Android多分辨率适配框架

JavaWeb核心技术系列教程

HTML5前端开发实战系列教程

MySQL数据库实操教程(35篇图文版)

推翻自己和过往——自定义View系列教程(10篇)

走出思维困境,踏上精进之路——Android开发进阶精华录

讲给Android程序员看的前端系列教程(40集免费视频教程+源码)

版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

概述

MyBatis逆向工程,简称MBG。它是一个专门为MyBatis框架使用者定制的代码生成器,它可以快速的根据表生成对应的映射文件xxxMapper.xml,接口xxxMapper.java,以及JavaBean类对象。

接下来,我们以示例的形式学习MBG的使用。

数据准备

DROP DATABASE IF EXISTS mybatisDatabase;
CREATE DATABASE mybatisDatabase;
use mybatisDatabase;
CREATE TABLE user(
id INT PRIMARY KEY auto_increment,
name VARCHAR(50),
password VARCHAR(50),
gender VARCHAR(10)
);

CREATE TABLE student(
id INT PRIMARY KEY auto_increment,
name VARCHAR(50),
address VARCHAR(50),
gender VARCHAR(10)
);

INSERT INTO user(name,password,gender) VALUES("lucy","123456","female");
INSERT INTO user(name,password,gender) VALUES("momo","234567","female");
INSERT INTO user(name,password,gender) VALUES("xixi","345678","female");
INSERT INTO user(name,password,gender) VALUES("pepe","456123","female");

INSERT INTO student(name,address,gender) VALUES("tome","BeiJing","female");
INSERT INTO student(name,address,gender) VALUES("dodo","ChengDu","female");
INSERT INTO student(name,address,gender) VALUES("mbmb","ZhangYe","female");
INSERT INTO student(name,address,gender) VALUES("zxzx","BaoDing","female");

SELECT * FROM user;
SELECT * FROM student;

搭建开发环境

创建普通的Java工程,结构如下:

在lib中一共存在四个jar包:

  • log4j-1.2.17.jar
  • mybatis-3.4.1.jar
  • mybatis-generator-core-1.3.2.jar
  • mysql-connector-java-5.1.7-bin.jar

其中,mybatis-generator-core-1.3.2.jar专门用于MyBatis逆向工程

log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

generatorConfig.xml

在工程Mybatis012根目录下创建generatorConfig.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>
<!--
targetRuntime 配置生成的版本
1、MyBatis3		      功能完整版本
2、MyBatis3Simple  怎删改查标准版
-->
<context id="MySQLTables" targetRuntime="MyBatis3Simple">

<!-- 去掉自动生成的代码的注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>

<!-- 配置数据源 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatisDatabase"
userId="root"
password="root">
</jdbcConnection>

<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>

<!--
javaModelGenerator 配置生成模型JavaBean
1、targetPackage  生成的JavaBean的包名
2、targetProject  生成的JavaBean的存放路径,该值常为.\src
-->
<javaModelGenerator targetPackage="cn.com.pojo" targetProject=".\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>

<!--
sqlMapGenerator 配置生成的映射文件xxxMapper.xml
1、targetPackage  生成的xxxMapper.xml的包名
2、targetProject  生成的xxxMapper.xml的存放路径,该值常为.\src
-->
<sqlMapGenerator targetPackage="cn.com.mapper"  targetProject=".\src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>

<!--
javaClientGenerator 配置生成的xxxMapper.java接口
1、targetPackage  生成的xxxMapper.java的包名
2、targetProject  生成的xxxMapper.java的存放路径,该值常为.\src
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="cn.com.mapper"  targetProject=".\src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>

<!-- 配置表和JavaBean的对应关系-->
<table tableName="user" domainObjectName="User" ></table>
<table tableName="student" domainObjectName="Student" ></table>

</context>

</generatorConfiguration>

Generator

在cn.com.generator包下建立Generator,其内容如下:

package cn.com.generator;

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 Generator {

public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//读取generatorConfig.xml配置文件
File configFile = new File("generatorConfig.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);
}

}

自动生成代码

运行Generator后再刷新整个Java工程即可见自动生成的代码,图示如下:

mybatis-config.xml

在自动生成代码后再创建并配置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>
<!-- 配置数据源 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatisDatabase" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 通过指定包的方式配置mapper -->
<package name="cn.com.mapper" />
</mappers>
</configuration>

MybatisTest

创建MybatisTest测试该逆向工程,其代码如下:

package cn.com.test;

import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
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 cn.com.mapper.StudentMapper;
import cn.com.mapper.UserMapper;
import cn.com.pojo.Student;
import cn.com.pojo.User;
/**
* 本文作者:谷哥的小弟
* 博客地址:http://blog.csdn.net/lfdfhl
*/
public class MybatisTest {

static SqlSessionFactory sqlSessionFactory = null;

public static SqlSessionFactory getSqlSessionFactory() {
try {
if (sqlSessionFactory == null) {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
}
return sqlSessionFactory;
} catch (Exception e) {
// TODO: handle exception
} finally {

}
return null;
}

@Test
public void testUser() {
//获取SqlSession
SqlSession sqlSession=getSqlSessionFactory().openSession();
//利用SqlSession得到Mapper
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.selectAll();
Iterator<User> iterator = userList.iterator();
while(iterator.hasNext()) {
User user = iterator.next();
System.out.println(user.getName()+" , "+user.getGender());
}
//关闭SqlSession
sqlSession.close();
}

@Test
public void testStudent() {
//获取SqlSession
SqlSession sqlSession=getSqlSessionFactory().openSession();
//利用SqlSession得到Mapper
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
Student student = studentMapper.selectByPrimaryKey(1);
System.out.println(student.getName()+" , "+student.getGender());
//关闭SqlSession
sqlSession.close();
}

}

测试结果如下:

附图

在此,附上整个项目的结构图,图示如下:

谷哥的小弟 博客专家 原创文章 1028获赞 2010访问量 243万+ 关注 他的留言板
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: