什么是MyBatis?
- MyBatis是一款优秀的持久层框架,用于简化JDBC开发
- MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由apache software doundation 迁移到了google code,并改名为MyBatis。2013年11月迁移到Github
- 官网:http://mybatis.org/mybatis-3/zh/index.html
持久层
- 负责将数据保存到数据库的那一层代码
- JavaEE三层架构:表现层,业务层,持久层
框架
- 框架就是一个半成品软件,是一套可重用的,通用的,软件基础代码模型
- 在框架的基础之上构建软件编程更加高效,规范,通用,可扩展
案例:
IDEA软件当中的mybatis查看即可
解决SQL映射文件的警报提示:
- 产生原因:Idea和数据库没有建立连接,不识别表信息
- 解决方式:在Idea中配置MySQL数据库连接
使用Mapper代理方式完成入门案例
MyBatis核心配置文件详解:
类型别名(typeAiases)
细节:配置各个标签时,需要遵循前后顺序
MyBatis完成操作需要几步:
三步:编写接口→编写SQL→执行方法
数据库表的字段名称 和 实体类的属性名称 不一样,则不能自动封装数据
1)起别名:在SQL语句中,对不一样的列名起别名,让别名和实体类的属性名一样
*可以定义<sql>片段,提高复用性
2)resultMap:定义<resultMap>完成不一致的属性名和列名映射
*参数占位符:
1.#{ }:会将其替换为?,为了防止SQL注入
2.${ }:拼sql。会存在SQL注入问题
3.使用时机:
*参数类型:parameterType:可以省略
*表名或者列名不固定的情况下,${ }会存在SQL注入问题
*参数类型:parameterType:可以省略
*特殊字符处理:
1.转义字符
2.SDATA区
查询
1.多条件查询:
2.动态条件查询:
*if:条件判断
*test:逻辑表达式
*问题:
*恒等式
SQL语句会随着用户的输入或外部条件的变化而变化,我们 称为动态SQL
MyBatis 对动态SQL有很强大的支撑:
- if
- choose(when,otherwise)
- trim(where,set)
- foreach
动态SQL:
if:用于判断参数是否有值,使用set属性进行条件判断
*存在问题:第一个条件不需要逻辑运算符
*解决方案:
1)使用恒等式让所有条件格式都一样
2)<where>标签替换where关键字
3.单条件—动态条件查询
从多个条件中选择一个
添加
1.编写接口方法:Mapper接口
- 参数:除了id之外的所有数据
- 结果:void
2.编写SQL语句:SQL映射文件
3.执行方法,测试
MyBatis事物:
openSession():默认开启事务,进行增删改查操作后需要使用sqlSession.commit();手动提交事务
openSession(true):可以设置为自动提交事务(关闭事务)
返回添加数据主键
<insert useGeneratedKeys="true" keyProprtry="id">
MyBatis参数传递
MyBatis接口方法中可以接受各种各样的参数,MyBatis底层对于这些参数进行不同的封装 的处理方式:
单个参数:
1.POJO类型:直接使用,实体类属性名 合 参数占位符名称一致
2.Map集合:直接使用,键名 和 参数占位符名称一致
3.Collection:封装为Map集合
4.List:封装为Map集合
5.Array:封装为Map集合
6.其他类型:直接使用
多个参数:封装为Map集合
MyBatis提供了ParamNameResolver类进行参数封装
建议:将来都使用@Param注解来修改Map集合中默认的键名,并使用修改后的名称来获取值,这样的可读性更高!
注解完成增删改查
使用注解开发会比配置文件开发更加方便
- 查询:@Select
- 添加:@Insert
- 修改:@Update
- 删除:@Delete
提示:
- 注解完成简单功能
- 配置文件完成复杂功能