Mybatis系列(一):mybatis的入门

Mybatis是一款优秀的持久层框架,它支持自定义sql,存储过程以及高级映射,几乎不需要任何的JDBC代码以及设置参数和获取结果集的工作。接下来看一下Mybatis的基本使用。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);   //构建sqlSessionFactory

//获取session,及映射器实例
try (SqlSession session = sqlSessionFactory.openSession()) {                        //这是标准获取sqlsession和映射器实例的方式
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  Blog blog = mapper.selectBlog(101);
}

配置文件:全局配置文件和sql映射文件

全局配置文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
sql映射文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.mybatis.example.BlogMapper"> <select id="selectBlog" resultType="Blog"> select * from Blog where id = #{id} </select> </mapper>

作用域和生命周期

对象生命周期:依赖注入框架可以创建线程安全的,基于事务的sqlsession和映射器,并将它们直接注入到bean中,因此可以忽略他们的生命周期。

SqlSessionFactoryBuilder实例:一旦创建了SqlsessionFactory就不再需要他了,所以他的最佳作用域是方法域。

SqlSessionFactory实例:一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它,使用sqlSessionFactory的最佳实践是在应用期间不应该重复创建多次,所以SqlSessionFactory的最佳作用域是应用作用域,最简单的模式就是单实例或静态单例模式。

SqlSession实例:每个线程都应该有他自己的sqlSession实例。sqlSession实例不是线程安全的,所以不能被共享,它的最佳作用域是请求或方法作用域。下面就是确保sqlSession关闭的标准模式

try (SqlSession session = sqlSessionFactory.openSession()) {
  // 你的应用逻辑代码
}

映射器实例:它是绑定一些映射语句接口的。映射器接口的实例是从SqlSession中获得的,任何映射器实例的最大作用域应该与请求他们的SqlSession相同。但是方法域才是映射器实例最合适的作用域。如果在整个请求域保留映射器实例也不会有什么问题,但是管理那么多的像SqlSession的资源会让你忙不过来。最好就是下面的使用方式:

try (SqlSession session = sqlSessionFactory.openSession()) {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  // 你的应用逻辑代码
}

参考mybatis中文文档:https://mybatis.org/mybatis-3/zh/getting-started.html

原文地址:https://www.cnblogs.com/amazing-eight/p/13276734.html