【MyBatis】第二章

第二章、核心配置

一、SqlSessionFactoryBuilder

局部变量

1.重载

在这里插入图片描述
核心源码
build()方法中的参数environment和properties都可以为null

public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
        SqlSessionFactory var5;
        try {
            XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
            var5 = this.build(parser.parse());
        } catch (Exception var14) {
            throw ExceptionFactory.wrapException("Error building SqlSession.", var14);
        } finally {
            ErrorContext.instance().reset();

            try {
                inputStream.close();
            } catch (IOException var13) {
            }

        }

        return var5;
    }
参数inputStream是字节流,它封装了XML文件形式的配置信息;
参数environment和参数properties为可选参数。
其中,参数environment决定将要加载的环境,包括数据源和事务管理器;
参数properties决定将要加载的properties文件。
public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
        SqlSessionFactory var5;
        try {
            XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
            var5 = this.build(parser.parse());
        } catch (Exception var14) {
            throw ExceptionFactory.wrapException("Error building SqlSession.", var14);
        } finally {
            ErrorContext.instance().reset();

            try {
                reader.close();
            } catch (IOException var13) {
            }

        }

        return var5;
    }
第一种形式的build()方法使用InputStream字节流封装了XML文件形式的配置信息,
而第二种形式的build()方法使用Reader字符流封装了xml文件形式的配置信息。 

2.注意点

用单例模式创建SqlSessionFactory,因为它是线程安全的

SqlSessionFactory对象是线程安全的,它一旦被创建,在整个应用程序执行期间都会存在。
如果我们多次创建同一个数据库的SqlSessionFactory对象,
那么该数据库的资源将很容易被耗尽。
通常每一个数据库都只创建一个SqlSessionFactory对象,
所以在构建SqlSessionFactory对象时,建议使用单例模式。

二、Sqlsession

SqlSession是MyBatis框架中另一个重要的对象,
它是应用程序与持久层之间执行交互操作的一个单线程对象,
主要作用是执行持久化操作,类似于JDBC中的Connection。
SqlSession对象包含了执行SQL操作的方法,由于其底层封装了JDBC连接,
所以可以直接使用SqlSession对象来执行已映射的SQL语句。 

1.常用方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参数总结

String statement------------------------>mapper里面的语句ID
Object parameter----------------------->mapper的SQl语句的占位对象,类似?

2.作用域SCOPE

每一个线程都应该有一个自己的SqlSession对象,并且该对象不能共享。
SqlSession对象是线程不安全的,因此其使用范围最好在一次请求或一个方法中,
(如Servlet的HttpSession)中使用。
绝不能将其放在类的静态字段、对象字段或任何类型的管理范围
SqlSession对象使用完之后,要及时的关闭,SqlSession对象通常放在finally块中关闭
SqlSession sqlSession = sqlSessionFactory.openSession();
try {	
	// 此处执行持久化操作
} finally {	
	sqlSession.close();		
}

三、MyBatis-config.xml

1.<configuration.>

元素列表
在这里插入图片描述

在核心配置文件中,<configuration.>的子元素必须按照上图
由上到下的顺序进行配置,否则MyBatis在解析XML配置文件的时候会报错。 
  1. <properties.>是一个配置属性的元素,该元素的作用是读取外部文件的配置信息。
<dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
</dataSource>
${mysql.driver}实现动态替换

2.<.settings>

可以配置以下
在这里插入图片描述
在这里插入图片描述

3.《typeAliases》

设置别名用的,

<typeAliases>
    <typeAlias alias=User”type="com.itheima.pojo.User"/>

4.《environments>

<environment>元素有两个子元素,
<transactionManager>元素和<daraSource>元素。
<transactionManager>元素用于配置运行环境的事务管理器;
<daraSource>元素用于配置运行环境的数据源信息。 
  1. UNPOOLED表示数据源为无连接池类型。配置此数据源类型后,程序在每次被请求时会打开和关闭数据库连接。UNPOOLED适用于对性能要求不高的简单应用程。

  2. POOLED表示数据源为连接池类型。POOLED数据源利用“池”的概念将JDBC连接对象组织起来,节省了在创建新的连接对象时需要初始化和认证的时间。POOLED数据源使得并发Web应用可以快速的响应请求,是当前比较流行的数据源配置类型

5.<mappers。>

<mappers.>元素用于引入MyBatis映射文件。
映射文件包含了POJO对象和数据表之间的映射信息,
MyBatis通过核心配置文件中的
<mappers.>元素找到映射文件并解析其中的映射信息。

四、Mapper.Xml

在这里插入图片描述

1.nameSpacce元素

  1. 用于区分不同的mapper,全局唯一。

  2. 绑定DAO接口,即面向接口编程。当namespace绑定某一接口之后,可以不用写该接口的实现类,MyBatis会通过接口的全限定名查找到对应的mapper配置来执行SQL语句,因此namespace的命名必须跟接口同名。

  3. Mybatis的接口不需要实现类,实际上是使用了JDK动态代理的方式创建代理对象完成的。这里有其它人的源码分析

2.<select.>

select>元素用来映射查询语句,它可以从数据库中查询数据并返回。
在这里插入图片描述

<select id="findById" parameterType="int"
            resultType="com.lipp.pojo.User">
        select * from users where uid = #{id}
    </select>

3.<insert.>

如果使用的数据库支持主键自动增长(如MySQL和SQL Server),那么可以通过keyProperty属性指定POJO类的某个属性接收主键返回值(通常会设置到id属性上),然后将useGeneratedKeys的属性值设置为true。

<insert id="addUser" parameterType="com.itheima.pojo.User"
	keyProperty="uid" useGeneratedKeys="true" >
   	insert into users(uid,uname,uage)values(#{uid},#{uname},#{uage})
</insert>

4.<update.>

<update.>元素用于映射更新语句,它可以更新数据库中的数据。在执行完元素中定义的SQL语句后,会返回更新的记录数量。

<update id="updateUser"    parameterType="com.itheima.pojo.User">
    update users set uname= #{uname},uage = #{uage} where uid = #{uid}	</update>

5.<delete.>

<delet.e>元素用于映射删除语句,在执行完元素中的SQL语句之后,会返回删除的记录数量。

<select id="findUserById" parameterType="Integer"
    resultType="com.itheima.pojo.User">
    select * from users where id = #{id}
</select>

6.<sql.>

在一个映射文件中,通常需要定义多条SQL语句,
在映射文件中使用MyBatis所提供的<sql>元素,
将这些SQL语句中相同的组成部分抽取出来,然后在需要的地方引用。

7.<resultMap.>

解决属性名与字段名不一致的问题

<resultMap type="com.lipp.pojo.Student" id="studentMap">
        <id property="id" column="sid"/>
        <result property="name" column="sname"/>
        <result property="age" column="sage"/>
    </resultMap>
    <select id="findAllStudent" resultMap="studentMap">
   			select * from t_student
    </select>

其中,在实际中,只需要将不一致的部分进行映射就行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值