什么是MyBatis
MyBatis是一款优秀的持久层框架,用于简化JDBC开发。
持久层:负责将数据保存到数据库的那一层代码
javaEE三层架框:表现层、业务层、持久层
框架:
框架就是一个半成品软件,是一套可重用的通用的软件基础代码模型,在框架的基础之上构建软件编写更加高效,规范,通用,可扩展。
JDBC缺点:
1.硬编码:注册驱动,获取连接,SQL语句
2.操作繁琐:手动设置参数,手动封装结果集
MyBats免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。
解决SQL映射文件的警告提示:
产生原因:IDEA和数据库没有建立连接,不识别表信息
解决方式:在IDEA中配置MySQL数据库连接。
Mapper代理开发
目的:解决原生方式中的硬编码, 简化后期执行SQL
1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下。
2.设置SQL映射文件的namespace属性为Mapper接口全限定名
3.在Mapper接口中定义方法,方法名就是SQL映射文件中SQL语句的id,并保持参数类型和返回值类型一致。
4.编码
(1)通过sqlSession的getMapper方法获取Mapper接口的代理对象。
(2)调用对应方法完成sql的执行。
细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。
参数占位符
1.#{}:会将其替代为?,为了防止SQL注入。
2.${}:拼接SQL,会存在SQL注入问题
3.使用时机:
(1)参数传递的时候:#{}
(2)表名或者列名不固定的情况下:${}会存在SQL注入问题
参数类型parameterType:可以省略
特殊字符处理:
(1)使用转义字符
(2)CDATA区
MyBatis参数封装
单个参数 | PoJo类型 | 直接使用属性名金和参数占位符名称一致 | |
Map集合 | 直接使用键名和参数占位符一致 | ||
可以使用@Param注解,替换Map集合中默认的arg0键名 | Colelction | 封装为Map集合,arg0和collection两个名 | |
List | 封装为Map集合,arg0,collection和list三个名 | ||
Array | 封装为Map集合,arg0和array两个名 | ||
其他类型 | 直接使用 |
多个参数:封装为Map集合,可以使用@Param注解,替换Map集合中默认的arg0和param键名
注解完成增删改查
使用注解开发会比配置文件开发更加方便
查询:@Select
添加:@Insert
修改:@Update
删除:@Delete
@Select("select * from tb_user where id = #{id}")
public User selectByld(int id);
提示:注解完成简单功能,配置文件完成复杂功能
使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,java注解不仅力不从心,还会让你本就复杂的SQL语句更加混乱不堪。