栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis复习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691627.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号