Mybatis核心技术

id: sql语句的唯一标识,与dao接口中的方法名一致

parameterType:定义输入到sql中的映射类型(请求参数),#{id}表示使用preparedstatement设置占位符号并将输入变量id传到sql。id 可以用任意字符代替并不固定

resultType:定义结果映射类型(返回值)。

注意:当返回值是List集合时他的类型就是泛型的类型

mybatis支持别名:


| 别名 | 映射类型 |

| — | — |

| _byte | byte |

| _long | long |

| _short | short |

| _int | int |

| _integer | int |

| _double | double |

| _float | float |

| _boolean | boolean |

| string | String |

| byte | Byte |

| long | Long |

| short | Short |

| int | Integer |

| integer | Integer |

| double | Double |

| float | Float |

| boolean | Boolean |

| date | Date |

| decimal | BigDecimal |

| bigdecimal | BigDecimal |

| map | Map |

动态Sql

If

通过mybatis提供的各种标签方法实现动态拼接sql

原始sql语句:

SELECT * FROM USER WHERE username  LIKE  ‘%王%’  AND  sex= ’2’

Mybatis中简单的sql语句:

SELECT * FROM USER WHERE username LIKE ‘%${username}%’ AND sex=#{sex}

trim

前缀’and’ 被’(’  替换

prefix:前缀覆盖并增加其内容 不写的话默认替换为空

suffix:后缀覆盖并增加其内容 不写的话默认替换为空

prefixOverrides:前缀判断的条件

suffixOverrides:后缀判断的条件

使用动态sql语句:

where

SELECT * FROM USER

AND username LIKE ‘%${username}%’

AND sex=#{sex}

可以自动去除sql语句where关键字后的and关键字

Foreach

向sql传递数组或List,  mybatis使用foreach解析,可以做批量处理

Sql语句:

SELECT * FROM USER WHERE id IN (1,10,16)

使用foreach赋值:

SELECT * FROM USER

#{id}

foreach:循环传入的集合参数

collection:传入的集合的变量名称(要遍历的值)

item:每次循环将循环出的数据放入这个变量中

open:循环开始拼接的字符串

close:循环结束拼接的字符串

separator:循环中拼接的分隔符

批量修改实例:

sql:

UPDATE rc_notify_queue   SET  queue_status = ‘E’,execute_time=NOW() WHERE notify_queue_Id IN (3,22,11)

UPDATE rc_notify_queue SET queue_status = ‘E’,execute_time=NOW()

#{notify.notifyQueueId}

一个大神朋友写的批量修改:

sdffesfe

choose

if标签是与(and)的关系,而 choose 是或(or)的关系。

有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。而使用if标签时,只要test中的表达式为 true,就会执行 if 标签中的条件。MyBatis 提供了 choose 元素。choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。

sql片段

Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的

将where条件抽取出来:

AND username LIKE ‘%${username}%’

引用:

SELECT * FROM USER

注意:也可在sql标签中也可以只放if标签

_parameter : 参数的引用

关联查询:


多表查询返回的数据是两个表中的数据这样就出现了数据封装的问题

解决方案一:创建一个有两个表的数据类

SELECT * FROM USER a , orders b WHERE a.id = b.user_id

和普通方法是一样的,只是要多创建一个po类

解决方案二:不需要新建po类只要在映射文件中配置:

使用:

SELECT * FROM USER a , orders b WHERE a.id = b.user_id

Type: po类的权限定名,这里使用的是别名

Id: 主键

Result: 普通属性

Column:     po类属性

Property:    表字段名

Association: 引用数据类型

Property:    在po类中的名称

JavaType:   全限定名

分两块,第一块使用resultMap标签封装数据,第二块在select中使用resultMap引用封装好的数据;

这种放法优于第一种方法,第一种方法再写po类增加了工作量,也不便于以后对数据的使用,也不能表现表与表之间的关系

封装map集合:


返回结果集类型: resultType=“java.util.Map”

查询后返回的结果:List

将数据库中每条数据:字段和值按照 key(字段名),value(字段值) 封装到hashMap集合中

然后在把Map集合封装到Llist集合中

将一条数据封装成map集合:

使用resultMap封装数据

SELECT * FROM s_cust

Column就是map集合的key Property数据库传来的数据注意:property值对应数据库中的字段值这种方式只能获取一条数据

Spring整合mybatis

最后

分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。

《Java高级面试》

《Java高级架构知识》

《算法知识》

link_user" property=“custlink_user”/> SELECT * FROM s_cust

Column就是map集合的key Property数据库传来的数据注意:property值对应数据库中的字段值这种方式只能获取一条数据

Spring整合mybatis

最后

分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。

《Java高级面试》

[外链图片转存中…(img-UEFTxxNM-1714420969891)]

《Java高级架构知识》

[外链图片转存中…(img-RQUhiX4C-1714420969892)]

《算法知识》

[外链图片转存中…(img-hx2dsNhZ-1714420969892)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值