【SSM】MyBatis学习笔记-Day2

2.1 MyBatis的核心对象

2.1.1 SqlSessionFactory

SqlSessionFactory是单个数据库映射关系经过编译后的内存镜像,用于创建SqlSession。
SqlSessionFactory对象实例通过SqlSessionFactoryBuilder对象来构建,通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例。

 InputStream inputStream= Resources.getResourceAsStream(配置文件);
 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);

SqlSessionFactory是线程安全的,一旦被创建,整个应用执行期间都会存在,如果多次创建同一个数据库的SqlSessionFactory,资源很容易耗尽,所以使用单列模式。

2.1.2 SqlSession

SqlSession是应用程序与持久层之间执行交互操作的一个单线程对象,主要作用是执行持久化操作。
SqlSession对象包含数据库中所有执行SQL操作的方法,底层封装了JDBC连接,所以可以直接使用来执行已映射的SQL语句。
SqlSession使用完要及时关闭。

SqlSession常用方法:

  1. <T>T selectOne(String statement);:查询方法。
    参数statement是在配置文件中定义的<select>元素的id。
    该方法返回执行SQL语句查询结果的一个泛型对象。

  2. <T>I selectOne(String statement,Object parameter);:查询方法。
    参数statement是在配置文件中定义的<select>元素的id,parameter是查询所需的参数。
    该方法返回执行SQL语句查询结果的一个泛型对象。

  3. <E> List <E> selectList(String statement);:查询方法。
    参数statement是在配置文件中定义的<select>元素的id。
    该方法返回执行SQL语句查询结果的泛型对象的集合。

  4. <E>List<E> selectList(String statement,Object parameter);:查询方法。
    参数statement是在配置文件中定义的<select>元素的id,parameter是查询所需的参数。
    该方法返回执行SQL语句查询结果的泛型对象的集合。

  5. e <E> List <E> selectList(String statement,Object parameter,RowBounds rowBounds);:查询方法。
    参数statement是在配置文件中定义的<select>元素的id,parameter是查询所需的参数,rowBounds是用于分页的参数对象。
    该方法返回执行SQL语句查询结果的泛型对象的集合。

  6. void select(String statement, Object parameter, ResultHandlerhandler);查询方法。
    参数statement是在配置文件中定义的<select>元素的id,parameter是查询所需的参数,ResultHandler对象用于处理查询返回的复杂结果集,通常用于多表查询。

  7. int insert( String statement);插入方法。
    参数statement是在配置文件中定义的<insert>元素的id。
    该方法返回执行SQL语句所影响的行数。

  8. int insert(String statement, Object parameter);插入方法。
    参数statement是在配置文件中定义的<insert>元素的id,parameter是插入所需的参数。
    该方法返回执行SQL语句所影响的行数。

  9. int update(String statement);更新方法。
    参数statement是在配置文件中定义的<update>元素的id。
    该方法返回执行SQL语句所影响的行数。

  10. int update(String statement, Object parameter);更新方法。
    参数statement是在配置文件中定义的<update>元素的id,parameter是更新所需的参数。该方法返回执行SQL语句所影响的行数。

  11. int delete(String statement);删除方法。
    参数statement是在配置文件中定义的<delete>元素的id。
    该方法返回执行SQL语句所影响的行数。

  12. int delete(String statement, Object parameter );删除方法。
    参数statement是在配置文件中定义的<delete>元素的id,parameter是删除所需的参数。
    该方法返回执行SQL语句所影响的行数。

  13. void commit();提交事务的方法。

  14. void rollback();回滚事务的方法。

  15. void close();关闭SqlSession对象。

  16. <T>T getMapper(Class<T> type)返回 Mapper接口的代理对象,该对象关联了Sqlsession对象,开发人员可以使用该对象直接调用方法操作数据库。
    参数type是Mapper的接口类型。

  17. Connection getConnection();获取JDBC数据库连接对象的方法。

2.2 MyBatis配置文件元素

<Configuration>是配置文件的根元素,其他元素都要在<Configuration>内配置。

MyBatis配置文件主要元素:
在这里插入图片描述

2.2.1<properties>元素

<properties>是一个配置属性的元素,通过外部配置来动态替换内部定义的属性。


示例2-1

配置数据库的连接等属性

  1. 创建db.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db_mybatis?serverTimezone=UTC
jdbc.username=root
jdbc.password=root
  1. 在mybatis-config.xml中配置<properties/>属性
  <properties resource="db.properties"/>
  1. 修改配置文件中的数据库连接信息。
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>

2.2.2 <settings>元素

<settings>元素主要用于改变MyBatis运行时的行为,例如开启二级缓存、开启延迟加载等。

<settings>元素中常见的配置及描述:
在这里插入图片描述

2.2.3 <typeAliases>元素

<typeAliases>元素用于为配置文件的java类型设置一个简短的名字。
别名的设置与xml配置相关。

    <typeAliases>
        <typeAlias type="com.ssm.po.User" alias="user"/>
    </typeAliases>

<typeAliases>的子元素<typeAlias>的type属性用于指定需要被定义别名的类的全限定名;alias属性的属性值就是自定义的别名。
当POJO类过多时,还可通过自动扫描包定义别名。

<!--    自动扫描包定义别名-->
    <typeAliases>
        <package name="com.ssm.po"/>
    </typeAliases>

<package>中的name用于指定要定义别名的包,MyBatis会将所有POJO类以首字母小写的非限定类名作为别名。

MyBatis默认别名:
在这里插入图片描述

2.2.4 <typeHandler>元素

MyBatis在预处理语句中设置一个参数或者从结果集中取出一个值时,都会用其框架内部注册了的typeHandler进行相关处理。
typeHandler的作用是将预处理语句中传入的参数从javatype转换为jdbcType,或者从数据库取出结果时将jdbcType转换为javaType。
在这里插入图片描述
使用方式:
(1)注册一个类的类型处理器

    <typeHandlers>
<!--        以单个类的形式-->
        <typeHandler handler="com.ssm.type.UsertypeHandler1"/>
    </typeHandlers>

<typeHandler>的handler属性用于指定在程序中自定义的类型处理器。

(2)注册一个包中所有类型处理器

    <typeHandlers>
        <package name="com.ssm.type"/>
    </typeHandlers>

2.2.5 <objectFactory>元素

MyBatis每次创建结果对象的新实例时,都会使用一个对象工厂的实例来完成。MyBatis中默认objectFactory的作用就是实例化目标类。

2.2.6 <plugins>元素

MyBatis允许在已映射语句执行过程中的某一点进行拦截调用。<plugins>用来配置用户所开发的插件。

2.2.7 <environments>元素

<environments>用于在配置文件中对环境进行配置。


<!--    1.配置环境,默认的环境id为mysql-->
    <environments default="mysql">
<!--        1.2 配置id为mysql的数据库环境-->
        <environment id="mysql">
<!--            使用JDBC事务管理-->
            <transactionManager type="JDBC"></transactionManager>
<!--            数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

在上述示例代码中,<environments>元素是环境配置的根元素,它包含一个default属性,该属性用于指定默认的环境ID。<environment><environments>元素的子元素,它可以被定义多个,其id属性用于表示所定义环境的ID值。
<environment>元素内,包含事务管理和数据源的配置信息,其中<transactionManager>元素用于配置事务管理,它的type属性用于指定事务管理的方式,即使用哪种事务管理器;<dataSource>元素用于配置数据源,它的type属性用于指定使用哪种数据源。

在MyBatis中,可以配置两种类型的事务管理器,分别是JDBC和MANAGED。

JDBC:此配置直接使用JDBC的提交和回滚设置,依赖从数据源得到的连接来管理事务的作用域。 
MANAGED:此配置从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。在默认情况下,它会关闭连接,但一些容器并不希望这样,为此可以将closeConnection属性设置为false来阻止它默认的关闭行为。

对于数据源的配置,MyBatis框架提供了UNPOOLED、POOLED和JNDI三种数据源类型。

UNPOOLED:配置此数据源类型后,在每次被请求时会打开和关闭连接。它对没有性能要求的简单应用程序是一个很好的选择。 
POOLED:此数据源利用“池”的概念将JDBC连接对象组织起来,避免在创建新的连接实例时需要初始化和认证的时间。这种方式使得并发Web应用可以快速地响应请求,是当前流行的处理方式。 
JNDI:此数据源可以在EJB或应用服务器等容器中使用。容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。

2.2.8 <mappers>元素

用于指定MyBatis映射文件的位置。

  1. 使用类路径引入
  2. 使用本地文件路径引入
  3. 使用接口类引入
  4. 使用包名引入

2.3 映射文件

映射文件中的主要元素:
在这里插入图片描述

2.3.1 <select>元素

<select>用于映射查询语句,从数据库读取数据,并组装数据给业务开发人员。

<select id="findUserById" parameterType="Integer" resultType="com.ssm.po.User">
select * from t_user where id=#{id}
</select>

上述语句中的唯一标识为findUserById,它接收一个Integer类型的参数,并返回一个User类型的对象。
<select>元素中,除了上述示例代码中的几个属性外,还有其他可以配置的属性:
在这里插入图片描述

2.3.2 <insert>元素

<insert>元素用于映射插入语句,在执行完元素中定义的SQL语句后,会返回一个表示插入记录数的整数。

<insert id="addUser" parameterType="com.ssm.po.User" flushCache="true"
    statementType="PREPARED"  keyProperty="id" keyColumn=""
    useGeneratedKeys="" timeout="20">
       insert into    t_user(username,jobs,phone)values(#{username},#{jobs},#{phone})
</insert>

在这里插入图片描述

发布了22 篇原创文章 · 获赞 1 · 访问量 853

猜你喜欢

转载自blog.csdn.net/weixin_43651049/article/details/103979617