Mybatis连接池

本文介绍了Mybatis连接池的三种配置类型(POOLED、UNPOOLED和JNDI),重点对比了POOLED与UNPOOLED的工作原理,并详细讲解了事务的ACID特性及隔离级别。此外,还涉及动态SQL的WHERE和foreach标签用法示例。
摘要由CSDN通过智能技术生成
  1. Mybatis连接池提供了三种方式的配置
    1. 配置的位置:主配置文件SqlMapConfig.xml中的dataSources标签,type属性就是表示采用何种连接池方式
    2. type属性的取值
      1. POOLED 采用传统的javax.sql.DataSource规范中的连接池,Mybatis中有针对规范的实现
      2. UNPOOLED 采用传统的获取连接的方式,虽然也实现了javax.sql.DataSource接口,但是并没有使用池的思想
      3. JNDI 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。注意:如果不是web或者maven的war工程,是不能使用的。
      4. tomcat服务器采用的连接池是jdbp连接池
  2. POOLED和UNPOOLED的区别
    1. POOLED每次从连接池获取一个连接
      在这里插入图片描述

    2. UNPOOLED每次创建一个新的连接
      在这里插入图片描述

    3. 事务

      1. 面试:
        1. 什么是事务?
        2. 事务的四大特性ACID
        3. 不考虑隔离会产生的三个问题
        4. 四种隔离级别
      2. 它是通过sqlSession对象的commit方法和rollback方法实现事务的提交和回滚

动态SQL

  1. WHERE标签使用
<select id="findUserByContain" parameterType="domain.MybatisUser" resultType="domain.MybatisUser">
    select * from mybatisuser
    <where>
        <if test="username != null">
            and username = #{username}
        </if>
    </where>
</select>
  1. foreach标签使用
    1. 包装数据对象 用来包装对象 以方便传递不同的参数
    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;
         }
     }
    
    1. 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>
    
  2. 抽取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>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一大岐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值