[Mybatis] Mybatis

核心配置文件、mapper映射文件

核心配置文件 mybatis-config.xml   配置连接数据库的环境和 mybatis 全局配置信息

src/main/resources

映射文件 XXXMapper.xml 与mapper接口(相当于DAO,无实现类)同名

src/main/resources/与mapper接口一样的包名    【一张表一个实体类一个映射文件】

      

mybatis-config.xml 乱七八糟标签

统一引入映射文件

映射文件

获取参数值 ${ } 和  #{ }

${ }字符串拼接,当心 sql 注入      #{ } 占位符赋值

五种传参方式

1.单参数

mapper接口中为普通的单参数    ${ } 或 #{ }

2.多参数

mybatis 会自动将参数放在一个 map 中

arg0,arg1,arg2....或param1,param2,param3......为键     参数为值。使用 ${ } 或 #{ }  即可

3.map类型参数

手动将数据填入map,然后传参map

4.实体类类型参数

直接使用 ${ } 或 #{ } 访问实体类的属性

5.@Param( " " )

mybatis 会自动将参数放在一个 map 中

@Param注解的value 或 param1,param2,param3......为键     参数为值。使用 ${ } 或 #{ }  即可

Map接收查询结果

查询结果没有对应的实体类时可以用 Map 接收

(1)单条记录放入 Map

Map 内存放 【字段名:值】 键值对,记录中的值为 NULL 的话不会放入 Map

(2)多条记录放入 Map

         1.List<Map<String,Object> > 接收

         2.注解@MapKey("字段名")

一条记录放入一个Map,多条记录多个Map放入另一个Map

由注解给出的字段名作为【键】,【值】为一条记录对应的Map

Map键 无重,@MapKey 最好用 自增主键,防止覆盖。

模糊查询

(1)select  ...  like  %$ { asdfas } %

(2)select  ...  like  concat( '%' , # { asdfas } , '%' )

(3)select  ...  like  "%"  # { asdfas } "%"

主键回显

字段名和属性名不一致

(1)字段名起别名,和属性名一致

(2)mybatis-config.xml  全局设置

         符合规范的 _ 命名 和 符合规范的 驼峰 命名,自动映射

         例如   user_name  映射为   userName

(3)自定义映射 <resultMap>

多对一映射

(1)级联,查询结果 resultMap 自定义映射

(2)association

(3)分布查询

         分布查询可以避免  join

         分布查询优点:可以实现延迟加载

1.先根据 id 查询 student 表中数据

2.根据查询到的记录的 student_calss 作为条件传给分布查询sql

延迟加载

全局设置延迟加载

分布查询局部设置延迟加载

开启延迟加载,只调用实体类的一个属性,不执行分布查询sql

一对多映射

(1)collection

(2)分布查询

动态SQL

(1)if                 < if > 标签内容成立则将sql语句进行拼接

(2)where 

(3)trim

(4)choose when otherwise

(5)sql 标签

foreach批量添加和批量删除

(1)批量添加

(2)批量删除

一级缓存(SqlSession级别)

mybatis一级缓存默认开启,通过同一个sqlSession查询的数据会被缓存,下次查询相同的数据会从缓存中直接获取,不会从数据库访问。

一级缓存失效:

(1)不同的 SqlSession 对应不同的一级缓存

(2)同一  SqlSession 但查询条件不同

(3)同一  SqlSession 两次查询间执行了【增删改】操作

(4)同一  SqlSession 两次查询间手动清空了缓存  【 sqlSession.clearCache(); 】

二级缓存(SqlSessionFactory级别)

同一SqlSessionFactory创建的SqlSession查询结果会被缓存

二级缓存开启条件:

(1)核心配置文件,全局属性 cacheEnable="true" 默认就是开着的

(2)映射文件里加个 <cache />

(3)SqlSession close 后才有效

(4)查询的数据转换的实体类要实现 【序列化接口】 【implements Serializable】

二级缓存失效:

(1)两次查询间增删改

缓存查询顺序

二级 ---> 一级 ---> 数据库

逆向工程

分页插件

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值