mybatis总结

Mybatis框架的概念

Mybatis框架是java做持久层操作的框架,其底层还是jdbc,只不过采用了ORM思想,使得我们今后只需要关注sql语句和需要封装的javaBean对象即可,不需要再去做数据库驱动加载,获取Connnection链接,得到预编译对象,封装结果集等操作。

 

ORM:对象关系映射

在添加数据时得到当前数据的id

<selectKey keyProperty = “id” keyColumn=”id” order=”after” resultType=”int”>

       Select LAST_INSERT_ID();

</selectKey>

 

模糊查询

方式一:

<select id=”findByName” parameterType=”string” resultType=”user”>

Select * from user where username like #{username}

</select>

测试:  findByName(“%李%”)

注意:可以防止SQL注入,因为#{}是站位符,java与jdbc类型会自动转换,对象符合OGNL表达式;

方式二:

<select id=”findByName” parameterType=”string” resultType=”user”>

Select * from user where username like ‘%${value}%’

</select>

测试:  findByName(“李”)

注意:会有SQL注入发生,${}只是拼接,如果是基本类型或者string类型必须写value,

如果是对象类型解析符合OGNL表达式规则

ResultType和ResultMap的区别

当数据库中列名和JavaBean中属性名一致的时候使用ResultType,否则使用ResultMap。

ResultMap的作用是手动给其指定哪列的值赋值到哪个属性中。

 

Mybatis是什么时候从数据库连接池中拿数据库链接的?

Mybatis是在真正开始执行数据库操作的时候才去拿数据库链接。

 

动态sql之if判断

<if test=””> </if>

动态sql之where

<where>标签就等同于在sql语句中拼接了一个where条件,而且如果后面紧挨着的条件中有and,会自动去掉。

 

动态sql之foreach

<select id=”findByName” parameterType=”QueryVo” resultType=”user”>

Select * from user

<if test=””>

    <where>

             <foreach collection=”ids” item=”id” separator=”or”>

                  Id=#{id}

            </foreach>

   </where>

</if>

</select>

 

注意:在数据库端如果要体系出一对一或者一对多靠的是主外键。那么在java端如果要体现出A到B是一对一,要在A对象中加一个B的对象属性。A到B体现一对多,主要是在A的javabean中加入B的对象集合。

 

延迟加载的概念

延迟加载是一种均衡服务器压力的技术,就是我们需要什么数据的时候,才执行对应的数据库操作,否则先不查询。前提条件必须是采用mybatis分步查询的方式。

一级缓存

Mybatis默认情况下一级缓存就是开启的状态。就是在我们要重复查询某一个对象的时候,只会在第一次查询的时候去数据库中查询,其余都直接从缓存中拿数据。除非中间出现了增删改等SqlSession的提交或者关闭操作。可见一级缓存是SqlSeesion级别的。只要SqlSession没有被提交或关闭,数据就一直在。

 

二级缓存

二级缓存需要手动开启,而且要使用二级缓存的对象必须实现序列化接口。即便是SqlSession对象被关闭了。数据依然存在。所以要谨慎使用。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值