- Mybatis连接池提供了三种方式的配置
- 配置的位置:主配置文件SqlMapConfig.xml中的dataSources标签,type属性就是表示采用何种连接池方式
- type属性的取值
- POOLED 采用传统的javax.sql.DataSource规范中的连接池,Mybatis中有针对规范的实现
- UNPOOLED 采用传统的获取连接的方式,虽然也实现了javax.sql.DataSource接口,但是并没有使用池的思想
- JNDI 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。注意:如果不是web或者maven的war工程,是不能使用的。
- tomcat服务器采用的连接池是jdbp连接池
- POOLED和UNPOOLED的区别
-
POOLED每次从连接池获取一个连接
-
UNPOOLED每次创建一个新的连接
-
事务
- 面试:
- 什么是事务?
- 事务的四大特性ACID
- 不考虑隔离会产生的三个问题
- 四种隔离级别
- 它是通过sqlSession对象的commit方法和rollback方法实现事务的提交和回滚
- 面试:
-
动态SQL
- WHERE标签使用
<select id="findUserByContain" parameterType="domain.MybatisUser" resultType="domain.MybatisUser">
select * from mybatisuser
<where>
<if test="username != null">
and username = #{username}
</if>
</where>
</select>
- foreach标签使用
- 包装数据对象 用来包装对象 以方便传递不同的参数
public class QueryVo { private MybatisUser mybatisUser; private List<MybatisUser> list; private List<Integer> ids; public MybatisUser getMybatisUser() { return mybatisUser; } public void setMybatisUser(MybatisUser mybatisUser) { this.mybatisUser = mybatisUser; } public List<MybatisUser> getList() { return list; } public void setList(List<MybatisUser> list) { this.list = list; } public List<Integer> getIds() { return ids; } public void setIds(List<Integer> ids) { this.ids = ids; } }
- foreach标签使用
<select id="findUserInIds" resultType="domain.MybatisUser" parameterType="domain.QueryVo"> select * from mybatisuser <where> <if test="ids != null and ids.size > 0"> <foreach collection="ids" open="and id in (" close=")" item="uid" separator=","> #{uid} </foreach> </if> </where> </select>
- 抽取sql语句】
<sql id="default">
select * from mybatisuser
</sql>
<select id="findUserByContain" parameterType="domain.MybatisUser" resultType="domain.MybatisUser">
<include refid="default"></include>
<where>
<if test="username != null">
and username = #{username}
</if>
</where>
</select>