mybatis
-
orm框架
- 对象映射关系
-
操作
- connect
- preparestatement
- resultset
JDBC
public class JdbcTest {
public void testJdbc() {
String url = "jdbc:mysql://localhost:3306/xxx";
String u
Connection conn = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(url);
String author = "coolblog.xyz";
String date = "2018.06.10";
String sql = "SELECT id, title, author, content, create_time" + " FROM article" + " WHERE author = '" + author
+ "' AND create_time > '" + date + "'";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
List<Article> articles = new ArrayList<>(rs.getRow());
while (rs.next()) {
Article article = new Article();
article.setId(rs.getInt("id"));
article.setTitle(rs.getString("title"));
article.setAuthor(rs.getString("author"));
article.setContent(rs.getString("content"));
article.setCreateTime(rs.getDate("create_time"));
articles.add(article);
}
System.out.println("Query SQL ==> " + sql);
System.out.println("Query Result: ");
articles.forEach(System.out::println);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
项目搭建
依赖
<!--mybatis核心-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.3</version>
</dependency>
<!--junit测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.1.2</version>
<scope>test</scope>
</dependency>
<!--log4j日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
配置文件
- resources/mybtais-config.xml
- 数据库源
- driver
- url
- username
- password
- 数据库源
<?xml version="1.0" encoding="UTF-8 ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Cofing 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 引入本地配置文件-->
<properties resource="jdbc.properties" />
<!-- mybatis全局配置-->
<settings>
<!-- 下划线自动映射为驼峰 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
<!--设置类型别名-->
<typeAliases>
<!-- mapper内的resultType可以使用别名替换-->
<typeAlias type="xxx.xxx.pojo.User" alias="User"></typeAlias>
<!--以包为单位设置默认别名-->
<package name="xxx.xxx.pojo"/>
</typeAliases
<!-- environments:配置多个连接数据库环境
default:设置默认环境id
-->
<environments default="development">
<!-- environment:配置某个具体连接数据库环境
id:环境唯一标识
-->
<environment id="development">
<!-- transactionManager 设置事务管理方式
type:"JDBC|MANAGED"
JDBC:原生jdbc的事务管理方式,事务提交或回滚需要手动处理
MANAGED:被管理(如spring)
-->
<transactionManager type="JDBC"/>
<!-- dataSource 设置数据源
type:"POOLED|UNPOOLED|JNDI"
POOLED:使用数据库连接池缓存数据库连接
UNPOOLED:不使用数据库连接池
JNDI:表示使用上下文中的数据源
-->
<dataSource type="POOLED">
<property name="dirver" value=${jdbc.dirver}/>
<property name="url" value=${jdbc.url}/>
<property name="username" value=${jdbc.username}/>
<property name="password" value=${jdbc.password}/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="dirver" value=${jdbc.dirver}/>
<property name="url" value=${jdbc.url}/>
<property name="username" value=${jdbc.username}/>
<property name="password" value=${jdbc.password}/>
</dataSource>
</environment>
</environments>、
<!-- 引入映射文件-->
<mappers>
<!-- <mapper resource="mappers/UserMapper.xml"> -->
<!-- 引入包内的映射文件,mapper接口与映射文件 包名 和 文件名 需要都一致-->
<package name="mappers"/>
</mappers>
</configuration>
- resources/jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/xxx
jdbc.password=xxx
jdbc.username=xxx
mapper接口
- xxx.xxx.mapper
public interface UserMapper{
// 添加用户
int insertUser();
// 修改用户
void updateUser();
// 删除用户
void deleteUser();
// 查询
User getUserById();
List<User> getAllUser();
}
- xxx.xxx.pojo
public class User{
private Integer id;
private String username;
private String password;
private Integer age;
private String sex;
private String email;
// set get
}
映射文件
- resources/mappers/UserMapper.xml
- 执行语句
- select
- insert
- update
- delete
- 执行语句
<? xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.xxx.UserMapper">
<insert id="insertUser">
insert into user values(null,'admin','123456',23,'男','xxxx@qq.com')
</insert>
<update id="updateUser">
update user set username= 'xxx' whrere id = '4'
</update>
<delete id="deleteUser">
delete from user whrere id = '5'
</delete>
<select id="getUserById" resultType="xxx.xxx.pojo.User">
select * from user whrere id = '3'
</select>
<select id="getAllUser" resultType="xxx.xxx.pojo.User">
select * from user
</select>
</mapper>
测试
- test
public class MyBatisTest{
@Test
public void testInsert1(){
// 加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(s);
SqlSession sqlSession = sqlSessionFactory.openSession();
// 获取mapper接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 测试
int result = mapper.insetUser();
// 提交事务
sqlSession.commit();
System.out.println("result:"+result);
}
@Test
public void testInsert2(){
// 加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(s);
// 默认不自动提交事务,sqlSessionFactory.openSession(true)自动提交事务
SqlSession sqlSession = sqlSessionFactory.openSession(true);
// 获取mapper接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 测试
int result = mapper.insetUser();
System.out.println("result:"+result);
}
@Test
public void testUpdate(){
// 加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(s);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
// 获取mapper接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 测试
mapper.updateUser();
System.out.println("执行成功");
}
@Test
public void testDelete(){
// 加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(s);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
// 获取mapper接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 测试
mapper.deleteUser();
System.out.println("执行成功");
}
@Test
public void testSelect(){
// 加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(s);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
// 获取mapper接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 测试
User user = mapper.getUserById();
System.out.println(user);
}
}
添加日志
- resources/log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug"/>
</logger>
<logger name="org.apache.ibatis">
<level value="info"/>
</logger>
<root>
<level value="debug"/>
<appender-ref ref="STDOUT"/>
</root>
</log4j:configuration>
获取参数
- ${}
- 字符串拼接
- #{}
- 占位符
单个参数
// interface
User getUserByName(String username);
<select id="getUserByName" resultType="xxx.xxx.pojo.User">
select * from user where username = #{username}
</select>
User user = mapper.getUserByName("admin");
多个参数
方法一
// interface
User checkLogin(@Param("username")String username,@Param("password")String password);
<select id="checkLogin" resultType="xxx.xxx.pojo.User">
select * from user
where username = #{username}
and password = #{password}
</select>
User user = mapper.checkLogin("admin","123456");
方法二
// interface
User checkLoginByMap(Map<String,Object> map);
<select id="checkLoginByMap" resultType="xxx.xxx.pojo.User">
select * from user
where username = #{username}
and password = #{password}
</select>
Map<String,Object> map = new HashMap<>();
map.put("username","admin");
map.put("password","123456");
User user = mapper.checkLoginByMap(map);
方法三
// interface
User insertUser(User user);
<insert id="insertUser">
insert into user valuse(null,#{username},#{password},#{age},#{sex},#{email})
</insert>
User user = new User();
user.setUsername("admin");
user.setPassword("123456");
user.setAge(12);
user.setSex("男");
user.setEmail("xxx@qq.com");
User user = mapper.insertUser(user);
获取自增主键
<insert id="insertUser" userGeneratedKeys="true" keyProperty="id">
insert into user valuse(null,#{username},#{password},#{age},#{sex},#{email})
</insert>
自定义映射resultMap
- xxx.xxx.pojo.Emp
public class Emp{
private Integer eid;
private String empName;
private Integer age;
private String sex;
private String email;
private Dept dept;
// set get
}
- xxx.xxx.pojo.Dept
public class Dept{
private Integer did;
private String deptName;
// set get
}
- xxx.xxx.mapper.EmpMapper
public interface EmpMapper{
List<Emp> getAllEmp();
}
- resources/mapper/EmpMapper.xml
<? xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.xxx.mapper.EmpMapper">
<resultMap id="empResultMap" type="xxx.xxx.pojo.Emp">
<id property="eid" column="eid"></id>
<result property="empName" column="emp_name"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
<result property="email" column="email"></result>
</resultMap>
<select id="getAllEmp" resultMap="empResultMap">
select * from emp
</select>
</mapper>
多对一映射
- xxx.xxx.mapper.EmpMapper
public interface EmpMapper{
Emp getEmpAndDept(@Param("eid")Integer id);
// 分步查询(第一步)
Emp getEmpAndDeptByStepOne(@Param("eid")Integer id);
}
- resources/mapper/EmpMapper.xml
<? xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.xxx.mapper.EmpMapper">
<!--多对一映射关系-->
<resultMap id="empAndDeptResultMapOne" type="xxx.xxx.pojo.Emp">
<id property="eid" column="eid"></id>
<result property="empName" column="emp_name"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
<result property="email" column="email"></result>
<result property="dept.did" column="did"></result>
<result property="dept.deptName" column="dept_name"></result>
</resultMap>
<!--多对一映射关系-->
<resultMap id="empAndDeptResultMapTwo" type="xxx.xxx.pojo.Emp">
<id property="eid" column="eid"></id>
<result property="empName" column="emp_name"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
<result property="email" column="email"></result>
<association property="dept" javaType="xxx.xxx.pojo.Dept">
<id property="did" column="did"></id>
<result property="deptNmae" column="dept_name"></result>
</association>
</resultMap>
<!--多对一映射关系,分步查询-->
<resultMap id="empAndDeptResultMapThree" type="xxx.xxx.pojo.Emp">
<id property="eid" column="eid"></id>
<result property="empName" column="emp_name"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
<result property="email" column="email"></result>
<!--fetchType :开启了延迟加载后,通过手动控制是否延迟加载
lazy|eager: lazy:延迟加载;eager:立即加载
-->
<association property="dept"
column="did"
fetchType="eager"
select="xxx.xxx.mapper.DeptMapper.getEmpAndDeptByStepTwo"></association>
</resultMap>
<select id="getEmpAndDept" resultMap="empAndDeptResultMapOne">
select * from emp
left join dept on dept.did = emp.did
where emp.eid=#{eid}
</select>
<select id="getEmpAndDeptByStepOne" resultMap="empAndDeptResultMapThree">
select * from emp
where emp.eid=#{eid}
</select>
</mapper>
- xxx.xxx.mapper.DeptMapper
public interface DeptMapper{
// 分步查询(第二步)
Dept getEmpAndDeptByStepTwo(@Param("did")Integer did);
}
- resources/mapper/DeptMapper.xml
<? xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.xxx.mapper.DeptMapper">
<resultMap id="deptResultMap" javaType="xxx.xxx.pojo.Dept">
<id property="did" column="did"></id>
<result property="deptNmae" column="dept_name"></result>
</resultMap>
<select id="getEmpAndDeptByStepTwo" resultMap="deptResultMap">
select * from dept
where did=#{did}
</select>
</mapper>
一对多
- xxx.xxx.pojo.Dept
public class Dept{
private Integer did;
private String deptName;
private List<EMP> emps;
// set get
}
public interface DeptMapper{
Dept getDeptAndEmp(@Param("did")Integer did);
// 分布查询(第一步)
Dept getDeptAndEmpByStepOne(@Param("did")Integer did);
}
- resources/mapper/DeptMapper.xml
<? xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.xxx.mapper.DeptMapper">
<resultMap id="deptAndEmpResultMap" javaType="xxx.xxx.pojo.Dept">
<id property="did" column="did"></id>
<result property="deptNmae" column="dept_name"></result>
<collection property="emps" ofType="xxx.xxx.pojo.Emp">
<id property="eid" column="eid"></id>
<result property="empName" column="emp_name"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
<result property="email" column="email"></result>
</collection>
</resultMap>
<resultMap id="deptAndEmpResultMapTwo" javaType="xxx.xxx.pojo.Dept">
<id property="did" column="did"></id>
<result property="deptNmae" column="dept_name"></result>
<collection property="emps"
select="xxx.xxx.mapper.EmpMapper.getDeptAndEmpByStepTwo"
column="did">
</collection>
</resultMap>
<select id="getDeptAndEmp" resultMap="deptAndEmpResultMap">
select * from dept
left join emp on dept.did=emp.did
where dept.did=#{did}
</select>
<select id="getDeptAndEmpByStepOne" resultMap="deptAndEmpResultMapTwo">
select * from dept
where dept.did=#{did}
</select>
</mapper>
- xxx.xxx.mapper.EmpMapper
public interface EmpMapper{
// 分步查询(第二步)
List<Emp> getDeptAndEmpByStepTwo(@Param("did")Integer did);
}
- resources/mapper/EmpMapper.xml
<? xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.xxx.mapper.EmpMapper">
<!--多对一映射关系-->
<resultMap id="empAndDeptResul" type="xxx.xxx.pojo.Emp">
<id property="eid" column="eid"></id>
<result property="empName" column="emp_name"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
<result property="email" column="email"></result>
</resultMap>
<select id="getDeptAndEmpByStepTwo" resultMap="empAndDeptResul">
select * from emp
where emp.did=#{did}
</select>
</mapper>
动态sql
if
public interface DynamicSQLMapper{
// 多条件查询
List<Emp> getEmpByCondition(Emp emp);
}
<? xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.xxx.mapper.DynamicSQLMapper">
<select id="getEmpByCondition" resultType="Map">
select * from emp where 1=1
<if test="empName!=null and empName!=''">
and emp_name=#{empName}
</if>
<if test="age!=null and age != ''">
and age = #{age}
</if>
<if test="sex!=null and sex != ''">
and sex = #{sex}
</if>
<if test="email!=null and email != ''">
and email = #{email}
</if>
</select>
</mapper>
where
<? xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.xxx.mapper.DynamicSQLMapper">
<select id="getEmpByCondition" resultType="Map">
select * from emp
<where>
<if test="empName!=null and empName!=''">
and emp_name=#{empName}
</if>
<if test="age!=null and age != ''">
and age = #{age}
</if>
<if test="sex!=null and sex != ''">
and sex = #{sex}
</if>
<if test="email!=null and email != ''">
and email = #{email}
</if>
</where>
</select>
</mapper>
trim
<? xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.xxx.mapper.DynamicSQLMapper">
<select id="getEmpByCondition" resultType="Map">
select * from emp
<!--prefix suffix suffixOverrides prefixOverrides-->
<trim prefix="where" suffixOverrides="and|or" >
<if test="empName!=null and empName!=''">
emp_name=#{empName} and
</if>
<if test="age!=null and age != ''">
age = #{age} and
</if>
<if test="sex!=null and sex != ''">
sex = #{sex} and
</if>
<if test="email!=null and email != ''">
email = #{email} and
</if>
</trim>
</select>
</mapper>
chose&when&otherwise
<? xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.xxx.mapper.DynamicSQLMapper">
<select id="getEmpByCondition" resultType="Map">
select * from emp
<where>
<chose>
<when test="empName!=null and empName!=''">
emp_name=#{empName}
</when>
<when test="age!=null and age != ''">
age = #{age}
</when>
<when test="sex!=null and sex != ''">
sex = #{sex}
</when>
<when test="email!=null and email != ''">
email = #{email}
</when>
<otherwise>
did = 1
</otherwise>
</chose>
</where>
</select>
</mapper>
foreach
int deleteMoreByArray(@Param("eids")Integer[] eids);
<? xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.xxx.mapper.DynamicSQLMapper">
<select id="deleteMoreByArray" resultType="Map">
delete from emp
where eid in
<!--open close-->
<foreach collection="eids" item="eid" separator="," open="(" close=")">
#{eid}
</foreach>
</select>
</mapper>
sql
<? xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.xxx.mapper.DynamicSQLMapper">
<sql id="empSql">
emp.emp_name,
emp.age,
emp.sex,
emp.age
</sql>
<!--在sql内直接引用-->
<!--<include refix="empSql" ></include>-->
</mapper>
缓存
一级缓存
- 范围
- sqlsession
- 失效情况
- 不同sqlSession
- 查询条件不同
- 两次查询期间执行过增删改操作
- 手动清空缓存
- sqlSession.clearCache();
二级缓存
- 范围
- sqlSessionFactory
- 开启条件
- 全局配置 中cacheEnable=“true”,默认就是true
- 映射文件设置
- SqlSession关闭或提交后才生效
- sqlSession.close()
- 查询的数据转换为实体类必须实现序列化接口
- 失效情况
- 两次查询期间执行过增删改操作
- 配置
- mapper中标签:cache
- evicate:缓存回收策略
- LRU:最近最少使用,默认
- FIFO:先进先出
- SOFT:软引用
- WEAK:弱引用
- flushInterval:刷新时间,毫秒
- size:引用数目,缓存对象数目
- readOnly:只读true/false,通过缓存查询的数据是否可以修改,默认false
- evicate:缓存回收策略
- mapper中标签:cache
- 查询顺序
- 先查二级缓存
- 没有命中二级缓存,再查一级缓存
- 一级没有命中,再查数据库
- sqlSession关闭后一级缓存转入二级缓存
第三方缓存EHCache
- pom.xml
<!--mybatis-ehche整合包-->
<dependency>
<groupId>org.mybatis.cahces</groupId>
<arifactId>mybatis-ehcache</artifactId>
<version>1.2.1</version>
</dependency>
<!--slf4j日志门面具体实现-->
<dependency>
<groupId>ch.qos.logback</groupId>
<arifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
- ehcache.xml
<?xml version="1.0" encoding="UTF-8" ?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<!--磁盘保存路径-->
<diskStore path="D:\xx\xx"/>
<defaultCache
maxElementsInMemory="1000"
maxElementsOnDisk="10000000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
</defaultCache>
</ehcache>
- 在mapper中配置
<cahce type="org.mybatis.caches.ehcache.EhcacheCache">
- logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="true">
<!--指定日志输出位置-->
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--日志输出格式-->
<!--时间 日志级别 打印日志类 日志内容 换行-->
<pattern>[%d{HH:MM:SS.sss}] [%-5level] [%thread] [%logger] [%msg]%n</pattern>
</encoder>
</appender>
<!--设置全局日志级别:DEBUGE INFO WARN ERROR-->
<!--指定任何一个日志级别都只打印当前级别和后面级别的日志-->
<root level="DEBUG">
<!--指定打印日志的appender 这里通过STDOUT引用前面配置的appender-->
<appender-ref ref="STDOUT" />
</root>
<!--根据特殊需求指定局部日志级别-->
<logger name="xxx.xxx.mapper" level="DEBUG"/>
</configuration>
逆向工程
- pom.xml
<build>
<!--构建过程用到的插件-->
<plugins>
<!--具体插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.0</version>
<!--插件依赖-->
<dependencies>
<!--逆向工程核心依赖-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<!--数据库连接池-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.3</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
- generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generationConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--tragetRuntimeL执行生成的逆向工程版本
Mybatis3Simple:生成基本CRUD
Mybatis3:生成带条件的CRUD-->
<context id="DB2Tables" targetRuntime="MyBatis3Simple">
<!--数据库连接信息-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/xxx"
userId="xxx"
password="xxx">
</jdbcConnection>
<!--javaBean生成策略-->
<javaModelGenerator targetPackage="xxx.xxx.mybatis.pojo" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true">
<property name="trimStrings" value="true">
</javaModelGenerator>
<!--sql映射文件生成策略-->
<sqlMapGenerator targetPackage="mybatis.mapper" targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true">
</javaModelGenerator>
<!--mapper接口生成策略-->
<sqlMapGenerator type="XMLMAPPER" targetPackage="xxx.xxx.mapper" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true">
</javaModelGenerator>
<!--逆向分析的表-->
<!--tableName设置为*,可以生成所有表,不屑domainObjectName-->
<table tableName="emp" domainObjectName="Emp">
<table tableName="dept" domainObjectName="Dept">
</context>
</generatorConfiguration>
分页
- pom.xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehepler</artifactId>
<version>5.2.0</version>
</dependency>
- mybatis-config.xml
<plugins>
<!--设置分页插件-->
<plugin interceptor="com.github.pagehlper.PageInterceptor"></plugin>
</plugins>
// limit index,pageSize
// index:当前页起始索引
// pageSize:当前页条数
// pageNum:当前页页码
// index = (pageNum-1)*pageSize
// 查询之前,开启分页
PageHelper.startPage(pageNum,pageSize);
List<Emp> list = mapper.selectByExample(null);
PageInfo<Emp> page = new PageInfo<Emp>(list,5);