1.1MyBatis的核心对象
在使用MyBatis框架时,主要涉及两个核心对象:SqlSessionFactory和SqlSession,它们在MyBatis框架中起着至关重要的作用。本节将对这两个对象进行详细讲解。
1.1.1SqlSessionFactory
SqlSessionFactory是MyBatis框架中十分重要的对象,它是单个数据库映射关系经过编译后的内存镜像,
其主要作用是创建SqlSession。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来构建,
而SqlSessionFactoryBuilder则可以通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例。
本书所讲解的就是通过XML配置文件构建出的SqlSessionFactory实例,其实现代码如下
//1.读取配置文件 String resource="mybatis-config.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); //2.根据配置文件构建sqlSessionFactory SqlSessionFactory sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);
SqlSessionFactory对象是线程安全的,它一旦被创建,在整个应用执行期间都会存在。
如果我们多次地创建同一个数据库的SqlSessionFactory,那么此数据库的资源将很容易被耗尽。
为了解决此问题,通常每一个数据库都会只对应一个SqlSessionFactory,所以在构建SqlSessionFactory实例时,建议使用单列模式。
1.1.2SqlSession
SqlSession是MyBatis框架中另一个重要的对象,它是应用程序与持久层之间执行交互操作的一个单线程对象,其主要作用是执行持久化操作。
SqlSession对象包含了数据库中所有执行SQL操作的方法,由于其底层封装了JDBC连接,所以可以直接使用其实例来执行已映射的SQL语句。
每一个线程都应该有一个自己的SqlSession实例,并且该实例是不能被共享的。
同时,SqlSession实例也是线程不安全的,因此其使用范围最好在一次请求或一个方法中,绝不能将其放在一个类的静态字段、
实例字段或任何类型的管理范围(如Servlet的HttpSession)中使用。使用完SqlSession对象之后,要及时地关闭它,通常可以将其放在finally块中关闭,代码如下所示。
SqlSession对象中包含了很多方法,其常用方法如下所示。·
<T> T selectOne(String statement);
查询方法。参数statement是在配置文件中定义的<select>元素的id。使用该方法后,会返回执行SQL语句查询结果的一条泛型对象。
· <T> T selectOne(String statement, Object parameter);
查询方法。参数statement是在配置文件中定义的<select>元素的id, parameter是查询所需的参数。使用该方法后,会返回执行SQL语句查询结果的一条泛型对象。
· <E> List<E> selectList(String statement);
查询方法。参数statement是在配置文件中定义的<select>元素的id。使用该方法后,会返回执行SQL语句查询结果的泛型对象的集合。·
<E> List<E> selectList(String statement, Object parameter);
查询方法。参数statement是在配置文件中定义的<select>元素的id, parameter是查询所需的参数。使用该方法后,会返回执行SQL语句查询结果的泛型对象的集合。
·
<E> List<E> selectList(String statement, Object parameter, RowBoundsrowBounds);
查询方法。参数statement是在配置文件中定义的<select>元素的id, parameter是查询所需的参数,rowBounds是用于分页的参数对象。使用该方法后,会返回执行SQL语句查询结果的泛型对象的集合。
· void select(String statement, Object parameter, ResultHandler handler);
查询方法。参数statement是在配置文件中定义的<select>元素的id, parameter是查询所需的参数,ResultHandler对象用于处理查询返回的复杂结果集,通常用于多表查询。
· int insert(String statement);
插入方法。参数statement是在配置文件中定义的<insert>元素的id。使用该方法后,会返回执行SQL语句所影响的行数。
· int insert(String statement, Object parameter);
插入方法。参数statement是在配置文件中定义的<insert>元素的id, parameter是插入所需的参数。使用该方法后,会返回执行SQL语句所影响的行数。
· int update(String statement);
更新方法。参数statement是在配置文件中定义的<update>元素的id。使用该方法后,会返回执行SQL语句所影响的行数。
· int update(String statement, Object parameter);
更新方法。参数statement是在配置文件中定义的<update>元素的id, parameter是更新所需的参数。使用该方法后,会返回执行SQL语句所影响的行数。
· int delete(String statement);
删除方法。参数statement是在配置文件中定义的<delete>元素的id。使用该方法后,会返回执行SQL语句所影响的行数。
· int delete(String statement, Object parameter);
删除方法。参数statement是在配置文件中定义的<delete>元素的id, parameter是删除所需的参数。使用该方法后,会返回执行SQL语句所影响的行数。
· void commit();
提交事务的方法。
· void rollback();
回滚事务的方法。
void close();
关闭SqlSession对象。
· <T> T getMapper(Class<T> type);
该方法会返回Mapper接口的代理对象,该对象关联了SqlSession对象,开发人员可以使用该对象直接调用方法操作数据库。参数type是Mapper的接口类型。MyBatis官方推荐通过Mapper对象访问MyBatis。
· Connection getConnection();
获取JDBC数据库连接对象的方法。
多学一招:使用工具类创建SqlSession在上一章的入门案例中,每个方法执行时都需要读取配置文件,并根据配置文件的信息构建SqlSessionFactory对象,
然后创建SqlSession对象,这导致了大量的重复代码。为了简化开发,我们可以将上述重复代码封装到一个工具类中,然后通过工具类来创建SqlSession,如文件所示。
import java.io.Reader; 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 MybatisUtils { private static SqlSessionFactory sqlSessionFactory = null; // 初始化SqlSessionFactory对象 static { try { // 使用MyBatis提供的Resources类加载MyBatis的配置文件 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); // 构建SqlSessionFactory工厂 sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } // 获取SqlSession对象的静态方法 public static SqlSession getSession() { return sqlSessionFactory.openSession(); } }
1.2配置文件
MyBatis的核心配置文件中,包含了很多影响MyBatis行为的重要信息。这些信息通常在一个项目中只会在一个配置文件中编写,并且编写后也不会轻易改动。
虽然在实际项目中需要开发人员编写或者修改的配置文件不多,但是熟悉配置文件中各个元素的功能还是十分重要的。接下来的几个小节中,将对MyBatis配置文件中的元素进行详细的讲解。
1.2.1主要元素
在MyBatis框架的核心配置文件中,<configuration>元素是配置文件的根元素,其他元素都要在<configuration>元素内配置。
在上一章的入门案例中,我们在配置文件内只使用了<environments>和<mapper>等几个元素,但在实际开发时,通常还会对其他一些元素进行配置。
1.2.2 <properties>元素
<properties>是一个配置属性的元素,该元素通常用于将内部的配置外在化,即通过外部的配置来动态地替换内部定义的属性。
例如,数据库的连接等属性,就可以通过典型的Java属性文件中的配置来替换,具体方式如下。
(1)在项目的src目录下,添加一个全名为db.properties的配置文件,编辑后的代码如下所示。
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=root
(2)在MyBatis配置文件mybatis-config.xml中配置<properties... />属性,具体如下。
<properties resource="db.properties">
(3)修改配置文件中数据库连接的信息,具体如下。
<!-- 数据库连接池 --> <dataSource type="POOLED"> <!-- 数据库驱动 --> <property name="driver" value="${jdbc.driver}"></property> <!-- 连接数据库 --> <property name="url" value="${jdbc.url}"></property> <!-- 连接数据库的用户名 --> <property name="username" value="${jdbc.username}"></property> <!-- 连接数据库的密码 --> <property name="password" value="${jdbc.password}"></property> </dataSource>
原文地址:https://www.cnblogs.com/byczyz/p/12173564.html