一、持久层封装包括JDBC的连接封装和SQL语句的封装,而mybatis只对JDBC进行了封装,是一种半自动的持久层封装。
1、行数据思想,即对象----(映射)----sql语句
2、一些类:(1)、SqlSessionFactory 用于生产SqlSession对象的工厂,SqlSession类即JDBC连接类。
public class DBUtil {
private static SqlSessionFactory sqlSessionFactory;
static{
InputStream in = null;
try {
in = Resources.getResourceAsStream("mybatis.cfg.xml");//从配置文件中读取配置信息,将配置信息读入到输入流中
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//根据工厂的创建类来创建Session工厂
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
(2)、Configuration 配置类----数据源配置信息(写在“mybatis.cfg.xml”里),sql 映射配置信息;
<environments default="first">
<!-- 一个数据源对应一个环境配置 -->
<environment id="first">
<!-- 配置事务管理器,type="JDBC"表示使用JDBC事务处理机制来处理事务,MANAGED表示什么都不干,等待外部容器或者其他应用程序来处理事务 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,type="POOLED"表示使用JDBC连接池;
UNPOOLED表示不使用JDBC连接池,也就是说每次请求就分别对应一个连接 ;
JNDI表示需要依赖外部容器提供连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="tusheng"/>
</dataSource>
</environment>
</environments>
二、mybatis中动态拼接语句:
1、where--if 当需要判断参数的状态时使用,如用户输入查询,可能为空,需要用if标签判断是否为空;
2、foreach 在批量操作时使用,遍历参数集合或数组,批量进行操作;
3、include--SQL 在有好几个SQL语句有相同部分的时候,用SQL标签将重复部分提出来,引用使用include标签的refid属性,值为需要引用SQL标签的ID;
4、set--if 在修改信息需要判断参数状态时使用;
5、trim--if 与where--if用法基本一致;
6、choose--when 等同于Java中的switch--case
三、mybatis缓存
1、缓存可以放置的数据:(1)、数据量小;(2)、数据变化很少;(3)、数据的并发访问较少。
2、分类:缓存对象、缓存SQL查询语句与对象集合的一个map键值对;
3、范围:事务级缓存(一级缓存):通过session维护,基于session生命周期实现;在同一个事务缓存中,每一个持久化类的对象是唯一的。
应用级缓存(二级缓存):由SessionFactory实现,所有用一个SessionFactory创建的session对象共享此缓存。
分布式(集群)缓存:适用于大型项目。
4、在mybatis中使用缓存
(1)、开启缓存机制,要求所有映射器都支持缓存 <settings>
(2)、为需要缓存的.xml映射器配置缓存 <cache/>
(3)、在某个需要缓存的select标签添加useCache属性值为true
(4)、同一个session对象,如果不关闭,那么后续直接从session对象中抽取对象,若关闭一级缓存(即关闭session),数据被推送到SessionFactory里。
(5)、现在一般不使用mybatis的二级缓存。