- MyBatis框架的引言
a) MyBatis框架的基本概念
MyBtis是一个持久层框架,完成是对数据库的访问,操作 (CRUD)。
b) MyBatis解决了什么问题
解决JDBC访问,操作数据库过程中存在的问题,他是对原有JDBC技术的封装。
JDBC访问和操作数据库存在问题:
- 大量的代码冗余 (JdbcTemplate)
- 手工的处理ORM (麻烦)
- 没有对访问数据进行优化 (Cache)
c) MyBatis核心的编程思路
- 第一个MyBatis程序的开发(Hello World)
a) 环境的搭建 (OpenSource)
- Ibatis 是 MyBatis前身 apache组织
- Ibatis3.0 改名 MyBatis google code
- MyBatis 属于 Github
- 导入jar包
a) Mybatis 核心jar
b) 第三方依赖 lib目录
c) Oracle驱动jar ojdbc14.jar
- 引入配置文件
a) log4j.properties【可选】 放置位置 src根下
日志的配置文件 把MyBatis框架运行过程的日志信息打印出来
目的:关注MyBatis运行过程。
b) mybatis-config.xml 放置位置 随便 建议放置在src 根下
配置的是MyBatis运行相关的一些参数。
c) Mapper文件
实现DAO接口
注意 Mapper文件的名字 随便 放置位置 随便
- 初始化配置
mybatis-config.xml配置
a) 数据库连接相关的参数 (username password driver url)
b) Mapper文件注册
b) MyBatis Core API
- Resource
作用:读取mybatis相关配置文件的。打开IO - SqlSessionFactory
作用:通过SqlSessionFactory 这个工厂 创建SqlSession - SqlSession
作用:1 根据程序员书写的mapper文件,自动的创建mapper文件对应的Java类(DAO接口的实现类)
2 SqlSession 内部 封装 Connection对象 (一一对应的关系)
3 SqlSession 控制事务 SqlSession.commit(); ---- Connection.commit();
SqlSession.rollback(); ---- Connection.rollback();
注意:实战中 查询操作 不需要控制事务
增删改操作 必须要控制事务
c) MyBatis的标准开发步骤
- Table
- Entity
- DAO接口
- Mapper文件做DAO层的实现
- Mapper文件的注册 (mybatis-config.xml注册)
- 测试 通过MyBatis核心的API 运行程序
- Resource
- SqlSessionFactory
- SqlSession
- MyBatis单表操作的Mapper文件
a) 集合类型(List)的返回值 Mapper处理方式
DAO接口中定义的方法返回值List<User>
b) 参数绑定
当DAO方法中只存在一个参数时,这个参数变量的名字与Mapper文件#{}名字没有任何关系
在书写Mapper文件时,可以通过#{下标} 下标起始自0 代表第一个参数 后续参数以此类推
处理多参数查询时
- 通过#{下标} 可读性差
- 通过注解的方式进行参数绑定
(@Param(value=”name”)String name,@Param(value=”password”)String password)
- 老炮儿专属处理多参的方式 应用Map处理多参
例子:
DAO
Mapper
测试类
c) 修改
d) 删除
e) 插入
- 在数据库底层 创建sequence
- Mysql创建序列
CREATE TABLE emp_seq ( seq VARCHAR(8));
INSERT INTO emp_seq VALUES('0');
UPDATE emp_seq SET seq = LAST_INSERT_ID(seq+1);
SELECT LAST_INSERT_ID();
- 需要从dual表 获得id的值
select suns_seq.nextval from dual; - Mapper文件的书写
MySQL写法
- MybatisUtil工具类的封装
a) Resources类的特点:读取配置文件 (mybatis-config.xml) IO
建议:一次性 通过IO读取 所有的数据
b) SqlSessionFactory类的特点:创建SqlSession
特点:重量级资源 内存占用多 功能多 每一个应用只创建一个对象 线程安全
c) SqlSession 特点 轻量级资源 不能被多线程共享
- 创建DAO接口的实现类 (动态代理设计思想 动态字节码技术)
- SqlSession内部封装Connection 一一对应 SqlSession.close() - conn.close()
- 事务控制 SqlSession.commit() SqlSession.rollback();
基础版本:
线程绑定版本
Private static final ThreadLocal<SqlSession> tl = new ThreadLocal<SqlSession>();
加事务管理
封装getMapper
封装完成,使用
- Struts2+MyBatis整合 (SM项目)
核心思路:在JavaEE编程结构中,根据框架的特点进行合理的使用。
注册
编程:- 环境搭建
引入jar包 jar包冲突问题
引入配置文件
初始化配置 struts2 web.xml filter
mybatis-config.xml - 开发步骤
- 环境搭建