Mybatis 基础
- mybatis 配置文件配置 mapper 映射文件配置 resultType 类型别名
a. 单个类,属性可指定别名,不指定即为类名,不区分大小写
b. 包引入,属性可指定别名,不指定即为类名,不区分大小写 - mybatis 配置文件引入项目映射文件mapper.xml 文件
a. 单个mapper 映射文件
b. 包引入
ⅰ. mapper 接口所在的包要和映射文件所在的包一致
ⅱ. mapper 接口要和映射文件的名字一致 - idea Resource 创建多级包目录: /home/Azure/resource,/斜线分割, 不能 . 点号分割
- idea 中设置核心配置文件模版(比如 .xml 文件)
a. 来源 : 引用官方手册中的示例配置文件
b. setting -> Editor -> Code Style ->File and Code Templates 点击 + , 输入Name模版名 , Extension 选择文件类型, 粘贴配置文件信息 - 配置文件引入 properties 文件
- idea 创建 properties 文件
创建properties文件: new -> Reource Bundle, 输入文件名 - mybatis 获取参数值的两种方式#{}, ${}
a. ${} :本质是字符串拼接
b. #{}: 本质是占位符赋值 - mybatis 获取参数值的各种情况
a. mapper 接口方法的参数为单个的字面量类型
ⅰ. 可以直接使用#{}, ${} 以任意名称获取参数值, 但是注意使用 ${} 需要添加单引号
b. mapper 接口方法的参数为多个时,此时会将参数放在一个 map 中,有两种方式,可以直接使用#{}, ${} 以下key获取参数值, 但是注意使用 ${} 需要添加单引号
ⅰ. 以 arg0, arg1 …为键, 值为参数值
ⅱ. 以param0, param1… 为健, 值为参数值
c. mapper 接口方法的参数存在多个时,可以手动将这些参数放在一个 map 中存储,接口方法的参数为自定义的 map
ⅰ. 可以直接使用#{}, ${} 以key获取参数值, 但是注意使用 ${} 需要添加单引号
ⅱ. 键即为手动定义的key值,参数为 value 值
d. mapper 接口方法的参数是实体类类型的参数,占位符 #{username}, username 即为 实体类中的属性
ⅰ. 可以直接使用#{}, ${} 以属性名获取参数值, 但是注意使用 ${} 需要添加单引号
e. 使用 @Param 注解命名参数,mybatis 会将参数放在map 中, key是@Param 注解 value 值
ⅰ. mapper 接口方法参数(@Param(username) String username)
ⅱ. 以param0, param1… 为健, 值为参数值 - mybatis 的各种查询
a. 若查询出来的数据只有一条,
ⅰ. 可以通过实体类对象
ⅱ. 集合接收
ⅲ. Map 接收,key,value 键值对
b. 若查询出来的数据存在多条,
ⅰ. 可以通过集合接收,不能通过实体类对象接收,会 保 TooManyResultsException 异常
ⅱ. List - mybatis resultType 设置的默认别名,官方文档已经给出的默认的别名
- mybatis 模糊查询
a. 使用 ‘%${username}%’
b. 使用拼接函数 concat(‘%’,#{username},‘%’)
c. “%”#{username}“%” - 批量删除
a. 使用 ${} , 不能使用 #{} ,原因是使用 #{} 会自动带上单引号 - 动态传输表名
a. 使用 ${} , 不能使用 #{} ,原因是使用 #{} 会表名自动带上单引号 - 添加功能获取自增的主键
a. useGeneratedKeys=“true”, 使用了自增的主键id
b. keyProperty=“id”, 将a 返回的自增Id 通过实体对象中某一个属性返回 - 自定义映射
a. 使用字段别名
b. 设置全局配置,配置文件开启驼峰命名下划线映射成驼峰 settings标签
ⅰ.
c. 使用 resultMap 自定义字段属性映射关系 - 多表查询(多对一)
a. 级联赋值
b.
c. 分步查询
ⅰ. 通过第一步查询返回的结果,作为第二步查询的条件
ⅱ.
ⅲ. fetchType: 当开启了全局的延迟加载,可通过此属性手动控制延迟加载的效果,fetchType=‘lazy|eager’, 默认延迟加载,eager 立即加载 - 多表查询(一对多)
a. 使用 ofType 是集合中存放元素的类型
b. 分步查询
ⅰ.
ⅱ. fetchType: 当开启了全局的延迟加载,可通过此属性手动控制延迟加载的效果,fetchType=‘lazy|eager’, 默认延迟加载,eager 立即加载 - 延迟加载
a. 全局配置开启延迟加载 - 动态SQL
a. : 根据标签中 test 属性判断参数是否满足SQL拼接
ⅰ. username=#{username}
b. :
ⅰ. 动态生成 where 关键字
ⅱ. 将 标签中内容前多余的 and/ or 去掉
ⅲ. 无法将 标签中内容后的 and/ or 去掉
c. :标签中有内容会生效,标签中没有内容不会生效
ⅰ. prefix/suffix:将 trim 标签中内容前面或者后面添加指定内容
ⅱ. prefixOverrides/suffixOverrides/:将 trim 标签中内容前面或者后面去掉指定内容
d. choose,when, otherwise = if… else if… else…
ⅰ. choose- when(匹配满足的第一条件):至少一个
- otherwise(不满足when时, 就会执行): 至多一个
e. foreach
ⅰ. in 批量删除 <foreach collection=‘strArr’ item=‘str’ separator=‘分隔符,’, open=‘(’ close=‘)’> : open=‘(’ close=‘)’ 以什么符号开始什么符号结束
ⅱ. or 批量删除
ⅲ. 批量新增 insert into emp values (#{str.username}, #{str.password})
f. sql 片段
ⅰ. 定义str1,str2,str3
ⅱ. 引用
- mybaits 缓存
a. 一级缓存默认开启,作用范围是同一个SqlSession
ⅰ. 使用缓存失效的四种情况- 操作不同的 SqlSession
- 同一个 SqlSeesion 查询条件不同
- 同一个 SqlSeesion 在执行两次查询之间执行了增删改操作
- 同一个 SqlSeesion 在执行两次查询之间手动清空了缓存
b. 二级缓存需要手动开启,作用范围比一级缓存 S去lSession 范围大,二级缓存是 SqlSessionFactory ,需要满足以下条件
ⅰ. 在配置文件中设置全局配置属性 cacheEnabled=‘true’, 默认为 true
ⅱ. 在映射文件中设置标签
ⅲ. 二级缓存必须在 SqlSession 关闭或者提交之后才有效
ⅳ. 查询的实体类必须实现序列化接口
c. 失效(一级和二级同时失效)
ⅰ. 两次查询之间执行了任意的增删改操作
- mybatis 缓存查询的顺序
a. 先查二级缓存,二级缓存可能存在其他程序已经查出来的数据可以直接使用
b. 二级缓存没有命中,则查一级缓存
c. 一级缓存没有命中,则查数据库
d. SqlSession 关闭之后,一级缓存写入二级缓存 - mybatis 整合第三方缓存(EHCache)
- mybatis 逆向工程
a. 根据条件查询
ⅰ. EmpExample example = new EmpExample(); - mybatis 分页插件
a. 需要在查询功能之前开启分页:PageHelper.startPage(int pageNum, int pageSize)
b. 在查询功能之后获取分页相关信息: PageInfo page = new PageInfo<>(list , 5), list 表示分页数据, 5表示当前导航分页的数量
781

被折叠的 条评论
为什么被折叠?



