MyBatis

MyBatis的核心配置文件

1、数据库的配置

2、引入Mapper映射文件

 

 

Mapper的映射配置文件

 


加载核心配置文件

 


resultType:属性名和字段自动映射(默认的自动映射关系)

resultMap:指定属性名和字段的映射关系(设置自定义的映射关系)

environments标签:配置多个连接数据库的环境

        属性:

                default:设置默认使用的id环境

environment标签:

        属性               

                id:表示连接数据库的唯一标识,不能重复

typeAliases标签:

 

 mapper标签

 

设置事务管理方式

MyBatis获取两种参数值的两种方式

${}:字符串拼接,如果要加引号,就要手动加上('${}')

#{}:占位符赋值,是什么类型,就赋值什么类型

Mybatis参数注入的方式

        1、mapper接口方法的参数为单个字面里类型时,可以通过${}和#{}以任意的名称获取参数值。

        2、mapper接口方法的参数为多个时,Mybatis会将这些参数放在一个map集合中,以两种方式进行存储,以arg0、arg1...为键,以param1、param1...为值,可以通过${}和#{}以键方式访问获取参数值。

        3、mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储,只需要通过${}和#{}以任意的名称获取参数值。

        4、mapper接口方法的参数是实体类类型的参数

                只需要通过${}和#{}以属性方式访问属性值,即可

        5、使用#Param注解命名参数,此时Mybatis会将这些参数放在一个map集合中,以两种方式进行存储

                1、以@Param注解的值为键,以参数为值,只需要通过${}和#{}以键的方式访问值,即可

Mybatis查询结果封装

1、若查询出的数据只有一条

        可以通过实体类对象接收

        可以通过List集合接收

        可以通过Map集合接收

2、若查询出的数据有多条

        可以通过实体类类型的List集合接收

        可以通过map类型的list集合接收

        可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为值,以某个字段的值作为键同,放在同一个map集合中

注意:Mybatis中设置了默认的类型别名

        java.lang.Integer-->int,integer

        int-->_int,_integer

        Map-->map

        String-->string

处理模糊查询

        使用${}:select * from user where username like '%${username}%'

        使用#{}:select * from user where username like concat('%',#{username},'%'}

        使用#{}:select * from user where username like "%"#{username}"%"

批量删除

        delete from user where id in (${id}),假设传入过来的是"1,2,3"     会自动解析成(1,2,3)

获取添加功能自增的主键

解析字段名和属性名不一致的情况

        为字段起别名,保持和属性名的一致

        设置全局配置,将自动映射为驼峰

        通过resultMap设置自定义的映射关系

 多对一的处理

        级联属性赋值

 

        通过association进行赋值

        分步查询

                column:是分步查询的条件

                select:第二步查询的接口全类名 

 开启延迟加载

 

一对多的处理

        通过collection

         分步查询

                第一步

                第二步

                通过封装过程,调用第二步

动态SQL

        if标签       

                根据标签中test属性所对应的表达式决定标签中内容是否需要拼接SQL

         where标签

                当where标签中有内容时,会自动生成where关键字,并且将内容前多余的and或or去掉

                当where标签中没有内容时,此时where标签没有任何效果

                注意:where标签不能将其中内容后面多余的and或or去掉

        trim标签
                prefix | suffix:将trim标签中内容前面或后面添加指定内容

                suffixOverrides | prefixOverrides:将trim标签中内容前面或后面去掉指定内容

                若标签中没有内容时,trim标签也没有任何效果

        choose、when(相当于if或else if)、otherwise(相当于else)标签

                when至少要有一个,otherwise最多只能有一个

        foreach标签

                collection:设置需要循环的数组或集合

                item:表示数组或集合中的每一个数据

                separator:循环体之间的分割符

                open:foreach标签所循环的所有内容的开始符

                close:foreach标签所循环的所有内容的结束符

        sql标签

                设置SQL片段<sql id="">sql语句</sql>

                引用SQL片段<include refid=""></include>

MyBatis缓存

        一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问

        使一级缓存失效的四种情况

                1、不同的SqlSession对应不同的一级缓存

                2、同一个SqlSession但是查询条件不同

                3、同一个SqlSession两次查询期间执行了任何一次增删改操作

                4、同一个SqlSession两次查询期间手动清空了缓存

        二级缓存是SqlSessionFactory级别,通过同一个SqlSessionFactory创建的SqlSession查询的结果会被缓存;此后若再次执行相同的查询语句,结果就会从缓存中获取

        二级缓存开启的条件

                1、在核心配置文件中,设置全局配置属性cacheEnabled="true",默认为true,不需要设置

                2、在映射文件中设置标签<cache/>

                3、二级缓存必须在SqlSession关闭或提交之后有效

                4、查询的数据所转换的实体类类型必须实现序列化接口

        

        使二级缓存失效的情况

                两次查询之间执行了任意的增删改,会使一级和二级缓存同时失效

        二级缓存的相关配置

                        eviction属性:缓存回收策略

                        LRU(Least Recently Used)最近最少使用的:移除最长时间不被使用的对象

                        FIFO(First in First out)先进先出:按对象进行缓存的顺序来移除它们

                        SOFT软引用:移除基于垃圾回收器状态和软引用规则的对象

                        WEAK弱引用:更积极地移除基于垃圾回收器状态和弱引用规则的对象,默认的是LRU

                       flushInterval属性:刷新间隔,单位毫秒,默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新

                       size属性:引用数目,正整数,代表缓存最多可以存储多少个对象同,太大容易导致内存溢出

                       readOnly属性:只读,true/false,

                                true:只读缓存,会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势

                                false:读写缓存,会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是false.

MyBatis缓存查询的顺序

1、先查询二级缓存,因为二级缓存中可能会有其它程序已经查出来的数据,可以拿来直接用。

2、如果二级缓存没有命中,再查询一级缓存

3、如果一级缓存也没有命中,则查询数据库

4、SqlSession关闭之后,一级缓存中的数据会写入二级缓存

整合第三方缓存EHCache

1、添加依赖

 2、各jar包功能

 3、创建EHCache

 

 4、设置二级缓存的类型

5、 加入日志

6、 EHCache配置文件说明

Mybatis逆向工程

1、添加依赖和插件

 

 

2、创建Mybatis的核心配置文件

3、创建逆向工程的配置文件(名字必须是:generatorConfig.xml)

 4、执行MBG插件的generate目标

5、执行CDUQ

 分布插件

1、添加依赖

 2、配置分页插件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值