MyBatis的核心配置(第七章)

目录

7

7.1  MyBatis的核心对象

7.11  SqlSessionFactory

7.12  SqlSession

7.2  配置文件的主要元素

7.22  properties元素

7.23  settings元素

7.24 typeAliases元素

7.25 typeHandler元素

7.26 objectFactory元素

7.27 plugins元素

7.28 environments元素

7.29 mappers元素

7.3 映射文件

7.31 主要元素

7.32 select/insert/update/delete元素

7.32 sql元素

7.33 resultMap元素


7

7.1  MyBatis的核心对象

7.11  SqlSessionFactory

主要作用:创建SqlSession。

SqlSessionFactory对象的实例可通过SqlSessionFactoryBuilder对象来构建。

而SqlSessionFactoryBuilder可以通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例。

实现代码:

// 1获得SqlSessionFactoryBuilder
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
/*
* 2通过ssfb调用builder()方法,方法里需要将🐖配置文件转换为inputstream后作为参数
*   2-1获得inputStream方式一:通过Resource InputStream
*   inputStream=Resources.getResourceAsStream("SqlMapConfig.xml");
*   2-2获得inputStream方式二:通过当前测试类的getClassLoader()方法
*/
SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream("SqlMapConfig2.xml"));//配置文件位置
// SqlSessionFactory ssf=ssfb.build(inputStream);
session = ssf.openSession();

应每个数据库对应一个SqlSessionFactory,在构建SqlSessionFactory实例时使用单例模式(因为SqlSessionFactory对象创建后整个应用执行期间都存在,多次建一个数据库资源容易被耗尽)。

7.12  SqlSession

主要作用:执行持久化操作。其对象包含所有操作数据库方法,可直接使用其实例来执行已映射的sql语句(因为底层封装了JDBC连接)。

SqlSession对象线程不安全(SqlSessionFactory对象线程安全)不能共享,所以使用范围为某一次的请求/方法中,不能在放在类中的静态/实例字段,或任何类型管理范围,使用后通常放在finally代码块中关闭。

7.2  配置文件的主要元素

7.22  properties元素

通常用于将内部元素的配置外在化,即通过外部的配置来动态地替换内部定义的属性。

配置数据库连接信息方式1:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 
	"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
	<environments default="environment"><!--根元素,其指定默认环境的id-->
		<environment id="environment"><!--子元素,可定义多个,id指定所定义环境的id值-->
			<transactionManager type="JDBC" /><!--用于配置事务管理,type属性用于指定事务的管理方式(哪种事务管理器)-->
			<dataSource type="POOLED"><!--配置数据源,type属性指定使用哪种数据源-->
				<property name="driver" value="com.mysql.cj.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/netctoss?serverTimezone=UTC" />
				<property name="username" value="root" />
				<property name="password" value="1111" />
			</dataSource>
		</environment>
	</environments>
	<!-- 指定映射文件的位置 -->
	<mappers>
		<mapper resource="entity/EmpMapper2.xml" />
	</mappers>
</configuration>

配置数据库连接信息方式2(推荐用2,配置更灵活,方便被多个配置文件使用,方便日后的维护和修改。):

# db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/netctoss?serverTimezone=UTC&useSSL=false
#jdbc:mysql://localhost:3306/netctoss?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
username=root
password=1111
initSize=2
maxActive=2
<util:properties id="db"
	location="classpath:db.properties"></util:properties>
<!-- 数据库连接池 -->
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
	<property name="driverClassName" value="#{db.driver}"></property>
	<property name="url" value="#{db.url}"></property>
	<property name="username" value="#{db.username}"></property>
	<property name="password" value="#{db.password}"></property>
</bean>

7.23  settings元素

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

其内含常见配置:

<settings><!--value为默认值-->
<setting name="cacheEnabled" value="false"/><!--影响所有映射器中配置的缓存全局开关-->
	<setting name="lazyLoadingEnabled" value="false"/><!--延迟加载的全局开关-->
	<setting name="multipleResultSetsEnabled" value="true"/><!--是否允许单一语句返回多结果集(需要兼容驱动)-->
	<setting name="useColumnLabel" value="true"/><!--使用列标签代替列明-->
	<setting name="useGeneratedKeys" value="false"/><!--允许JDBC支持自动生成主键,需要驱动兼容-->
	<setting name="defaultExecutorType" value="SIMPLE"/><!--配置默认的执行器(simple/reuse/batch)-->
	<setting name="defaultStatementTimeout" value="25000"/><!--设置超时时间,决定驱动等待数据库相应的秒数,没有设置时,取的是驱动默认时间。(任何正整数)-->
</settings>

7.24 typeAliases元素

其内提供了相依的类型别名。

作用:为配置文件中的Java类型设置一个简短的别名(与.xml的配置相关)以减少全限定类名的冗余。

<typeAliases>
		<typeAlias alias="user" type="po.User" />
</typeAliases>
<!--别名可代替其使用在MyBatis文件的任何位置-->

也可通过自动扫描包的形式自定义别名(适用于PoJo类多时),会将以PoJo类以首字母小写的非限定类名来做别名(只适用于没有注解的情况。否则别名为其注解的值):

<typeAliases>
		<package name="po.User" />
</typeAliases>
<!--别名可代替其使用在MyBatis文件的任何位置-->

注:别名不区分大小写。

7.25 typeHandler元素

作用:将预处理语句传入的参数javaType(Java参数)转为jdbcType(JDBC类型),或类型反转。

可用于在配置文件中注册自定义的类型处理器。(两种使用方式:)

1注册一个类的类型处理器

<typeHandlers>
		<typeHandler handler="全类名" />
</typeHandlers>

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

<typeHandlers>
		<package name="包名" /><!-- 系统会自动扫描包下所有的文件 -->
</typeHandlers>

7.26 objectFactory元素

作用:实例化目标类,既可通过默认构造方法实例化,也可在参数映射存在的时候通过参数构造方法实例化。

7.27 plugins元素

作用:配置用户所开发的插件(myBatis允许已映射语句执行过程中的某一点进行拦截调用,其通过插件来实现)(慎重使用)。

7.28 environments元素

作用:对环境进行配置,可配置多种数据源,即配置多种数据库。如7.22图。

myBatis含两种管理器:
1 JDBC(直接使用了JDBC的提交和回滚设置,依赖于从数据源得到的连接来管理事务的作用域)。 2 MANAGED(不提交或回滚一个连接,让容器来管理事务的整个声明周期,默认关闭连接,可将closeConnection属性设为false来阻止这种默认行为)。
注意:在Spring+ MyBatis中不用配置事务管理器,其会用Spring自带的管理器实现事务管理。

在数据源的配置中MyBatis框架提供了三种数据源类型:                                                                 1 UPPOOLED:其中driver属性为JDBC驱动的Java类的完全限定名。                                           2 POOLED:其数据源避免了在创建新的连接实例时所需要的初始化和认证时间,使得并发Web应用可快速地响应请求。                                                                                                                   3 JNDI 。

7.29 mappers元素

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

引入映射文件方式:                                                                                                                          

<!--1 使用类路径引入: -->    
<mappers>
        <mapper resource="全类名" />
</mappers>
                                                                                        
<!--2 使用包名引入:--> 
<mappers>
        <package name="全包名" />
</mappers>                                                                                 <!--3 使用接口类引入:-->  
<mappers>
        <mapper class="全接口名" />
</mappers>                                                                                  <!--4 使用本地文件引入:-->
<mappers>
        <mapper url="全文件名" />
</mappers> 

7.3 映射文件

7.31 主要元素

注:select标签返回结果集; insert/update/delete标签返回影响的条数;cache标签给定命名空间的缓存配置;cache-ref标签:其他命名空间缓存配置的引用;resultMap标签:描述如何从数据库结果集中加载对象。

7.32 select/insert/update/delete元素

注意区分属性:

parameterType表示传入sql语句的参数类的全限定名或别名,可选属性(其可通过TypeHandler推断出具体传入语句的参数)默认值unset(依赖于驱动)。
resultType表示sql语句中返回的类的全限定名或别名,集合类型返回的是集合可包含的类型并非集合本身。返回时可使用resultType或resultMap之一。
resultMap表示外部resultMap的命令引用,返回时可使用resultType或resultMap之一。
statementType设置MyBatis使用哪个JDBC的Statement工作。
resultSetType表示结果集类型,默认值unset(依赖于驱动)。
keyColumn(仅对insert/update有用)用于设置第几列是主键(当主键不是第一列时使用)。

7.32 sql元素

详课本118页。

7.33 resultMap元素

作用:其表示结果的映射集,用来定义映射规则,级联的更新以及定义类型转化器等。详课本119页。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值