连接池
1、连接池:
在实际开发中都会使用连接池。因为它可以减少我们获取连接所消耗的时间。
连接池就是用于存储连接的一个容器,这个容器其实就是一个集合对象。但是该集合必须是线程安全的,不能两个线程拿到同一个连接,而且满足队列特性,先进先出。
2、mybatis中的连接池:
mybatis连接池提供了3种配置方式:
配置的位置:
主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式。
type属性的值:
POOLED:采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现;
- 其实是分为空闲池和活动池,首先到空闲池查看,如果空闲池有连接,直接拿出用即可,如果空闲池没有连接了,则去活动池寻找,查看活动池中是否到了最大连接数量,如果活动池也达到了最大连接数量,则判断活动池中哪个连接是最先进来的,则经过系列操作返回这个oldest的连接。
UNPOOLED:采用传统的获取连接的方式,虽然也实现javax.sql.DataSource接口,但是并没有使用池的思想;
JNDI:采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样的;
- 注意:如果不是web或者maven的war工程,是不能使用的。学习时使用的时tomcat服务器,采用的连接池就是dbcp连接池。
MyBatis中的事务
什么是事务
事务的四大特性ACID
不考虑隔离性会产生的3个问题
解决办法:四种隔离级别
它是通过sqlsession对象的commit方法和rollback方法实现事务的提交和回滚
动态SQL
主要是基于XMl配置的动态SQL语句使用,即mappers配置文件中的几个标签。
if标签的使用
1.接口中定义
1 | List<User> findByCondition(User user); |
2.mapper中定义
1 | <select id="findByCondition" resultMap="userMap" parameterType="user"> |
其中: 这条语句中,userName指的是实体类中的属性名, and username = #{userName}这里是将实体类的userName传给数据库的username
3.测试类中测试
1 |
|
where标签的使用
为了简化上面where 1=1的条件拼装,我们可以采用< where >标签来简化开发。
1 | <!--根据传入参数条件查询--> |
foreach标签的使用
用于集合中查询的SQL:select * from user where id in(41,42,45)
通过一个类中传入集合的方法
QueryVo类
1 |
|
1.接口中定义
1 | /** |
2.mapper中定义
1 | <!--根据queryvo中Id集合实现查询用户列表--> |
注意if标签中的内容都是来源于ParameterType参数。
< foreach >标签用于遍历集合,它的属性:
collection:代表要遍历的集合元素,注意编写时不要写#{}
open:代表语句的开始部分
close:代表结束部分
item:代表遍历集合的每个元素,生成的变量名
separator:代表分隔符
3.测试代码
1 |
|
抽取重复的SQL
1.定义
1 | <!--抽取重复的sql语句--> |
2.使用
1 | <!--抽取重复的sql语句--> |
注意: 尽量不要使用分号,SQL语句可能会拼接
注:转载文章请注明出处,谢谢~