MyBatis对象分析及创建工具类
目录
一、MyBatis 对象分析1. Resources 类mybatis中的一个类, 负责读取主配置文件,返回 IO 流对象
2. sqlSessionFactoryBuilder类sqlSessionFactory 的 创 建 , 需 要 使 用 sqlSessionFactoryBuilder 对 象 的 build() 方 法 。 由 于sqlSessionFactoryBuilder 对象在创建完工厂对象后,就完成了其历史使命,即可被销毁。 所以,一般会将该 sqlSessionFactoryBuilder 对象创建为一个方法内的局部对象,方法结束,对象销毁
3. sqlSessionFactory接口重量级对象, 程序创建一个对象耗时比较长,使用资源比较多,是线程安全的, 在整个项目中,有一个就够用了 sqlSessionFactory作用: 获取sqlSession对象
openSession()方法说明:
对于 insert 、delete、update 如果使用的无参数的,那么需要在执行完sql语句之后,手动的提交事务 4. sqlSession 接口sqlSession 接口对象用于执行持久化操作。 sqlSession接口 :定义了操作数据的方法 例如 selectOne(),selectList(),insert(),update(),delete(),commit(),rollback() 在IDEA中 Ctrl + H就可以看到实现类 需要注意: sqlSession对象不是线程安全的,需要在方法内部使用, 在执行sql语句之前,使用openSession()获取sqlSession对象。 这样的话在看之前写的操作就懂了 @H_502_99@public void testInsert() throws IOException {
// 访问mybatis读取student数据
//1.定义mybatis主配置文件的名称,从类路径的根开始(target/clasess),编译之后的目录
String config = "mybatis.xml";
//2.读取这个config表示的文件
InputStream in = Resources.getResourceAsStream(config);
//3.创建了sqlSessionFactoryBuilder对象
sqlSessionFactoryBuilder builder = new sqlSessionFactoryBuilder();
//4.创建sqlSessionFactory对象
sqlSessionFactory factory = builder.build(in);
//5.获取sqlSession对象,从sqlSessionFactory中获取sqlSession
sqlSession sqlSession = factory.openSession();
//6.【重要】指定要执行的sql语句的标识。 sql映射文件中的namespace + "." + 标签的id值
// String sqlId = "com.md.dao.StudentDao"+"."+"selectStudents";
String sqlId = "com.md.dao.StudentDao.insertStudent";
//7.【重要】执行sql语句,通过sqlId找到语句
// 第一个参数是执行的sql语句,第二个是对象
int i = sqlSession.insert(sqlId,new Student(1004,"刘桑","ls@qq.com",18));
// 需要注意,mybatis默认不是自动提交事务,所以在写完insert、update、delete之后,手动的提交事务
sqlSession.commit();
//8.输出结果
System.out.println("执行insert影响的行数:"+i);
//9.关闭sqlSession对象
sqlSession.close();
}
二、创建工具类1. 创建 MyBatisUtils类在com.md下新建一个包utils,里面创建MyBatisUtils 至于为什么使用静态代码块,主要看sqlSessionFactory接口的特性 @H_502_99@package com.md.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.sqlSession;
import org.apache.ibatis.session.sqlSessionFactory;
import org.apache.ibatis.session.sqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
/**
* @author MD
* @create 2020-08-05 10:59
*/
public class MyBatisUtils {
private static sqlSessionFactory factory = null;
// 保证了sqlSessionFactory对象只创建一次
static {
// 和你项目的主配置文件名一致
String config = "mybatis.xml";
// 读取这个config表示的文件
try {
InputStream in = Resources.getResourceAsStream(config);
// 创建了sqlSessionFactory对象,使用创建了sqlSessionFactoryBuilder对象
factory = new sqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取sqlSession的方法
public static sqlSession getsqlSession() {
sqlSession sqlSession = null;
if (factory != null){
// 非自动提交事务
sqlSession = factory.openSession();
}
return sqlSession;
}
}
2. 使用MyBatisUtils@H_502_99@public static void main(String[] args) {
sqlSession sqlSession = MyBatisUtils.getsqlSession();
String sqlId = "com.md.dao.StudentDao.selectStudents";
List<Student> studentList = sqlSession.selectList(sqlId);
studentList.forEach(stu -> System.out.println(stu));
sqlSession.close();
}
这样就方便很多,只用专注于写sql就行了 (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |