Mybatis复习

Mybatis复习,第1张

Mybatis复习 1.hello world

①设计好数据库和java对应的实体类


②设置全局配置文件

③配置映射文件

④编写测试类

2.接口式编程

①创建一个对应接口

②修改映射文件的某些配置

③编写测试类

3.全局配置文件(标签的顺序不能打乱) ①settings

②typeAliases(别名处理器)

③.typeHandlers(类型处理器) ④.plugins(插件)

插件能拦截四大对象的方法
1.Executor
2.ParameterHandler
3.ResultSetHandler
4.StatementHandler

⑤.environments(运行环境:可以配置多种环境)

⑥.databaseIdProvider数据库厂商


⑦.mappers


上面第三点,还必须映射文件名和接口名一致

有的公司使用以下方法:

mybatis还有另一种方式:没有映射文件,sql语句利用注解写在接口上

4.映射文件 select、insert、update、delete

如果想要获取自增主键,可以采用以下方式(oracle不支持自增)

-------------------------------------------------------参数处理-------------------------------------------

①如果传过来的参数是单个参数,mybatis不做特殊处理,例如

②如果传过来的参数是多个参数,mybatis会将多个参数封装成map结构

所以以下书写结构是错误的:

解决方法1:(使用mybatis给定的map结构 param1、param2…)


解决方法2:(使用@param注解)

在参数很多有五六个的情况下:
1.如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo
2.如果不是我们业务逻辑里的模型也不经常使用的话,我们可以使用map
3.如果不是我们业务逻辑里的模型但是经常使用的话,我们可以创建一个实体类

特别注意:
如果穿过来的参数是Collection类型或者数组也会进行特殊处理
例如: public Employee getEmployeeByI的(List ids);
取第一个值: #{list[0]}
Collection------->colllection[0]
Array-------------->array[0]

经典面试题:#{}和${}的区别

#{}和${}的区别
#{}是以预编译的形式,将参数设置到sql语句当中,防止sql注入
${}:取出的值直接拼装在aql语句中,会有安全问题,原生jdbc不支持占位符的地方,就可以使用

sslect查询返回list集合:

返回一个map对象

①key为列名,value为列名对应的值(map里只有一个对象)



②key为指定列的值,value为employee对象



resultMap(自定义结果集映射规则)



resultMap更强大的用法:
①(级联属性封装结果类)

一个类中有自定义的属性,可以使用如下方法:



②使用association

③使用分步查询

创建department对应的接口和xml文件


在全局配置文件中注册映射文件

在employee.xml文件中使用分步查询:

延迟加载:对于上面的分步查询中department对象用到的时候才加载

----------------collection嵌套结果集的方式,定义关联的集合类型元素的封装------------------

一个实体类里有一个集合属性就可以用collection

例如:查询部门时,将部门下的所有员工都查询出来

在分布查询当中,第二步查询需要的参数是通过column传递的,如果有多列的值要传递过去怎么办?

解决方法:封装成一个map

分步查询:association、collection里面的select属性

5.动态sql

if、chose、trim、foreach

if

当第一个if标签中的表达式不成立,会造成语法错误,例如

解决方法1:在where后加一个 1=1 这样就不会出现语法错误
解决方法2:使用wherer标签,只会去掉写在开头的and,如果and写在后面,则不起效果

where

解决以上问题

trim

自定义截取规则

这样的话,如果where后面有一个多余的and,就会被去除

choose

与if的区别:
if只要满足条件就会拼接,而choose只能选择一个

set

set与if配合使用


正确写法:

for each属性(对于sql中的in)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5692112.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存