Mybatis简单使用

Mybatis 映射文件

  • #{id} ,该形式是采用数据库预处理形式传入查询参数,在SQL中以? 标示,是一个参数占位符

  • ${column} 字符串替换,Mybatis不会对传入的参数进行转义,缺点是有SQL注入的危险

//常规查询
@Select("select * from user where id = #{id}")
User findById(@Param("id") long id);

@Select("select * from user where name = #{name}")
User findByName(@Param("name") String name);

//Mybatis用${column}进行字符串替换,一句即可替代多句SQL查询语句
@Select("select * from user where ${column} = #{value}")
User findByColumn(@Param("column") String column, @Param("value") String value);
  • association 关联元素,处理有一个类型关系,一对一

    • 关联的select查询,有N+1 问题(你执行了一个单独的 SQL 语句来获取结果的一个列表(就是“+1”)对列表返回的每条记录,你执行一个 select 查询语句来为每条记录加载详细信息(就是“N”)),解决方案,延迟加载
    • 关联的嵌套查询,将查询结果封装在结果集(resultMap),在association标签体中嵌套resultMap。一对多 情况时,可一使用多个accociation标签,标签体内用columnPrefix属性区别不同的resultMap。从Mybatis3.2.3版本开始可以使用resultSets属性,处理这个问题
  • collection 集合

    • 集合的嵌套Select查询 ofType 属性用来将JavaBean字段的属性类型和集合存储类型区分开来
    • 集合的嵌套结果映射
    • 多结果集(ResultSet)

缓存

  • 默认开启一级缓存,只对一个会话中的数据进行缓存
  • 开启二级缓存,SQL映射文件中添加<cache/> 标签

动态SQL

  • if
  • choose (when, otherwise)
  • trim (where, set)
posted @ 2020-04-19 17:12  雪梨加冰  阅读(115)  评论(0编辑  收藏  举报