IDEA版本构建MyBatis
传统
- JDBC->Dbutils(QueryRunner)->jdbcTemplate
- 编写sql、预编译、设置参数、执行sql、封装结果
- 功能简单:sql语句编写在java代码里面,硬编码高耦合的方式
MyBatis干了什么?
- 将sql写在配置文件中(关键步骤)
- MyBatis来预编译、设置参数、执行sql、封装结果
实例
- 创建maven管理的web工程,创建好相关包
- 导入依赖的jar包,利用maven管理jar包
- 编写mybatis配置文件和mapper接口和mapper接口对应的xml文件
- 写一个mybatis工具类,工具类中
- 读取配置文件
- 创建SqlSessionFactory工厂
- 使用工厂生产SqlSession对象
- 使用SqlSession创建的Mapper接口的代理对象
- 使用代理对象的执行方法
- 释放资源
//1. 读取配置文件
InputStream in = Resources.getResourceAsStream("Mybatis-config.xml");
//2. 创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory sessionFactory = builder.build(in);
//3. 使用工厂创建SqlSession对象
SqlSession session = sessionFactory.openSession();
//4. 使用SqlSession创建Mapper接口的代理对象
IUserMapper userMapper = session.getMapper(IUserMapper.class);
//5. 使用代理对象执行方法
List<UserInfo> userInfos = userMapper.findAll();
for (UserInfo userInfo : userInfos) {
System.out.println(userInfo);
}
//6. 释放资源
session.close();
in.close();
EL表达式失效?
<%@ page isELIgnored="false" %>
MyBatis配置文件中需要注意问题
<mappers>
<!--<mapper resource="com/hy/mapper/IUserMapper.xml"/>-->
<package name="com.hy.mapper"/>
</mappers>
MyBatis构建目录结构
- 创键目录
3. 导入依赖坐标
4. 编写Mybatis配置文件
5. 构造一个DButil类
6. 最终目录结构
缓存
-
缓存:
- 指存在于内存中的临时数据
-
缓存的使用场景:
- 适合缓存:经常查询并且不经常改变的,数据结果正确与否对最终结果影响不大的
- 不适合缓存的:经常改变的数据,数据的正常对结果影响很大时,商品的库存,银行的汇率等
-
MyBatis的一级缓存和二级缓存
- 一级缓存:它指的是MyBatis中SqlSession对象的缓存,当执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中,该区域结构时一个Map,当我们再次查询同样的数据,MyBatis会先在SqlSession中查询是否存在,有直接用,当SqlSession对象消失时,MyBatis的一级缓存也消失
- 清除一级缓存:
- sqlSession.close()
- sqlSession.clearCatch()
- 对sqlSession进行修改,添加,删除时都会清空一级缓存
-
二级缓存
- 指的是sqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的多个SqlSession共享其缓存
- 使用二级缓存步骤:
- 让MyBatis框架支持二级缓存(在MyBatis配置文件中)
- 让当前的映射文件支持二级缓存(在mapper.xml中配置)
- 让当前的操作支持二级缓存(在select标签中配置)
连接池
-
实际开发中都会使用连接池
-
使用连接池可以减少我们获取连接所消耗的时间
-
提供了三种配置方式
- 配置位置:Mybatis-config.xml文件中的标签
- 配置属性:type:POOLED、UNPOOLED、DBCP(tomcat服务器中就是这种)
-
连接池是线程安全的,因为底层是synchronized代码块装着
-
MyBatis使用POOLED连接池
事务
-
事务的4大特性
-
不考虑事务隔离性产生的三个问题
-
解决问题的办法,隔离级别
-
Mybatis事务的提交时,可以在session连接时,openSession(boolean true/false)设置自动提交,Mybatis默认是false,因此,设置成true,他就变成自动提交了
-
它是通过sqlsession对象的commit方法和rollback方法实现事务的提交和回滚的