MyBatis学习(二)

一、配置解析

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
configuration(配置):
	properties(属性)
	settings(设置)
	typeAliases(类型别名)
	environments(环境配置)
	environment(环境变量):
		transactionManager(事务管理器)
		dataSource(数据源)
	mappers(映射器)

1.1 、properties(属性)

这些属性可以在外部进行配置,并可以进行动态替换。你既可以,也可以在 properties 元素的子元素中设置。
方式一:外部资源配置:创建 jdbc.properties
driver=com.mysql.cj.jdbc.Driver //mysql8.0以上
url=jdbc:mysql://localhost:3306/数据库名称?serverTimezone=UTC&useSSL=false
username=root
password=123456
使用properties 标签加载外部资源
<properties resource="jdbc.properties">
</properties>

在environment 设置中加载properties 读取的属性
<environment id="test">
    <transactionManager type="JDBC"/>
       <dataSource type="POOLED">
           <property name="driver" value="${driver}}"/>
           <property name="url" value="${url}"/>
           <property name="username" value="${username}}"/>
           <property name="password" value="${password}}"/>
       </dataSource>
</environment>

方式二 直接在environment 中写,动态替换
<environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>

1.2、settings(设置)

暂时掌握以下:
	cacheEnabled:全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。默认为true
	lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。默认为false
    logImpl:指定 MyBatis 所用日志的具体实现,未指定时将自动查找。	SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING 。未设置

1.3、typeAliases(类型别名)

  • 类型别名可为 Java 类型设置一个缩写名字。
  • 它仅用于 XML 配置,意在降低冗余的全限定类名书写
	方式一:对于一个包实体类数目较少时,建议使用
	// type 指定具体的实体类的相对路径
	<typeAliases>
	    <typeAlias type="com.chen.pojo.User" alias="User"/>
	    <typeAlias type="com.chen.pojo.Role" alias="Role"/>
	    ....
	</typeAliases>	

	方式二:对于一个包,实体类数目较多时,建议使用
	// name 指定一个包名,MyBatis 会在包名下面搜索需要的实体类
    <typeAliases>
        <package name="com.chen.pojo"/>
    </typeAliases>
	在没有注解的情况下,会使用每个实体类的首字母小写的类名来作为别名。
	
	若有注解,则别名为其注解值,例如
	@Alias("Hello")
	public class User{
    	...
	}

1.4、环境配置(environments)

  • MyBatis 可以配置成适应多种环境
  • 不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
根据id选择不同的环境
 <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>

        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}}"/>
                <property name="password" value="${password}}"/>
            </dataSource>
        </environment>
    </environments>

1.4.1、事务管理器(transactionManager)

MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"),默认为JDBC
	JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域 
	MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期

1.4.2、数据源(dataSource)

dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):默认为POOLED
	UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。
	POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。

1.5、mappers(映射器)

作用:就是告诉MyBatis 到哪里去找到这些语句
<!-- 使用相对于类路径的资源引用 -->建议使用
	<mappers>
	  <mapper resource="com/chen/UserDao/UserMapper.xml"/>
		...
	</mappers>

<!-- 使用映射器接口实现类的完全限定类名 -->
	<mappers>
	    <mapper class="com.chen.UserDao.UserMapper"/>
	    .....
	</mappers>
	
<!-- 将包内的映射器接口实现全部注册为映射器 -->
	<mappers>
        <package name="com.chen.UserDao"/>
    </mappers>

1.6、作用域(Scope)和生命周期

作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。
SqlSessionFactoryBuilder: 这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了
	1.最佳作用域是方法作用域(也就是局部方法变量)
	2.保证不占用资源
SqlSessionFactory:一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例
	1.可以想象为数据库连接池
	2.最佳作用域是应用作用域
	3.最简单的就是使用单例模式或者静态单例模式创建(只有一个)
SqlSession:每个线程都应该有它自己的 SqlSession 实例
	1.SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
	2. 这个关闭操作很重要,为了确保每次都能执行关闭操作,你应该把这个关闭操作放到 finally 块中。(必须关闭)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值