一、Mybatis的概述
1. 框架是什么?
1.1 半成品: 框架的作者给你封装了很多固定的内容,你提供一些可变的数据就能完成一项 工作
1.2 经过验证的: 市面上的框架都应该是经过了企业级项目验证的
1.3 具备一定功能的: 每种框架都是用来解决问题的
2. 框架的作用?
2.1 简化开发: 让程序员少写、不写繁琐的、固定的、重复的代码
2.2 降低耦合
2.3 规范开发
3. 持久层学习了哪些技术,各有什么缺点?
3.1 JDBC:
3.1.1 代码太繁琐、重复代码太多
3.1.2 连接无法复用
3.1.3 硬编码问题(数据库环境信息、sql信息)
3.1.4 结果集的解析和封装代码非常繁琐
3.2 DBUtils:
优点:
3.2.1 底层封装了JDBC代码,让重复代码变少了,开发更加简单
3.2.2 配合连接池一起使用,从而解决连接无法复用的问题
3.2.3 配合连接池一起使用的话,数据源信息(driver、username、password、url)就都写在连接池的配置文件中
3.2.4 它底层的结果集解析和封装交给ResultSetHandler去完成,使用者就不用关心结果集的解析和封装代码
缺点:
3.2.1 如果不进行二次封装,持久层是直接依赖dbutils框架的,增强了程序的耦合度
3.2.2 功能较为简单: 例如无法执行性查询自增长主键
3.2.3 SQL信息是以硬编码的方式写在Java代码中
4. 为什么我们要学习Mybatis(优势)?
4.1 Mybatis 封装了所有的JDBC代码,我们在使用Mybatis的时候甚至可以一句代码不写(持久层只需要提供接口,不需要实现类)
4.2 Mybatis内置连接池,解决连接复用问题
4.3 Mybatis底层会解析结果集、封装结果集
4.4 Mybatis 的全局配置文件中可以配置数据源信息(driver、username、password、url)
4.5 Mybatis的映射配置文件中可以配置SQL信息
4.6 Mybatis 功能强大: 动态SQL在持久层完成复杂操作、缓存、懒加载等等
5. 什么是Mybatis
5.1 Apache开发的,最早这个项目的名字叫做iBatis
5.2 Mybatis是一个半自动的ORM框架
6. 什么是ORM?
Object Relational Mapping 对象关系映射
7. 什么是半自动? 什么是全自动?
7.1 如果需要自己编写SQL语句才能建立ORM映射那就是半自动
7.2 如果不需要自己编写SQL语句框架自动给你建立ORM映射关系就是全自动
二、Mybatis的入门
1. 目标: 执行根据id查询一条数据,将结果集封装到POJO
2. 回顾一下POJO应该具备一些东西:
2.1 属性私有
2.2 为私有属性提供公有的get和set方法
2.3 重写toString()方法,便于打印
2.4 必须有无参构造函数,可以有有参构造函数
2.5 基本数据类型建议声明成包装类型
3. 数据建模:
3.1 物理建模: 创建数据库、创建表
3.2 逻辑建模: 创建POJO
4. 命名规则:
4.1 表的字段采用"_"命名,例如:emp_name、emp_id、emp_salary
4.2 POJO类的属性采用驼峰命名法,例如: empName、empId、empSalary
4.3 表名通常以t: t_user、t_emp等等
5. 创建持久层接口
6. 引入数据库相关依赖
7. 创建mybatis的全局配置文件: 配置数据库环境信息
7.1 全局配置文件的路径,建议放在resources根目录下
7.2 全局配置文件的名字任意,建议叫做mybatis-config.xml
7.3 引入全局配置文件的约束(方便编写的时候提示)
7.4 配置数据库环境信息
8. 创建mybatis的映射配置文件: 配置SQL信息
8.1 一个持久层接口就对应一个映射配置文件,映射配置文件的文件名建议和持久层接口的名字保持一致
8.2 映射配置文件的路径,建议放在resources/mappers文件夹下
8.3 引入映射配置文件的约束(方便编写的时候提示)
8.4 建立映射配置文件与接口的对应: 映射配置文件的根标签mapper中的namespace属性的值设置为对应接口的全限定名
8.5 在映射配置中建立起与接口中的方法的对应:
8.5.1 类型对应: 查询方法就对应select标签
8.5.2 名称对应: 方法名对应标签的id属性
8.5.3 返回值类型对应(只针对查询方法): 标签的resultType属性对应方法返回值的全限定名
8.6 在标签体中编写要执行的SQL语句, 在SQL语句中使用#{}获取方法传入的参数
9. 在全局配置文件(mybatis-config.xml)中加载映射配置文件
10. 编写测试代码
三、使用mybatis的步骤总结
1. 引入依赖: mysql驱动、mybatis的依赖
2. 创建POJO(使用lombok)
3. 创建持久层接口,在持久层接口中编写方法。
4. 创建mybatis的全局配置文件:
4.1 环境信息配置
4.2 指定要加载的映射配置文件路径
5. 创建mybatis的映射配置文件(真正的核心):
5.1 建议放在resources/mappers目录下
5.2 文件名建议和对应的接口名一致
5.3 建立映射配置文件与接口的对应关系: mapper标签的namespace的值为接口的全限定名
5.4 接口中的方法与映射配置文件中的子标签建立对应关系: 类型对应、名称对应
6. 编写测试代码
四、引入日志框架(不喜欢可以不加,加了有助于我们发现错误)
1. 引入log4j的依赖
2. log4j的配置文件必须放在resources根路径下
3. log4j配置文件的文件名必须叫做log4j.xml或者log4j.properties
五、参数输入
1. 要往SQL中传入一个数据: 使用单个简单类型参数, #{任意字符串}获取
在有的mybatis的版本中,就算是单个简单类型参数,我们也要使用@Param("取名")然后根据名 字获取
2. 要往SQL中传入多个数据
2.1 多个简单类型的参数
2.1.1 #{arg0}
2.1.2 #{param1}
2.1.3 使用@Param("取名"),然后#{名}
2.2 POJO类型参数中封装多个数据: #{POJO的属性名}
2.3 Map类型参数封装多个数据: #{Map的key}
3. #{}获取参数与${}获取参数的对比
3.1 区别:
3.1.1 #{} 在SQL语句中用问号占位符,获取参数之后再往SQL语句设置参数
3.1.2 ${} 直接将参数拼接在SQL语句中
3.2 怎么选择?
3.2.1 绝大部分情况是使用#{}
3.2.2 如果表名、字段名这些需要动态传入到SQL语句中,此时只能用${}直接拼接
因为"?"占位符不能用在表名、字段名的地方