mybatis多参数传递,延迟加载,缓存,注解开发
1、Mybatis的多参数传递方式
需求:更具id 和 名字查询用户:
select * from user where id = ? and name = ?;
1):QueryVo 或者 User : JavaBean
2)顺序传参(有误)
3)@Param:表示,sql语句中,#{}中填写的值
User findUserByIdName(@Param("id") int id, @Param("username") String name);
4)Map传参
取值:#{}中是map的key值
select * from user where id = #{id} and username = #{username}
2、Mybatis的延时加载
延时加载:按需加载,懒加载
问题:在用户和账户的关系中:1对多
1个用户可能存在多个账户
在查询用户的同时把用户对应的账户也查询出来
解决问题:用户下的账户信息 什么时候使用 什么时候加载
表关系:多对1 ,1对1
一对多,多对多
1对1 : 根据账户查询用户
1、修改账户的映射配置文件、
2、修改核心配置文件:打开延迟加载
3、修改sql语句
1对多:根据用户查询账户
1、修改账户的映射配置文件、
2、修改sql语句
3、mybatis的缓存
//重点
什么是缓存
存在于内存中的临时数据
为什么要使用缓存
减少和数据库的交互次数,提高执行效率
什么样的数据能使用缓存
经常查询不轻易改变
数据的正确与否对最终结果影响不大
//知道就好(redis)
mybatis的一级缓存:
缓存的是sqlsession对象。
当我们执行查询以后,查询的寄过回同时存入到sqlsession为我们提供的一块区域中(Map)
当我们再次查询相同数据的时候,mybatis会优先到sqlsession中查询是否存在,如果存在,直接拿来用
当我们sqlsession消失,mybatis的一级缓存也就消失了
清空一级缓存:
sqlSession.close();
sqlSession.clearCache();
当sqlsession在执行updat\delete\insert方法的时候 都会情况清空缓存
mybatis的二级缓存:
缓存的是sqlsessionFactory对象,由同一个SqlSessionFactory对象创建出来的sqlSession共享其缓存
二级缓存步骤:
1、mybatis支持二级缓存(SqlMapConfig.xml)
<!-- 开启缓存 -->
<setting name="cacheEnabled" value="true"></setting>
2、配置映射文件,让映射文件支持二级缓存
<cache></cache>
3、修改当前操作 支持二级缓存
<select id="findUser" resultMap="userMap1" useCache="true">
4、mybatis注解开发
1、curd操作
2、多表操作
1对1:查询账户及账户对应的用户信息
@Select("select * from account")
@Results(id="accountMap",value={
@Result(id = true,column = "id",property = "id"),
@Result(column = "uid",property = "uid"),
@Result(column = "money",property = "money"),
@Result(column = "uid",property = "user",one = @One(select = "com.xmcc.dao.AnnoUserDao.findById",fetchType = FetchType.LAZY))
1对多:查询用户以及用户对应的账户信息
@Select("select * from user")
@Results(id="userMap",value = {
@Result(id = true,column = "id",property = "id"),
@Result(column = "username",property = "username"),
@Result(column = "birthday",property = "birthday"),
@Result(column = "sex",property = "sex"),
@Result(column = "address",property = "address"),
@Result(column = "id",property = "accounts",many = @Many(select = "com.xmcc.dao.AnnoAccountDao.findById",fetchType = FetchType.LAZY))
二级缓存:
@CacheNamespace(blocking=true)
public interface AnnoUserDao {
mybatis多参数传递,延迟加载,缓存,注解开发的更多相关文章
- mybatis 加载策略及注解开发
1. 延迟策略 在需要用到数据时在加载相关数据,常用于一对多关系, 优点:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能, 缺点:当需要用到数据时,才会进行数据库查询,这样在大批量数据查 ...
- MyBatis(7)——使用注解开发
说明:注解就是利用接口实现的,因此转为面向接口编程,使用接口开发拓展性好.分层开发时上层不用管理具体的实现.更加标准化更加规范.使得各个层的耦合度更低. 注:有了注释语句就不需要实体类的mapper文 ...
- MyBatis基础_连接池与事务、动态SQL、注解开发
一.MyBatis连接池及事务控制 1.连接池 在实际开发中,都会使用连接池,因为它可以减少获取连接缩消耗的时间.所谓连接池,就是存储数据库连接的容器.连接池中存储一定数量的数据库连接,当线程需要使用 ...
- Mybatis注解开发
mybatis 的常用注解: @Insert:实现新增 @Update:实现更新 @Delete:实现删除 @Select:实现查询 @Result:实现结果集封装 @Results:可以与 @Res ...
- 【MyBatis】MyBatis 注解开发
MyBatis 注解开发 文章源码 环境搭建 Mybatis 也可以使用注解开发方式,这样就可以减少编写 Mapper 映射文件. 常用注解说明: @Insert 实现新增 @Update 实现更新 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——S ...
- mybatis教程5(延迟加载和缓存)
关联关系 在关系型数据库中,表与表之间很少是独立与其他表没关系的.所以在实际开发过程中我们会碰到很多复杂的关联关系.在此我们来分析下载mybatis中怎么处理这些关系 1对1关系 我们有一张员工表(T ...
- MyBatis(8)延迟加载&缓存
什么是延迟加载? resultMap可以实现高级映射,association,collection具有延迟加载的功能. 当我们需要查询某个信息的时候,再去查询,达到按需查询,就是延迟加载 可以 ...
- MyBatis框架之注解开发
MyBatis注解开发 @Insert注解注解属性value:写入SQL语句 @Options注解实现添加新数据的主键封装注解属性useGeneratedKeys:使用生成的主键,配置为truekey ...
随机推荐
- Java IO和Java NIO 和通道 在文件拷贝上的性能差异分析
1. 在JAVA传统的IO系统中,读取磁盘文件数据的过程如下: 以FileInputStream类为例,该类有一个read(byte b[])方法,byte b[]是我们要存储读取到用户空间的缓冲区 ...
- AD域详解
很详细,赞!
- react问题解决的一些方法
原文链接: https://segmentfault.com/a/1190000007811296?utm_source=tuicool&utm_medium=referral 初学者对Rea ...
- 【JavaScript】for循环小练习
1.输出1-100的和 var sum = 0; for(var i=1;i<=100;i++){ sum = sum + i; } document.write(sum); 2.输出1-100 ...
- mysql查看所有触发器以及存储过程等操作集合
今天在做每个月定时扣费的功能 用到了Mysql的Event Scheduler 昨完之后发现一个问题 Event Scheduler 默认是不开启的 要在mysql内执行SET GLOBAL even ...
- leetcode 二进制求和 python
class Solution: def addBinary(self, a, b): """ :type a: str :type b: str :rtype: str ...
- React Native之配置开发环境
安装前注意: 1)在Max OS X 10.11(El Capitan)版本中,homebrew在安装软件时可能会碰到/usr/local目录不可写的权限问题.可以使用下面的命令修复: sudo ch ...
- 【js】了解前端缓存,收获不止于此!
了解前端缓存,收获不止于此! 这次我们来讲一下关于前端缓存的问题.感谢赵欢同学提供doc素材. 首先,开局我画了一张图,你会对文章有一个大局了解. 今天讲的是前端缓存. 前端缓存有3大种:如图,分为H ...
- Flutter进阶—点击、拖动和其他手势
Flutter中的手势系统有两个层次.第一层具有原始指针事件,其描述了穿过屏幕的指针(例如触摸.鼠标和触控笔)的位置和移动.第二层具有手势,其描述由一个或多个指针移动组成的语义动作. 指针指针代表用户 ...
- js--深拷贝与浅拷贝
对象:只针对于Object和Array这样的引用数据类型 说明:浅拷贝只复制指向某个对象的指针,而不是复制对象的本身,新旧对象还是共享一块内存.但深拷贝会另外创造一个一模一样的对象,新的对象跟原对象不 ...