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. mysql----------原生的sql里面如何根据case then排序

    1.按照三个字段都符合条件来排序 ORDER BY (    CASE    WHEN is_top = 1    AND top_end_time>UNIX_TIMESTAMP()    AN ...

  2. SV-assertion

    断言(assert)是一种描述性语言,通过描述的期望结果来进行仿真验证. 断言有一个更加基础的信息,我们称为属性(property),属性可以作为断言结果,功能覆盖点,形式检查和约束随机激励生成. 断 ...

  3. struts2 在 Action 或 Interceptor 中获取 web.xml 中配置的 <context-param> 参数 (这是我的第一篇博文,哈哈。)

    最近为了改一个问题,想加一个控制开关,就在web.xml 中配置了一个 <context-param> 参数,并在 Action 或 Interceptor 中获取参数值. 1.在 web ...

  4. [dart学习]第三篇:dart变量介绍 (二)

    本篇继续介绍dart变量类型,可参考前文:第二篇:dart变量介绍 (一) (一)final和const类型 如果你不打算修改一个变量的值,那么就把它定义为final或const类型.其中:final ...

  5. 在java中实现数据导入excel表格中

    1.首先前端代码如下: 一个导出按钮:<input id="export" class="btn btn-primary" type="butt ...

  6. es2018(es9)前瞻

    命名捕获 语法 : ?<name> 一:举个栗子 我们要把从2018-05-20取出年月日 1:普通方法 let str = '2018-05-20'; let reg1 = /(\d{4 ...

  7. BIOS备忘录之SPI(fingerprint)设备

    Reset和INT信号使用的是GPIO功能,需要显式的使用(INT信号使用了GPIO的int number,RST信号使用了GPIO的absolute number): 问题举例 漏电导致功能异常:在 ...

  8. php高精度计算问题

    从事金融行业,资金运算频繁,这里说下我遇到的坑....稍不留神,用户资金可能损失几十万,甚至更可怕......直接上实例吧: javascript 0.1 + 0.2 为啥不等于 0.3 ? (正确结 ...

  9. 自制操作系统Antz(9)——实现内核 (下) 实现图形化界面

    Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...

  10. 洲阁筛 & min_25筛学习笔记

    洲阁筛 给定一个积性函数$F(n)$,求$\sum_{i = 1}^{n}F(n)$.并且$F(n)$满足在素数和素数次幂的时候易于计算. 显然有: $\sum_{i = 1}^{n} F(n) = ...