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多参数传递,延迟加载,缓存,注解开发的更多相关文章

  1. mybatis 加载策略及注解开发

    1. 延迟策略 在需要用到数据时在加载相关数据,常用于一对多关系, 优点:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能, 缺点:当需要用到数据时,才会进行数据库查询,这样在大批量数据查 ...

  2. MyBatis(7)——使用注解开发

    说明:注解就是利用接口实现的,因此转为面向接口编程,使用接口开发拓展性好.分层开发时上层不用管理具体的实现.更加标准化更加规范.使得各个层的耦合度更低. 注:有了注释语句就不需要实体类的mapper文 ...

  3. MyBatis基础_连接池与事务、动态SQL、注解开发

    一.MyBatis连接池及事务控制 1.连接池 在实际开发中,都会使用连接池,因为它可以减少获取连接缩消耗的时间.所谓连接池,就是存储数据库连接的容器.连接池中存储一定数量的数据库连接,当线程需要使用 ...

  4. Mybatis注解开发

    mybatis 的常用注解: @Insert:实现新增 @Update:实现更新 @Delete:实现删除 @Select:实现查询 @Result:实现结果集封装 @Results:可以与 @Res ...

  5. 【MyBatis】MyBatis 注解开发

    MyBatis 注解开发 文章源码 环境搭建 Mybatis 也可以使用注解开发方式,这样就可以减少编写 Mapper 映射文件. 常用注解说明: @Insert 实现新增 @Update 实现更新 ...

  6. Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——S ...

  7. mybatis教程5(延迟加载和缓存)

    关联关系 在关系型数据库中,表与表之间很少是独立与其他表没关系的.所以在实际开发过程中我们会碰到很多复杂的关联关系.在此我们来分析下载mybatis中怎么处理这些关系 1对1关系 我们有一张员工表(T ...

  8. MyBatis(8)延迟加载&缓存

    什么是延迟加载? resultMap可以实现高级映射,association,collection具有延迟加载的功能.   当我们需要查询某个信息的时候,再去查询,达到按需查询,就是延迟加载   可以 ...

  9. MyBatis框架之注解开发

    MyBatis注解开发 @Insert注解注解属性value:写入SQL语句 @Options注解实现添加新数据的主键封装注解属性useGeneratedKeys:使用生成的主键,配置为truekey ...

随机推荐

  1. Linux运维跳槽40道面试精华题

    Linux运维跳槽40道面试精华题 运维派 3天前 1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护 ...

  2. asyncio之Coroutines,Tasks and Future

    asyncio之Coroutines,Tasks and Future Coroutines and Tasks属于High-level APIs,也就是高级层的api. 本节概述用于协程和任务的高级 ...

  3. document.wrtie()用法

    推荐看这篇文章,非常的好 http://www.softwhy.com/article-8326-1.html

  4. Cannot locate BeanDefinitionParser for element [scoped-proxy]

    指定使用 CGLIB 而不使用 JDK 生成代理对象:注意:此两个标签必须同时出现,不然会报:Cannot locate BeanDefinitionParser for element [scope ...

  5. 如何在Anoconda Prompt 安装pytorch

    一.首先需要安装好Anoconda,具体安装步骤可通过https://www.cnblogs.com/chenfeifen/p/10266012.html查看 由于官方下载更新工具包的速度很慢,因此添 ...

  6. 20175208 实验二 《Java面向对象程序设计》实验报告

    一.实验报告封面 课程:Java程序设计  班级:1752班  姓名:张家华  学号:20175208 指导教师:娄嘉鹏  实验日期:2019年4月09日~2019年4月18日 实验序号:实验二 实验 ...

  7. 3.JAVA基础复习——JAVA中的类与对象

    什么是对象: 就是现实中真实的实体,对象与实体是一一对应的,现实中每一个实体都是一个对象在. JAVA中的对象: Java中通过new关键字来创建对象. 类: 用JAVA语言对现实生活中的事物进行描述 ...

  8. Path Analyzer Pro出现raw socket问题

    使用windows7,8以及10平台运行一个traceroute liketools软件,名为Path Analyzer Pro 2.7,遇到raw socket问题,如图: 原因是raw socke ...

  9. css 修改input中placeholder提示问题颜色

    input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: rgba(74, 87, 103, 1); ...

  10. C 语言多线程与锁机制

    C 语言多线程与锁机制 多线程 #include <pthread.h> void *TrainModelThread(void *id) { ... pthread_exit(NULL) ...