Mybatis核心技术

配表与pojo关系,以及sql

select * from user where id = #{id}

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


SqlMapConfig.xml配置:

其余交个spring管理

ApplicationContext.xml

配置dataSource

配置sqlSessionFactory

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-NR4DMnDe-1715840953725)]

[外链图片转存中…(img-nQRSmQ1H-1715840953726)]

[外链图片转存中…(img-88iegX5r-1715840953726)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值