MyBatis
1.什么是MyBatis
-
MyBatis是一款优秀的持久层框架, 用于简化JDBC开发
-
MyBa本是Apache的一个开源项目iBatis, 2010年这个项目由Apache software foundation迁移到了google code, 并且改名为MyBatis. 2013年11月迁移到Github
-
持久层是负责将数据保存到数据库的那一层代码
-
javaEE三层架构 : 表现层, 业务层, 持久层
-
框架是一个半成品软件, 是一套可重用的, 通用的, 软件基础代码模型
-
在框架的基础智商构建软件编写更加高效, 规范, 通用, 可扩展
2.JDBC的缺点
3.MyBatis简化
4.MyBatis快速入门
-
导入依赖坐标
-
编写MyBatis核心配置文件
-
编写SQL映射文件 --> 同意管理SQL语句, 解决硬编码问题
-
加载核心配置文件, 获取SqlSessionFactory对象
-
获取SqlSession对象, 执行SQL语句
-
释放资源
5.解决SQL映射文件的警告信息
-
产生原因 : idea和数据库没有建立连接, 不识别表信息
-
解决方式 : 在idea中配置MySQL数据库链接
6.使用Mapper代理方式完成入门案例
-
定义与SQL映射文件同名的Mapper接口, 并且将Mapper接口和SQL映射文件放置在同一目录下
-
设置SQL映射文件的namespace属性为Mapper接口全限定名
-
在Mapper接口中定义方法, 方法名就是SQL映射文件中sql语句的id, 并保持参数类型和返回值类型一致
-
编码
-
通过SqlSession的getMapper方法获取Mapper接口的代理对象
-
调用对应方法完成sql的执行
-
如果Mapper接口名称和SQL映射文件名称相同, 并在同一目录下, 则可以使用包扫描的方式简化SQL映射文件的加载
<mappers>
<! --加载sql的映射文件-->
<!--<mapper resource = "com/itheima/mapper2/UserMapper.xml">-->
<package name ="com.itheima.mapper">
</mappers>
7.MyBatis的核心配置文件详解
8.MyBatis代码步骤
9.数据库表的字段名和实体类的属性名不一样不能自动封装
-
起别名 : 对不一样的列名起别名, 然别名和实体类的属性名一样
-
缺点 : 每次查询都要定义一次别名, 不方便
-
解决方式 : 使用SQL片段 :
-
缺点 : 不灵活
-
-
resultMap : 两个标签 id标签是完成主键的映射 result是完成一般字段的映射 column是表的列名 property是实体类的属性名
-
10.参数占位符
/#{} : 会将参数替换为 ? 为了防止SQL注入 /没有意义 不用写
${} : 拼接SQL, 会存在SQL注入问题
使用时机 :
参数传递的时候 : #{}
表名或者列名不固定的情况下 : ${}
参数类型 : parameterType : 可以是省略
11.特殊字符处理
-
转义字符
-
CDATA区
12.参数接受
-
散装参数 : 如果方法中有多个参数, 需要使用@Pram("SQL参数占位符名称")
-
对象参数 : 对象的属性名称要和参数占位符名称一致
-
Map集合参数 : 只需要保证SQL中的参数名和map集合的键的名称对应上, 即可设置成功
13.动态条件查询
-
if : 条件判断
-
test : 逻辑表达式
-
问题 : 每个判断条件后面要加and 如果第一个判断条件不存在则where之后直接跟的就是and会语法报错
-
使用恒等式 在where后面拼接 1=1
-
使用<where>标签替换where关键字
-
14.多个条件中选一个
15.添加成功后主键返回
16.批量删除
mybatis会将数组参数封装成一个map集合
默认的key是array
使用@param注解改变map集合默认的key名称
16.参数封装
-
多个参数 : 封装成map集合, 可以使用@param注解设置map集合的key 使用@param注解会替换arg 使用后不能再使用arg获取值 但是param不受影响
-
map.put("arg0", 参数值1);
-
map.put("param1", 参数值1);
-
map.put("arg1", 参数值2);
-
map.put("param2", 参数值2);
-
-
单个参数
-
POJO类型 : 直接使用, 属性名和参数占位符名称一致
-
Map集合 : 直接使用, Map集合的key和参数占位符一致
-
Collection : 封装成Map集合 可以使用@param注解设置map集合的key
-
map.put("arg0", collection集合);
-
map.put("collection", collection集合);
-
-
List : 封装成Map集合 可以使用@param注解设置map集合的key
-
map.put("arg0", list集合);
-
map.put("collection", list集合);
-
map.put("list", list集合);
-
-
Array : 封装成Map集合 可以使用@param注解设置map集合的key
-
map.put("arg0", 数组);
-
map.put("array", 数组);
-
-
其他类型 : 直接使用
-