- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
insert 操作
(1) StudentDao 接口中增加方法
int insertStudent(Student student);
(2) StudentDao.xml 加入 sql 语句
(3) 增加测试方法
MyBatis 对象分析
对象使用
SqlSession , SqlSessionFactory 等
(1) Resources 类
Resources 类,顾名思义就是资源,用于读取资源文件。其有很多方法通过加载并解析资源文件,返回不同类型的IO 流对象。
(2) SqlSessionFactoryBuilder 类
SqlSessionFactory 的创建,需要使用 SqlSessionFactoryBuilder 对象的build()方法。由于 SqlSessionFactoryBuilder 对象在创建完工厂对象后,就完成了其历史使命,即可被销毁。所以,一般会将该 SqlSessionFactoryBuilder 对象创建为一个方法内的局部对象,方法结束,对象销毁。
(3) SqlSessionFactory 接口
SqlSessionFactory 接口对象是一个重量级对象(系统开销大的对象),是线程安全的,所以一个应用只需要一个该对象即可。创建 SqlSession 需要使用SqlSessionFactory 接口的的openSession()方法。
openSession(true):创建一个有自动提交功能的 SqlSession
openSession(false):创建一个非自动提交功能的 SqlSession,需手动提交
openSession():同 openSession(false)
(4) SqlSession 接口
SqlSession 接口对象用于执行持久化操作。一个 SqlSession 对应着一次数据库会话,一次会话以 SqlSession 对象的创建开始,以 SqlSession 对象的关闭结束。
SqlSession 接口对象是线程不安全的,所以每次数据库会话结束前,需要马上调用其 close()方法,将其关闭。再次需要会话,再次创建。 SqlSession 在方法内部创建,使用完毕后关闭。
创建工具类
(1) 创建 MyBatisUtil 类
package com.bjpowernode.common;
(2) 使用 MyBatisUtil 类
MyBatis 使用传统 Dao 开发方式
使用Dao 的实现类,操作数据库
Dao 开发
(1) 创建 Dao 接口实现类
public class StudentDaoImpl implements StudentDao
(2) 实现接口中 select 方法
测试查询操作:
MyBatisTest 类中创建StudentDaoImpl 对象
(3) 实现接口中 insert 方法
测试insert
传统Dao 开发方式的分析
在前面例子中自定义Dao 接口实现类时发现一个问题:Dao 的实现类其实并没有干什么实质性的工作,它仅仅就是通过 SqlSession 的相关 API 定位到映射文件mapper 中相应 id 的 SQL 语句,真正对 DB 进行操作的工作其实是由框架通过mapper 中的 SQL 完成的。
所以,MyBatis 框架就抛开了Dao 的实现类,直接定位到映射文件mapper 中的相应 SQL 语句,对DB 进行操作。这种对Dao 的实现方式称为Mapper 的动态代理方式。
Mapper 动态代理方式无需程序员实现Dao 接口。接口是由 MyBatis 结合映射文件自动生成的动态代理实现的。