@author:杜勇帅
@email:http://820482874qq.com
01【熟悉】mybatis概述
1,什么是mybatis
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
2,orm工具的基本思想
O object
r 关系
m model
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
2. 由sessionfactory 产生 session
3. 在session 中完成对数据的增删改查和事务提交等.
4. 在用完之后关闭session 。
5. 在Java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
3,mybatis和JDBC的比较
02【掌握】mybatis入门配置
下载
https://github.com/mybatis/mybatis-3/releases
https://github.com/mybatis/mybatis-3/tags
解压及文件说明
mybatis-xxx.jar是mybatis的核心 jar包
lib里面是辅助jar包
代理包
日志处理包
ognl包
ant包
准备数据库
创建项目
导包
创建db.properties
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test
username=root
password=123456
创建mybatis.cfg.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//http://mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置 -->
<configuration>
<!-- 解析db.properties -->
<properties resource="db.properties"></properties>
<!-- 环境集合 default 默认使用的数据源 -->
<environments default="mybatis">
<environment id="mybatis">
<!--事务管理器 使用JDBC的事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据源 type类型 -->
<dataSource type="POOLED">
<property name="driver" value="${driverClass}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 映射集合 -->
<mappers>
<!-- 代表某一个映射文件 -->
<mapper resource="com/sxt/domain/UserMapper.xml" />
</mappers>
</configuration>
创建User
创建UserMapper.xml
测试
package com.sxt.test;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class TestMain {
public static void main(String[] args) {
SqlSessionFactoryBuilder factoryBuilder=new SqlSessionFactoryBuilder();
InputStream stream=TestMain.class.getClassLoader().getResourceAsStream("mybatis.cfg.xml");
System.out.println(stream);
//1,创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = factoryBuilder.build(stream);
//2,从sqlSessionFactory里面得到sqlSession
SqlSession session = sqlSessionFactory.openSession();
//3,使用sqlSession调用mybatis的api
List<Object> selectList = session.selectList("com.sxt.domain.UserMapper.selectAllUser");
for (Object object : selectList) {
System.out.println(object);
}
}
}
03【掌握】mybatisCRUD
配置日志管理
创建log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 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
创建log4j.properties
创建MyBatisUtils
/**
* 工具类
* @author LJH
*
*/
public class MyBatisUtils {
static SqlSessionFactoryBuilder factoryBuilder=new SqlSessionFactoryBuilder();
static SqlSessionFactory sqlSessionFactory=null;
static{
InputStream stream=TestMain.class.getClassLoader().getResourceAsStream("mybatis.cfg.xml");
System.out.println(stream);
//1,创建sqlSessionFactory
sqlSessionFactory = factoryBuilder.build(stream);
}
/**
* 得到sqlSession
*/
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
/**
* 关闭session
*/
public static void close(SqlSession session) {
session.close();
}
}
创建UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//http://mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxt.domain.UserMapper">
<!-- 添加 -->
<insert id="insertUser" parameterType="com.sxt.domain.User">
insert into user(name,age,email) values(#{name},#{age},#{email})
</insert>
<!-- 修改-->
<update id="updateUser" parameterType="com.sxt.domain.User">
update user set name=#{name},age=#{age},email=#{email} where id=#{id}
</update>
<!-- 删除 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id=#{value}
</delete>
<!-- 查询一个 -->
<select id="queryUserById" resultType="com.sxt.domain.User" parameterType="java.lang.Integer">
select * from user where id=#{value}
</select>
<!-- 全查询 -->
<select id="queryAllUser" resultType="com.sxt.domain.User">
select * from user
</select>
</mapper>
测试
public class TestMain {
public static void main(String[] args) {
// addUser(new User("小明", 22, "123131231@qq.com"));
// updateUser(new User(13, "小张", 18, "88888@zlh.com"));
// deleteUser(12);
// User user = queryUserById(13);
// System.out.println(user);
List<User> list = queryAllUser();
for (User user : list) {
System.out.println(user);
}
}
/**
* 添加
*/
public static void addUser(User user) {
// 1,得到session
SqlSession sqlSession = MyBatisUtils.getSqlSession();
// 2,调用API执行添加
// sqlSession.insert("com.sxt.domain.UserMapper.insertUser");//如果数据在sql里面定死了就可以使用
sqlSession.insert("com.sxt.domain.UserMapper.insertUser", user);
// 3,提交事务
sqlSession.commit();
// 4,关闭session
sqlSession.close();
}
/**
* 修改
*/
public static void updateUser(User user) {
// 1,得到session
SqlSession sqlSession = MyBatisUtils.getSqlSession();
// 2,调用API执行添加
// sqlSession.update("com.sxt.domain.UserMapper.insertUser");//如果数据在sql里面定死了就可以使用
sqlSession.update("com.sxt.domain.UserMapper.updateUser", user);
// 3,提交事务
sqlSession.commit();
// 4,关闭session
sqlSession.close();
}
/**
* 删除
*/
public static void deleteUser(Integer id) {
// 1,得到session
SqlSession sqlSession = MyBatisUtils.getSqlSession();
// 2,调用API执行添加
// sqlSession.delete("com.sxt.domain.UserMapper.insertUser");//如果数据在sql里面定死了就可以使用
sqlSession.delete("com.sxt.domain.UserMapper.deleteUser", id);
// 3,提交事务
sqlSession.commit();
// 4,关闭session
sqlSession.close();
}
/**
* 查询一个
*/
public static User queryUserById(Integer id) {
// 1,得到session
SqlSession sqlSession = MyBatisUtils.getSqlSession();
// 2,调用API执行添加
Object one = sqlSession.selectOne("com.sxt.domain.UserMapper.queryUserById", id);
// ,关闭session
sqlSession.close();
return (User) one;
}
/**
* 全查询
*/
public static List<User> queryAllUser() {
// 1,得到session
SqlSession sqlSession = MyBatisUtils.getSqlSession();
// 2,调用API执行添加
List<User> list= sqlSession.selectList("com.sxt.domain.UserMapper.queryAllUser");
// ,关闭session
sqlSession.close();
return list;
}
}
04【掌握】mybatisCRUD使用代理模式
创建UserMapper
创建UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//http://mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 如果使用代理那么namespace必须UserMapper接口的完全限定名-->
<mapper namespace="com.sxt.dao.UserMapper">
<!-- 添加 -->
<insert id="insertUser" parameterType="com.sxt.domain.User">
insert into user(name,age,email) values(#{name},#{age},#{email})
</insert>
<!-- 修改-->
<update id="updateUser" parameterType="com.sxt.domain.User">
update user set name=#{name},age=#{age},email=#{email} where id=#{id}
</update>
<!-- 删除 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id=#{value}
</delete>
<!-- 查询一个 -->
<select id="queryUserById" resultType="com.sxt.domain.User" parameterType="java.lang.Integer">
select * from user where id=#{value}
</select>
<!-- 全查询 -->
<select id="queryAllUser" resultType="com.sxt.domain.User">
select * from user
</select>
</mapper>
创建mybatis.cfg.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//http://mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置 -->
<configuration>
<!-- 解析db.properties -->
<properties resource="db.properties"></properties>
<!-- 配置日志输出形式 -->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- 环境集合 default 默认使用的数据源 -->
<environments default="mybatis">
<environment id="mybatis">
<!--事务管理器 使用JDBC的事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据源 type类型 -->
<dataSource type="POOLED">
<property name="driver" value="${driverClass}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 映射集合 -->
<mappers>
<!-- 代表某一个映射文件 -->
<mapper resource="com/sxt/dao/UserMapper.xml" />
</mappers>
</configuration>
测试
04【掌握】核心配置文件详解
mybatis.cfg.xml
<configuration>
<!--environments 指mybatis可以配置多个环境 default指向默认的环境
每个SqlSessionFactory对应一个环境environment
-->
<environments default="development">
<environment id="development">
<!-- JDBC – 这个配置直接使用JDBC 的提交和回滚功能。它依赖于从数据源获得连接来管理
事务的生命周期。
• MANAGED – 这个配置基本上什么都不做。它从不提交或者回滚一个连接的事务。而是让
容器(例如:Spring 或者J2EE 应用服务器)来管理事务的生命周期
-->
<transactionManager type="JDBC"/>
<!--
数据源类型:
UNPOOLED – 这个类型的数据源实现只是在每次需要的时候简单地打开和关闭连接。
POOLED – 这个数据源的实现缓存了JDBC 连接对象,用于避免每次创建新的数据库连接时都初始
化和进行认证,加快程序响应。并发WEB 应用通常通过这种做法来获得快速响应。
JNDI – 这个数据源的配置是为了准备与像Spring 或应用服务器能够在外部或者内部配置数据
源的容器一起使用,然后在JNDI 上下文中引用它
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 定义映射SQL语句文件。 -->
<mapper resource="cn/sxt/entity/UserMapper.xml"/>
</mappers>
</configuration>
别名的优化
参数类型优化
雷哥真理:在mybatis的xxxxMapper.xml里面所有的parameterType都可以不写
05【掌握】XyzMapper.xml详解
DML数据操作语言
DDL 数据定义语言
DCL 数据控制语言
DQL 数据查询语言
mapper
Mapper :定义了对应的数据库操作的语句,完成对数据库的不同操作进隔离(区分)
Namespace属性=“自定义”
注意:同一个命令空间里面的子节点ID不能重复
要不然报
select
存放查询的sql
<select id="queryAllUser" resultType="com.sxt.domain.User">
select id as uid ,name as uname,age as uage,email as uemail from user
</select>
相关属性
resultType 代表sql之后完成之对应的方法的返回值的类型
如果返回的是单个对象就直接是方法的返回值类型User
如果返回的是多个对象就是方法返回值类型的集合里面的数据类型List<User>
timeout:执行sql的超时时间
resultMap:见下面
ResultMap
当sql执行出来的子段和自定义类型里面的属性名不对应时,就要使用ResulstMap让两个不同名称的值有关系
insert
parameterType 方法的参数类型 可以不写
update
delete
占位符
# 代表使用PreparedStatement
$ 代表使用Statement
delete from user where name =?
delete from user where name ="(delete from user)"
06【掌握】模糊查询
like
对参数值进行改造
UserMapper
UserMapper.xml
测试
使用${不推荐}
UserMapper
UserMapper.xml
测试
使用#{推荐}
UserMapper
UserMapper.xml
测试
使用CONCAT函数【低版本的mybatis里面推荐】
UserMapper
UserMapper.xml
测试
使用BIND
UserMapper
UserMapper.xml
测试
07【掌握】分页的实现
分页语法
int currentPage=1
int pageSize=10;
mysql
select * from 表名 limit (currentPage-1)*pageSize,pageSize;
oracle --rownum
SELECT T1.* FROM
(SELECT ROWNUM AS RN,T1.* FROM
(select * from 表名 where 条件 order by 字段名 ) T1 WHERE
ROWNUM<pageSzie*currentPage ) T2
WHERE T2.RN> (currentPage-1)*pageSize
方法1
UserMapper
UserMapper.xml
测试
方法2 RowBounds
UserMapper
UserMapper.xml
测试
08【掌握】阿里的分页插件
下载
pageheper
http://central.maven.org/maven2/com/github/pagehelper/pagehelper/5.1.8/
jsqlparser
http://central.maven.org/maven2/com/github/jsqlparser/jsqlparser/1.3/
导入jar包
创建UserMapper
创建UserMapper.xml
修改mybatis.cfg.xml配置插件
测试
10【掌握】SQL片段
作用:提高sql的复用度
11【掌握】动态sql
where
if
choose (when, otherwise)
foreach
set
trim
12【掌握】关联表的处理
join
准备工作
创建数据库
创建Emp
创建EmpMapper
创建EmpMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//http://mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 如果使用代理那么namespace必须UserMapper接口的完全限定名 -->
<mapper namespace="com.sxt.dao.EmpMapper">
<select id="queryAllEmp" resultType="com.sxt.domain.Emp">
select * from sys_emp
</select>
</mapper>
创建Dept
创建DeptMapper
创建DeptMapper.xml
修改mybatis.cfg.xml
2,处理多对一的关系[查员工的同时查询部门信息]
实现方式1给Emp加属性
修改Emp
修改EmpMapper.xml
测试
实现方式2使用ResultMap
修改Emp
修改EmpMapper.xml
实现方式3使用ResultMap另一种办法
EmpMapper.xml
DeptMapper
DeptMapper.xml
3,处理一对多的关系[查部门同时查询员工信息]
查询方式1ReslutMap
修改Dept
修改DeptMapper
修改DeptMapper.xml
测试
查询方式2ReslutMap
修改DeptMapper.xml
修改EmpMapper.xml
测试
13【掌握】使用注解实现mybatis
实现单表的CRUD
创建User
创建UserMapper
public interface UserMapper {
@Insert(value="insert into user(name,age,email) values(#{name},#{age},#{email})")
public void insertUser(User user);
@Update(value="update user set name=#{name},age=#{age},email=#{email} where id=#{id}")
public void updateUser(User user);
@Delete(value="delete from user where id=#{value}")
public void deleteUser(Integer id);
@Select(value="select * from user where id=#{value}")
public User queryUserById(Integer id);
@Select("select * from user")
public List<User> queryAllUser(User user);
}
修改mybatis.cfg.xml
测试
实现多对一
创建EmpMapper
public interface EmpMapper {
// @Select("select * from sys_emp")
// @Select(value="select * from sys_emp")
@Select(value="select * from sys_emp inner join sys_dept using(deptid)")
// @Results(value= {
// @Result(property="empid",column="empid",id=true),
// @Result(property="empname",column="empname"),
// @Result(property="sex",column="sex"),
// @Result(property="age",column="age"),
// @Result(property="hiredate",column="hiredate"),
// @Result(property="dept",javaType=Dept.class,column="deptid",one=@One(
// select="com.sxt.dao.DeptMapper.queryDeptByDeptId"
// ))
// })
@ResultMap(value="BaseResultMap2")
public List<Emp> queryAllEmp();
}
创建EmpMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//http://mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 如果使用代理那么namespace必须UserMapper接口的完全限定名 -->
<mapper namespace="com.sxt.dao.EmpMapper">
<resultMap type="com.sxt.domain.Emp" id="BaseResultMap">
<id property="empid" column="empid" />
<result property="empname" column="empname" />
<result property="sex" column="sex" />
<result property="age" column="age" />
<result property="hiredate" column="hiredate" />
<!-- 设置Emp类里面的dept属性的关联方式 property代表Emp里面的属性名 javaType代表Emp里面dept的类型 -->
<association property="dept" column="deptid"
javaType="com.sxt.domain.Dept"
select="com.sxt.dao.DeptMapper.queryDeptByDeptId">
</association>
</resultMap>
<resultMap type="com.sxt.domain.Emp" id="BaseResultMap2">
<id property="empid" column="empid" />
<result property="empname" column="empname" />
<result property="sex" column="sex" />
<result property="age" column="age" />
<result property="hiredate" column="hiredate" />
<!-- 设置Emp类里面的dept属性的关联方式 property代表Emp里面的属性名 javaType代表Emp里面dept的类型 -->
<association property="dept"
javaType="com.sxt.domain.Dept">
<id property="deptid" column="deptid" />
<result property="deptname" column="deptname" />
<result property="deptremark" column="deptremark" />
</association>
</resultMap>
</mapper>
创建DeptMapper
创建DeptMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//http://mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxt.dao.DeptMapper">
<select id="queryDeptByDeptId" resultType="com.sxt.domain.Dept">
select * from sys_dept
where deptid=#{value}
</select>
</mapper>
实现一对多
修改DeptMapper
public interface DeptMapper {
public Dept queryDeptByDeptId(Integer deptid);
// @Select("select * from sys_dept")
@Select("select * from sys_dept left join sys_emp using(deptid)")
// @Results(value={
// @Result(property="deptid",column="deptid",id=true),
// @Result(property="deptname",column="deptname"),
// @Result(property="deptremark",column="deptremark"),
// @Result(property="emps",column="deptid",javaType=HashSet.class,many=@Many(
// select="com.sxt.dao.EmpMapper.queryEmpsByDeptId"))
// })
@ResultMap(value="BaseResultMap")
public List<Dept> queryAllDept();
}
修改DeptMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//http://mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxt.dao.DeptMapper">
<select id="queryDeptByDeptId" resultType="com.sxt.domain.Dept">
select * from sys_dept
where deptid=#{value}
</select>
<resultMap type="com.sxt.domain.Dept" id="BaseResultMap">
<id property="deptid" column="deptid" />
<result property="deptname" column="deptname" />
<result property="deptremark" column="deptremark" />
<!--
property指com.sxt.domain.Dept里面emps的属性
javaType指emps属性的类型
ofType:指emps里面存放的数据类型
-->
<collection property="emps" javaType="java.util.HashSet" ofType="com.sxt.domain.Emp">
<id property="empid" column="empid" />
<result property="empname" column="empname" />
<result property="sex" column="sex" />
<result property="age" column="age" />
<result property="hiredate" column="hiredate" />
</collection>
<!-- <collection property="emps" javaType="java.util.HashSet" ofType="com.sxt.domain.Emp"
select="com.sxt.dao.EmpMapper.queryEmpsByDeptId" column="deptid" >
</collection> -->
</resultMap>
</mapper>
修改EmpMapper.xml
<!-- 根据部门ID查询员信息 -->
<select id="queryEmpsByDeptId" resultType="com.sxt.domain.Emp">
select * from sys_emp where deptid=#{value}
</select>
14【掌握】缓存
一级缓存【默认开启】
缓存范围为sqlSession
二级缓存【要手动开启】
缓存范围为sqlSessionFactory
15【熟悉】mybatis和Hibernate的比较
hibernate的特点
映射关系 实体类和属性名和数据表的字段名去映射
hibernate不能写sql语句 纯面向对象 但要写hql语句
数据库sys_user
select * from sys_user
User ----sys_user
from User
hibernate的速度相对慢一点
hibernate crud
save(user)
mybatis的特点
映射关系 实体类和属性名和查询结果的字段名去映射
Mybatis 半自动化模式操作数据,hibenate完全面向对象操作数据
Mybatis运行的性能高于hibernate的性能
Mybatis开发速度低于hibernate的开发速度
Mybatis应用在互联网项目的开发,Hibernate用在传统的MIS系统开发
16【掌握】mybatis逆向工程
http://central.maven.org/maven2/org/mybatis/generator/mybatis-generator-core/1.3.7/
1,什么是逆向工程
MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po..)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。
2,使用逆向工程
使用MyBatis的逆向工程,需要导入逆向工程的jar包,我用的是mybatis-generator-core-1.3.2.jar,下面开始总结一下MyBatis逆向工程的使用步骤。
3,创建项目并导包
、
4,配置xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//http://mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 数据库驱动 -->
<classPathEntry location="lib/mysql-connector-java-5.1.20-bin.jar" />
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true" />
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/test" userId="root" password="123456">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal 主要是针对oracle数据库-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator targetPackage="com.sxt.domain"
targetProject="src">
<property name="enableSubPackages" value="true" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成映射文件的包名和位置 -->
<sqlMapGenerator targetPackage="com.sxt.mapper"
targetProject="src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.sxt.mapper" targetProject="src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名 -->
<table tableName="sys_user" domainObjectName="User"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
4,创建生成类
public class TestGenerator {
public static void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指定 逆向工程配置文件
File configFile = new File("xml/config4.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);
}
public static void main(String[] args) throws Exception {
generator();
System.out.println("生成完成,请刷新项目");
}
}