Mybatis

MyBatis

定义

  • 半自动ORM框架(手动编写sql查询关联集合),封装了JDBC,可以直接编写原生SQL。
  • 通过xml和注解来配置原生信息,映射POJO与数据库中的记录。
  • 通过xml文件或注解配置statement,通过映射生成最终的sql,mybatis执行sql并将结果映射为java对象返回。

#{}和${}

  • {}:预编译处理,可以有效地防止sql注入。

  • ${}:字符串替换。

如何映射属性和表字段

  • 驼峰转换
  • resultMap映射
    • type映射类,id映射表名
    • 主键id: property映射属性,column映射字段
    • 非主键result: property映射属性,column映射字段

Xml映射文件的Dao接口原理

  • Dao接口即Mapper接口。
  • namespace映射接口的路径
    • id映射方法名称。
    • resultType映射返回类型。

分页插件的原理

  • 在插件的拦截方法内拦截待执行的sql。
  • 根据dialect方言重写sql,添加对应的物理分页语句和物理分页参数。

Mybatis的sql执行结果封装

  • resultMap标签定义映射关系。 sql列的别名功能。
  • 通过反射创建对象,为对象的值逐一赋值并返回。

获取自动生成的键值

  • insert方法返回的int值代表插入的行数。
  • 自动生成的键值在insert方法执行后设置到传入的参数对象中。

Mapper传递多个参数

  • 使用#{0},代表传递dao层的第一个参数。
  • 使用@param注解。

Mybatis的动态sql

  • 原理:根据表达式的值,完成逻辑判断并动态拼接sql的功能。
  • 动态sql标签:trim | where | set | foreach | if | choose | when | otherwise | bind

Xml映射文件中常用的标签

  • resultMap标签映射实体类与数据表。
  • mapper映射方法。
  • include标签引入sql片段

Xml的id是否可以重复

  • namespace+id作为key使用,配置了namespace以后id才可以重复。

MyBatis一对一查询

  • resultMap中的association节点配置一对一的类。

  • 联合查询:几个表联合,查询一次。

  • 嵌套查询:先查一个表,通过外键id查询另一个表,另一个表的查询通过select节点配置。

MyBatis一对多查询

  • resultMap中的collection节点配置一对多的类。
  • 联合查询:几个表联合,查询一次。
  • 嵌套查询:先查一个表,通过外键id查询另一个表,另一个表的查询通过select节点配置。

延迟加载

  • lazyLoadingEnabled=true|false
  • 原理:
    • 创建目标对象的代理对象,调用目标方法时进入拦截方法。
    • 拦截器invoke()方法发现空值,则查询关联对象的sql,调用set方法填充属性。

一级缓存、二级缓存

  • 一级缓存:作用域为Session,默认打开。
  • 二级缓存:作用域为Mapper,默认关闭。类需要实现serializable序列化接口开启二级缓存。

MyBatis接口绑定的方式

  • 注解绑定:接口的方法上加上@Select,@Update。
  • xml映射文件绑定:指定namespace绑定。

MyBatis插件运行原理

  • 执行接口对象的方法时,进入拦截方法。
posted @ 2020-09-05 14:28  樱空废宅  阅读(191)  评论(0)    收藏  举报