2.Mybatis工厂与会话

mybatis的工厂模式

        // 创建 SqlSessionFactory
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  • SqlSessionFactory:一个用于生产 SqlSession对象的工厂

1.不能自己 new 一个 SqlSession  

SqlSession session = new SqlSession() ???

2.一般来说,工厂要定义为全局实例

3.在创建一个工厂时,要指定一些配置文件

- mybatis-config.xml

-mybatis-mapper.xml

注意: MyBatis里指定资源文件里,路径前不加 

//应该这样写
String resource = "mybatis-config.xml";
//而不是
String resource = "/mybatis-config.xml";

mybatis会话

  • SqlSession :代表了对数据库的一次访问 ,相当于 c3p0里的 Connection 对象

打开会话  session = factory.openSession()…

执行SQL  session.xxx(…)

执行SQL  session.xxx(…)

关闭会话  session.close()

 

  • 会话的使用惯例:

1.在需要的时候就创建一个会话

2.用完了就立即关闭它

以上用法可以参照 MyBatis 的官方文档

 

  • SqlSesion 的一般用法:

第1种写法:try..finally

SqlSession session = sqlSessionFactory.openSession();
try 
{
    // do work
}
finally 
{
    session.close();
}

无论 try { } 里有没有出错,总是保证finally{}被执行。这种方式,可以保证session.close() 总是被执行。

第2种写法: try-with-resources(mybatis官方推荐写法)

一般形式:

try ( resource ) {
// do work
}

这种语法自Java 1.7 引入,称为 try-with-resources,一般用于各种资料句柄的自动关闭。要求小括号里的resource对象必须实现了 java.lang. AutoCloseable接口。语法上会保证,在执行完 try { … } 中的语句之后,总是执行resource.close()方法。

package my;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Test
{
	public static void main(String[] args) throws Exception
	{
		// 创建 SqlSessionFactory
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

		// 使用简化的try-with-resources语法,等效于try..finally语句
		try (SqlSession session = sqlSessionFactory.openSession())
		{
			Student row = session.selectOne("af.test.getStudent", 20190001);
			if (row != null)
				System.out.println(row.id + "," + row.name + "," + row.sex + "," + row.cellphone);
		}
		System.out.println("Exit");
	}

}

在小括号里获取了一个 SqlSession 对象,而SqlSession类是实现了AutoCloseable接口的,所以语法上符合try-with-resource的规定。它会保证session.close()总是被执行,和try..finally是等效的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值