mybatis基本操作(二)

连接池

我们在实际开发中都会使用连接池。因为它可以减少我们获取连接所消耗的时间。
在这里插入图片描述

Mybatis中的连接池

我们在前面的 WEB 课程中也学习过类似的连接池技术,而在 Mybatis 中也有连接池技术,但是它采用的是自己的连接池技术。在 Mybatis 的 SqlMapConfig.xml 配置文件中, 通过来实现 Mybatis 中连接池的配置。

Mybatis连接池的分类

在 Mybatis 中我们将它的数据源 dataSource 分为以下几类:
在这里插入图片描述
可以看出 Mybatis 将它自己的数据源分为三类:
在这里插入图片描述

具体结构如下:
在这里插入图片描述
相应地, MyBatis 内部分别定义了实现了 java.sql.DataSource 接口的 UnpooledDataSource,PooledDataSource 类来表示 UNPOOLED、 POOLED 类型的数据源。

在这里插入图片描述

POOLED连接池

在这里插入图片描述

在这里插入图片描述

autoCommit

在这里插入图片描述

mybatis中的动态sql语句

if标签

注意:标签的test属性中写的是对象的属性名,如果是包装类的对象要使用OGNL表达式的写法。另外要注意where 1=1的作用。
在这里插入图片描述

where标签

可以自动处理第一个and。
在这里插入图片描述

foreach标签

SQL 语句: select 字段from user where id in (?)
标签用于遍历集合,它的属性:
collection:代表要遍历的集合元素,注意编写时不要写#{}
open:代表语句的开始部分
close:代表结束部分
item:代表遍历集合的每个元素,生成的变量名
sperator:代表分隔符

<include refid="defaultUser"></include>
        <where>
            <if test="ids != null and ids.size()>0">
                <foreach collection="ids" open="and id in (" close=")" item="uid" separator=",">
                    #{uid}
                </foreach>
            </if>
        </where>

SQL标签

在这里插入图片描述
其中标签的 refid 属性的值就是 标签定义 id的取值。
注意:如果引用其它 mapper.xml 的 sql 片段,则在引用时需要加上 namespace,如下:
<include refid="namespace.sql 片段”/>

Mybatis延迟加载

修改IAccountDao映射文件
在这里插入图片描述

启动select指向IUserDao中的映射文件,如下标红的部分
在这里插入图片描述
在主配置文件中添加标签,开启延迟加载
在这里插入图片描述

Mybatis缓存

在这里插入图片描述

一级缓存

它指的是Mybatis中SqlSession对象的缓存。当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。
该区域的结构是一个Map。当我们再次查询同样的数据,mybatis会先去sqlsession中
查询是否有,有的话直接拿出来用。
当SqlSession对象消失时,mybatis的一级缓存也就消失了。

一级缓存是 SqlSession 范围的缓存,当调用 SqlSession 的修改,添加,删除,commit(),close()等方
法时,就会清空一级缓存。

二级缓存

它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。

二级缓存的使用步骤

第一步:让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
在这里插入图片描述
第二步:让当前的映射文件支持二级缓存(在IUserDao.xml中配置)
在这里插入图片描述
第三步:让当前的操作支持二级缓存(在select标签中配置)
在这里插入图片描述

mybatis注解使用

  1. 引入依赖。 在这里插入图片描述
  2. 创建实体类User
    在这里插入图片描述
  3. 创建IUserDao接口
    在这里插入图片描述
  4. 准备主配置文件,如下:
    在这里插入图片描述
  5. 测试。
    在这里插入图片描述
  6. 执行分析 对比配置进行分析。
    在这里插入图片描述

注意,如果同时存在规范路径下的映射文件和注解,解析的会混乱。只能一个类要么全部是注解,要么全部是映射文件。项目中到底是用注释好还是映射文件好,这个没有定论。但基于注解是趋势,个人觉得在简单的查询中用注解,在比较复杂的SQL中使用映射文件的方式。

Mybatis使用注意事项

  1. 使用Integer,BigDecimal类型时,如果没有查出来就为null。可以通过数据库函数IFNULL(xx,0)来解决,也可以通过下面的方式来解决。
BigDecimal validQuato = xdCreditResultMapper.getClientEffectiveCreditResult(TCLDict.SXZT_ACTIVE, tranDate)
if(validQuato != null){
 xxx
}       
  1. 当使用List、Map类时。如果没查到,则返回List对象,且size等于0。

List<Base> list = userDao.queryOrders(queryParams);
logger.info("query result list size:" + (null == list ? "空" : list.size()));

当输入查询条件,queryOrders没有查询结果时,控制台打印出的信息:
2019-02-19 15:07:24,003 INFO(PurchasingRemoteSerciceImpl.java:123) - query result list size:0
  1. 普通javabean

普通类不会执行new语句,直接赋值。所以如果查不到数据时返回null。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值