“基础:SqlSession的使用范围”的版本间差异
跳到导航
跳到搜索
(清空全部内容) 标签:清空 |
无编辑摘要 |
||
第1行: | 第1行: | ||
[[category:Mybatis]] | |||
__TOC__ | |||
== 关于 == | |||
SqlSession、SqlSessionFactory 与 SqlSessionFactoryBuilder: | |||
# SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等(通过几个对象完成)。 | |||
# SqlSession是通过SqlSessionFactory创建; | |||
# SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建(根据配置配置文件流)。 | |||
实例代码: | |||
<syntaxhighlight lang="java"> | |||
public class Mybatis_first { | |||
//会话工厂 | |||
private SqlSessionFactory sqlSessionFactory; | |||
@Before | |||
public void createSqlSessionFactory() throws IOException { | |||
// mybatis配置文件 | |||
String resource = "SqlMapConfig.xml"; | |||
// 得到配置文件流 | |||
InputStream inputStream = Resources.getResourceAsStream(resource); | |||
// 使用SqlSessionFactoryBuilder从xml配置文件中创建SqlSessionFactory | |||
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); | |||
} | |||
public void testFindUserById() { | |||
// 数据库会话实例 | |||
SqlSession sqlSession = null; | |||
try { | |||
// 创建数据库会话实例sqlSession | |||
sqlSession = sqlSessionFactory.openSession(); | |||
// SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等 | |||
// selectOne | |||
User user = sqlSession.selectOne("test.findUserById", 10); | |||
// selectList | |||
List<User> list = sqlSession.selectList("test.findUserByUsername", "张"); | |||
// insert | |||
sqlSession.insert("test.insertUser", user); | |||
// update | |||
sqlSession.update("test.updateUser", user); | |||
// delete | |||
sqlSession.delete("test.deleteUserById",18); | |||
... | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} finally { | |||
if (sqlSession != null) { | |||
sqlSession.close(); | |||
} | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
== SqlSessionFactoryBuilder == | |||
用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory生产,所以可以将SqlSessionFactoryBuilder当成一个工具类使用,'''最佳使用范围是方法范围,即方法体内局部变量'''; | |||
== SqlSessionFactory == | |||
是一个接口,定义了openSession的不同重载方法,SqlSessionFactory的'''最佳使用范围是整个应用运行期间''',一旦创建后可以重复使用,通常以'''单例模式'''管理SqlSessionFactory; | |||
== SqlSession == | |||
是一个面向用户的接口, sqlSession中定义了数据库操作,默认使用'''DefaultSqlSession'''实现类;<br/> | |||
每个线程都应该有它自己的SqlSession实例。SqlSession的实例'''不能共享使用,它也是线程不安全的'''。因此'''最佳的范围是请求或方法范围'''。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。<br/> | |||
打开一个 SqlSession;'''使用完毕就要关闭它'''。通常把这个关闭操作放到 finally 块中以确保每次都能执行关闭。如下: | |||
<syntaxhighlight lang="java"> | |||
SqlSession session = sqlSessionFactory.openSession(); | |||
try { | |||
// do work | |||
} finally { | |||
session.close(); | |||
} | |||
</syntaxhighlight> |
2020年10月10日 (六) 00:39的最新版本
关于
SqlSession、SqlSessionFactory 与 SqlSessionFactoryBuilder:
- SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等(通过几个对象完成)。
- SqlSession是通过SqlSessionFactory创建;
- SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建(根据配置配置文件流)。
实例代码:
public class Mybatis_first {
//会话工厂
private SqlSessionFactory sqlSessionFactory;
@Before
public void createSqlSessionFactory() throws IOException {
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 使用SqlSessionFactoryBuilder从xml配置文件中创建SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public void testFindUserById() {
// 数据库会话实例
SqlSession sqlSession = null;
try {
// 创建数据库会话实例sqlSession
sqlSession = sqlSessionFactory.openSession();
// SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等
// selectOne
User user = sqlSession.selectOne("test.findUserById", 10);
// selectList
List<User> list = sqlSession.selectList("test.findUserByUsername", "张");
// insert
sqlSession.insert("test.insertUser", user);
// update
sqlSession.update("test.updateUser", user);
// delete
sqlSession.delete("test.deleteUserById",18);
...
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
SqlSessionFactoryBuilder
用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory生产,所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围,即方法体内局部变量;
SqlSessionFactory
是一个接口,定义了openSession的不同重载方法,SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理SqlSessionFactory;
SqlSession
是一个面向用户的接口, sqlSession中定义了数据库操作,默认使用DefaultSqlSession实现类;
每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。
打开一个 SqlSession;使用完毕就要关闭它。通常把这个关闭操作放到 finally 块中以确保每次都能执行关闭。如下:
SqlSession session = sqlSessionFactory.openSession();
try {
// do work
} finally {
session.close();
}