mybatis系列:二、基本开发

mybatis api

@Test
public void deleteUser() throws IOException {
	// mybatis全局配置文件
	String resource = "SqlMapConfig.xml";
	
	// 构造全局配置文件的输入流
	InputStream inputStream = Resources.getResourceAsStream(resource);
	
	// 构造SqlSessionFactory会话工厂
	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
	
	// 创建会话
	SqlSession session = factory.openSession();
	
	// 删除用户
	session.delete("test.deleteUser", 24);
	
	// 提交事务
	session.commit();
	
	// 关闭会话
	session.close();
}

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory生产,所以可以将SqlSessionFactoryBuilder当成一个工具类使用.
最佳使用范围是方法范围即方法体内局部变量。

SqlSessionFactory

SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,默认使用DefaultSqlSessionFactory。SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用。
通常以单例模式管理SqlSessionFactory。

SqlSession

SqlSession是一个面向用户的接口,sqlSession中定义了数据库操作,默认使用DefaultSqlSession实现类。

加载过程

// 创建会话,默认实现DefaultSqlSession
SqlSession session = factory.openSession();
  • 加载数据源等配置信息
  • 创建数据库连接
  • 创建事务对象
  • 创建Executor对象
  • 操作数据库

每个线程都有一个SqlSession实例。SqlSession实例不能共享,它也是线程不安全的。因此需要把它作为局部变量或者参数传入。绝对不可以作为静态常量来使用。
打开SqlSession,需要进行关闭close。

原始dao的开发

所谓原始dao,就是开发人员自己手动编写dao接口和实现。
问题:

  • dao方法有很多重复代码,需要开发者手动对SqlSession进行创建、调用、关闭
  • 操作sql时,还要手动指定映射文件的id,存在硬编码,不利于开发

mapper动态代理

官方推荐
所谓mapper动态代理,就是开发人员只需要手动编写dao接口,而具体实现由mybatis框架来创建一个动态代理对象。
遵循的规范:

  • mapper.xml文件中的namespace和mapper接口的类路径一致。
  • mapper.xml中定义的每个statement的id和mapper接口中的方法名称一致。
  • mapper.xml中定义的每个statement的parameterType和mapper接口中的方法的入参类型一致。
  • mapper.xml中定义的每个statement的resultType和mapper接口中的方法的返回值类型一致。
发布了48 篇原创文章 · 获赞 1 · 访问量 1043

猜你喜欢

转载自blog.csdn.net/laonxs/article/details/105150323