最全Mybatis核心技术,细数Java开发者的艰辛历程

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

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

需要这份系统化的资料的朋友,可以点击这里获取

如果传入的是基本类型,那么#{}中的变量名称可以随意写

如果传入的参数是pojo类型,那么#{}中的变量名称必须是pojo中的属性.属性名(user.username)

${}拼接符:字符串原样拼接(有sql注入的风险)

如果传入的是基本类型,那么${}中的变量名必须是value

如果传入的参数是pojo类型,那么${}中的变量名称必须是pojo中的属性.属性名(user.username)

注意:使用拼接符有可能造成sql注入,在页面输入的时候可以加入校验,不可输入sql关键字,不可输入空格

注意:如果是取简单数量类型的参数,括号中的值必须为value

例: select * from user where username like ‘%${value}%’

可以这样写来解决sql注入:select * from user where username like ‘%’ #{name}’%’(开发经常使用)

入门

注意本程序只是为了理解mybatis的使用,实际开发中可能不这样使用

SqlMapConfig.xml配置:

(并不固定,可以写别的名称)mybatis基本配置

<?xml version="1.0" encoding="UTF-8" ?>

<!—关联映射–>

经测验映射文件最好和核心配置文件在一个文件夹下

properties(属性)

settings(全局配置参数)

typeAliases(类型别名)

typeHandlers(类型处理器)

objectFactory(对象工厂)

plugins(插件)

environments(环境集合属性对象)

environment(环境子属性对象)

transactionManager(事务管理)

dataSource(数据源)

mappers(映射器)

Mapper配置文件

配表与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 : 参数的引用

关联查询:


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

写在最后

还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

image

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

需要这份系统化的资料的朋友,可以点击这里获取


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

写在最后

还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

[外链图片转存中…(img-ciTUWSyS-1715576819341)]

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

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值