MyBatis
MyBatis 是一款优秀的持久层框架,用于简化JDBC开发
持久层
JavaEE三层架构:表现层 业务层 持久层
框架
框架的基础上构建软件编写更加高效 规范 通用 可扩展
Mapper代理开发
- 目的
解决原生方式中的硬编码
简化后期执行sql
Mybatis核心配置文件
environments 环境 可以配置多个环境(多个数据库) 通过default属性切换不同的environment
细节: 配置环境各个标签 需要遵循先后顺序
sql片段
<sql id=" "> sql片段 < /sql> 使用: <include refid=" "/ >
resultMap
<resultMap id=" " type=" ">
<id colum=" 列名" property="属性名" /> 完成主键映射
<result colum=" 列名" property="属性名" /> 完成一般字段映射
</resultMap>
参数占位符
- #{} : 会将其替换为? 防止SQL注入
- ${} :拼SQL 存在SQL注入问题
- 使用时机: 参数传递的时候:#{} ; ${}: 表名列名不固定的情况下 会存在SQL注入问题
参数类型:parameterType 可以省略
特殊字符处理:1.转义字符:< 2.CDATA区
条件查询
- 参数结构
1.散装参数:如果方法中有多个参数,需使用@Param(“参数占位符名称”)
2.对象参数:对象的属性名称要和参数占位符名称一致
3.map集合参数 只需保证sql参数经和map集合键值对应
动态条件查询
- 条件查询 if
test: 逻辑表达式
问题:第一个条件不需要逻辑运算符
解决方式:1利用恒等式避免多余and
2 < where >标签替换where关键字
单条件 动态条件查询
- 从多个条件中选择一个
choose(when,otherwise):选择
MyBatis 事务
- openSession() 默认开启事务,进行增删改查操作后需要使用sqlSession.commit() 手动提交事务
- openSession(true) 可以设置自动提交事务
增删改查
- 返回添加数据的主键
< insert userGeneratedKeys=“true” keyProperty=“id” >
-批量删除
< foreach collection=“array” item=“id” separator=“,” open=“(” close=“)”> < /foreach>
mybatis 会将数组参数 封装一个Map集合
默认: array=数组
使用@Param注解改变map集合的默认key的名称
MyBatis 参数传递
MyBatis采用ParamNameResolver类进行参数封装
注解完成增删改查
@Select 查询
@Insert 添加
@Update更新
@Delete更新
只能使用简单的SQL语句