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 ...
随机推荐
- 控制台出现“The script has an unsupported MIME type ('text/html')”报错
有时候开发React或者Vue项目时,本地运行访问时,会莫名出现报错如下: The script has an unsupported MIME type ('text/html') 这是由于无意中开 ...
- React-typescript-antd 常见问题
一.The key 'Accept' is not sorted alphabetically //tslint.json { "extends": ["tslint:r ...
- 详解PHP中foreach
foreach有两种语法: 第一种:遍历给定的 数组语句 array_expression 数组.每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下 ...
- mika的模板库
二分图最大匹配: 1.匈牙利算法:注意dfs中是dfs(c[w[i]]),搜索的是与之匹配的点. #include<cstdio> #include<cstring> ],w[ ...
- caffe常用
1. 关闭模型froward信息 os.environ[' #注意要在improt caffe之前 2. 学习率 step: 配合stepsize,迭代次数达到stepsize的整数倍改变一次, ba ...
- mysql知识点汇总
1. 数据库的安装 2. 数据库设计需要注意什么 3. SQL语句优化 4. 怎样处理慢查询? 5. 怎样更好的利用数据库索引? 6. 事务隔离级别有哪些?怎么实现的? 7. 数据库锁有哪些? 8. ...
- vue获得当前页面URL动态拼接URL复制邀请链接方法
vue获得当前页面URL动态拼接URL复制邀请链接方法 当前页面完整url可以用 location.href路由路径可以用 this.$route.path路由路径参数 this.$route.par ...
- IP通信基础学习第三周(下)
TTL的最值是255. 数据部分不参与检验和的计算. 接收端的结果若为0,则保留:否则,会丢弃该数据报. IP数据报选项字段是可选的,主要用于网络测试和调试. IP辅助协议ICMP的消息类型有错误消息 ...
- c语言的一些易错知识积累
1. #ifdef 和#if defined 的区别: 后者可以组成复杂的预编译条件,而如果判断的是单个宏定义的时候,两种用法的效果都是一样的. 2.#if 0 { code }#endif ...
- java线程学习之synchronized关键字
关键字synchronized的作用是实现线程间的同步.它的任务是对同步的代码加锁.一个代码块同时只能有同一个线程进行读和写操作,从而保证线程间是安全的. 线程安全的概念是:当多个线程访问某一个类(对 ...