mybatis笔记

本文详细介绍了Mybatis的执行器,包括SimpleExecutor、ReuseExecutor和BatchExecutor的工作方式,强调了SqlSession的使用范围。同时,讨论了$与#在SQL占位符中的区别,以及在不同参数类型下的使用场景。还涵盖了Mybatis的ResultType配置、关联查询、ResultMap的使用,并总结了查询缓存和Mybatis不常用的原因。

mybatis

在这里插入图片描述

1.配置主配置文件,配置运行环境,数据库。。。。,配置mapper.xml文件:主要是对sql语句的配置,此文件还需要在主配置文件文件中加载

2.通过SqlSessionFactoryBuilder,build出sqlsessionFactory(会话工厂)
3.通过SqlSessionFactory创建出sqlSession(一次会话,用于操作数据库)
4.executor,操作数据库。executor接口有两个实现(一个是基本执行器,一个是缓存执行器)

5.执行sql语句之前。Mapped Statement是mybatis的一个底层封装对象,它包装了mybatis的配置信息,和sql的映射信息。一个sql对应一个Mapped statement对象。

6.mapped statement对sql执行进行输入参数定义(pojo,hashmap。。。)在执行sql之前将输入的java对象映射到sql语句中,
7.mapped statement对SQL执行输出结果进行定义(pojo。。。),在执行SQL语句之后将输出结果映射到Java对象中。

1.mapper接口中的方法名要和Mapper.xml中定义的statement id相同
2.mapper接口中的输入参数类型,要和Mapper.xml文件的parameterType的类型相同
3.mapper接口中的输出参数类型,要和Mapper.xml文件中的resultType的类型相同

Mybaties执行器

batchExecutor 批量执行器
reuseExecutor:预编译执行器,第一次编译
simpleExecutor:默认执行,每运行一次,预编译一次

Sqlsession不能共享使用,最佳使用范围为一个请求或方法

关闭Sqlsession session.close;

# $ 的区别(面试常问问题)

1.Sql语句的#{}表示相当于占位符,传递sql参数,能够防止sql注入;使用KaTeX parse error: Expected 'EOF', got '#' at position 40: …接受简单数据类型做参数的时候,#̲{任意字符},{value}

3.在不能传递sql参数的地方,只能用$不能用#,例如order by ${value}

Mapper配置文件
paramterType
1.简单数据类型
#{任意字符} ${value}
2.pojo对象
#{pojo对象的属性} ${pojo对象的属性}
3.pojo包装对象
例如:User(Role) — roleId ——>role.roleId
4.hashmap
#{key} ${key}
常用于:不常用的查询条件,或某个方法中找不到现成的对象来做参数—>定义map做参数

5.多个参数

5.1#{0}—>第一个参数 #{1}—>第二个参数
5.2将多个参数封装在一个hashmap中
5.3使用注解指定名称
Fun (@param(“username”)String name,@param(“pwd”)String pwd)
mapper:#{username}
——————————————————————————————————

ResultType:

1.insert,update,delete不需要设置resultType,默认输出int;只用操作select才需要指定resultTypoe
2.resultType=“int”—简单数据类型(不常用)
查询结果有且只有一条记录,并且是将查询结果的第一个字段的值,做为输出的值
3.resultType=pojo对象
3.1返回一个pojo对象——使用selectOne方法
3.2返回一个List——使用selectList方法
———————————————————————————————————-
resultMap:
为主键 为其他参数
在这里插入图片描述

————————————————————————————————————
动态sql:

在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/d2a8ab37ab294fe1966846183e539904.png) ————————————————————————————————————————

关联查询:

1.最常用的方法:定义dto,多表联查
2.mybatis提供的关联查询的标签:(面试常问问题)
2.1 用于1v1的查询Role(User)
在这里插入图片描述

2.2用于1v多的查询Role(List)
2.3多对多:两个collection

———————————————————————————————————————

result小结:

resultType和resultMap的区别和关系?(面试问题)
1.这两个的作用的都是定义查询结果映射到Java对象
2.resultType只能直接映射到Java对象中,要求查询的列名要和java对象的属性名一致
3.resultMap可以设置查询列名和Java对象属性名之间的对应关系
4.resultMap可以使用association和collection查询对应关系
————————————————————————————
查询缓存:(不常用)(第一次查询结果,中间有增加修改删除操作,缓存全部清空,第二次查询就不能从缓存中查询)
原理:(第一次查询出的结果储存在一个位置,第二次查询可以从该位置拿去)
1.一级缓存同一个sqlsession,mybatis默认一级缓存是打开的(用处不大)
2.二级缓存可以对多个sqlsession起作用()
(打开二级缓存 mybatis-config-xml ,java映射对象要实现Serializable (序列化接口))
在这里插入图片描述

不常用原因:

在这里插入图片描述

——————————————————————————————————————
mybatis的逆向工程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值