zoukankan      html  css  js  c++  java
  • MyBatis的核心配置

    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>
    一纸高中万里风,寒窗读破华堂空。 莫道长安花看尽,由来枝叶几相同?
  • 相关阅读:
    火狐浏览器kaptcha验证码点击无法刷新问题解决方法
    算法学习笔记——洗碗时遇到的汉诺塔问题
    JSP学习笔记
    springmvc中Tomcat跨服务器上传中文名文件报错解决方案
    MAVEN项目报错解决方法集锦(1)
    原生js模板语法之underscore.js
    HTML针式打印机打印模板
    elementui form表单验证
    vue+swiper背景图随swiper改变
    uni.navigateTo和uni.switchTab的区别
  • 原文地址:https://www.cnblogs.com/byczyz/p/12173564.html
Copyright © 2011-2022 走看看