自学Mybatis系列(2)——Mybatis配置元素

版权声明:本文为博主原创文章,如果对您有用~欢迎转载~但转载请注明出处! https://blog.csdn.net/w635614017/article/details/82801658

写在前面:十分感谢《深入浅出Mybatis技术原理与实战》这本书,大多数地方是书上的话,希望自己能在后面的文章中多写一些自己的理解。而且最重要的是!每次照书无脑敲的时候,都好羞愧啊(害羞脸)。后面一定注意这些问题。最后要感谢点赞、评论以及指正的朋友们,你们是坠吼的!!


MyBatis配置元素

MyBatis配置xml文件的层次结构是不能够颠倒顺序的,在解析的过程中,如果出现什么问题的话可以来这里查看一下下。先看一段文件:

<?xml version"1.0" encoding="UTF-8"?>
<!-- 配置 -->
<configuration> 
	<!-- 属性 -->
	<properties/>
	<!-- 设置 -->
	<settings/> 
	<!-- 类型命名 -->
	<typeAliases/> 
	<!-- 类型处理器 -->
	<typeHandlers/> 
	<!-- 对象工厂 -->
	<objectFactory/>
	<!-- 插件 -->
	<plugins/>
	<!-- 配置环境 -->
	<environments>
		<!-- 环境变量 -->
		<environment>
			<!-- 事务管理器 -->
			<transactionManager/>
			<!-- 数据源-->
			<dataSource/>
		</environment>
	</environments>
	<!-- 数据库厂商标识 -->
	<databaseIdProvider/>
	<!-- 映射器 -->
	<mappers/>
</configuration> 

这是MyBatis的全部配置,相信很多人第一眼看完之后会发出和我一样的感慨:雾草!这都是什么东西?但是其实理解后还是蛮简单的,而且很多东西我们在初级的使用中,让它默认就好,我也会在众多的配置方式中,省去繁琐不必要的部分,直接介绍最好用的给大家。那么写这篇文的目的就在于——好好的了解他们一下,简单知道他们分别都是做啥的!接下来不要方,我们一个个的来,嘿嘿嘿。

1.Properties 元素

顾名思义,properties是配置属性的元素。这个呢,是必要的,因为在JDBC我们要设定driver、url、username和password。而在配置中,我们直接把这些东西放到Properties元素中即可,是必要而且简单的东西。
有三种方式供选择:

  • property 子元素
  • properties 配置文件
  • 程序参数传递
    第一种方式:property 子元素
<dataSource type="POOLED">
  <property name="driver" value=“com.mysql.jdbc.Driver”/>
  <property name="url" value=“jdbc:mysql://localhost:端口号/数据库名”/>
  <property name="username" value=“数据库用户名“/>
  <property name="password" value=“数据库密码”/>
</dataSource>

配置:这个是dataSource了,不知道它在哪里的请看上面那个全部配置元素展示~在dataSource里直接用’$'符号,

<dataSource type="POOLED">
	 <property name="driver" value="${driver}"/>
	  <property name="url" value="${url}"/>
	  <property name="username" value="${username}"/>
	  <property name="password" value="${password}"/>
</dataSource>

第二种方式: properties 配置文件
properties文件:

	driver= com.mysql.jdbc.Driver
	url=jdbc:mysql://localhost:端口号/数据库名
	username= 数据库用户名
	password= 数据库密码

我们把这个配置文件放在源包下,引入它就可以了。

<properties resource=“jdbc.properties/>

当然还有第三种方式:通过程序参数传递

这里先不写代码了,因为好多啊,而且以现有的知识去研究,不太好理解的,可以等前两个先用6了然后再研究这个,这里先写一下什么情况使用它。

在开发中,数据库的密码往往掌握在运维人员的手中,对搞开发的来说,这些属于机密文件,而这些密码往往都是通过运维人员加密的,我们是没办法通过加密的字符串去直接连接数据库的!那么就要在生成SqlSessionFactory之前通过代码将加密的字符串转化成明文!呐,这是个解码的过程。系统提供的解密方法是decode(str)…不过我倒是感觉吧,每个公司如果要加密的话,解码方法要视情况而定,到时候知道这个途径就随机应变咯。

这里说一下优先级的问题:通过参数传递的属性具有最高优先级,然后是resource/url属性中指定的配置文件,最后是properties属性中指定的属性。

最好还是别混合乱用了,多乱啊。最好的方式就是通过properties文件!如果需要处理加密解密啥的,最好使配置来自同一个配置文件。

2.Settings 元素

Settings的Mybatis最复杂也是最重要的元素,它可以改变Mybatis的运行行为,但是!最重要的但是!即使我们不配置Settings,我们依然可以正常使用Mybatis!Settings的配置内容简直多的令人发指!我相信就算我全写下来,大家也没打个耐心看,就算有那个耐心看,也肯定记不住!(此处省略10000字介绍…)

3.typeAliases 元素

别名是个指代名称。其实很简单的东西如果总结起来就太麻烦了,我们需要知道的是,Mybatis系统定义了一系列经常使用的类型的别名,例如:数值、字符串、日期和集合。比如要用Map了,我们不需要写java.util.Map,直接写map就好啦!
重点要说的是自定义别名,因为我们有很多实体类,如果每次都按照路径去写岂不是很累(滑稽脸)。

<!—定义别名—>
<typeAliases>
	<typeAliases alias=“role” type=“com.cream.model.Role”>
</typeAliases>

利用这种途径,我们就可以使用role来代替完整路径,方便很多!
但是如果我们有很多类呢?这样的话,设置起来就很麻烦。所以介绍第二种方式给大家:通过自动扫描的形式自定义别名。

<typeAliases>
	<package name=“com.cream.study1.model”/>
	<package name=“com.cream.study2.model”/>
</typeAliases>

定义别名的方式是使用注解 @Alias,比如:

	@Alias(“role”)
	public class Role {
		//coding……
	}

配合起来之后,Mybatis自动扫描指定的package,注意的是,配置包扫描的路径之后,没有@Alias注解的Mybatis也会被装载,然后把类名的第一个字母变成小写,作为Mybatis的别名。建议使用一部分的包名+类名的格式去限定,以避免出现重名的情况。

4.typeHandler 元素

typeHandler是类型处理器,,Mybatis在预处理语句中设置参数的时候,从结果集取出值的时候,都会用已注册的typeHandler去处理。

typeHandler允许根据项目的需要去自定义设置Java传递到数据库的参数中。还有从数据库读数据出来的时候,我们也需要进行特殊处理。这些情况都可以通过自定义typeHandler去处理。
其实系统定义的typeHandler就可以实现大部分的功能了,也很多,使用的时候,可以查一查。
注意事项:

数值类型的精度,数据库int、double、decimal与java中的精度、长度是不一样的。
时间精度,取到日:DateOnlyTypeHandler。取到秒:SqlTimerstamp。额,都可以源码查看。想看例子的直接查官方文档就好,忽视其他的英文,直接看代码ok,个人感觉这个是挺复杂的一个东西。

ObjectFactory元素

ObjectFactory是有结果返回的时候,构造实体类(POJO)的,大部分的场景下我们都不用修改,当然想自定义也可以,恩。。。知道这些就好!下一个!

Plugins元素

插件很复杂,书上概括下来就是,如果不懂原理,那么就完全无法掌握插件的使用,而且插件用不好的话就会是一个很危险的东西!所以无法简单理解。以后研究研究再单独写一写。

environments配置环境

它很关键,environments是配置环境,他可以注册多个数据源dataSource,数据源包括数据源的配置和数据库事务(transactionManager)的配置。
配置数据源

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </transactionManager>
    <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>

这里粘的是源码的示例。

  • environments中的属性default,标明我们默认启用的数据源配置。
  • environment中的id是设置这个数据源的标识。
  • transactionManager配置数据库的事务,type有三种配置方式。
    1.JDBC:采用jdbc方式管理事务,独立编码中常用。
    2.MANAGED:采用容器方式管理事务,在JNDI数据源中常用。
    3.自定义:用于特殊应用,自己定义数据库事务管理。
  • property 元素是配置数据源的各类属性,比如说可以name处写"autoCommit",value写"false",这样就代表着数据源不自动提交。
  • dataSource :配置数据源连接的信息,type属性设置我们对数据库连接方式的配置。
    1.UNPOOLED,非连接池数据库。
    2.POOLED,连接池数据库。
    3.JNDI,JNDI数据源。
    4.自定义
    这里说一下数据库事务,在Mybaits把事务交由SqlSession控制,我们可以通过SqlSession执行commit提交,或者roolback回滚。
    简单打个比方:A去银行转账,余额100块,A要给B转200块,但是A余额不足,转账失败了,这时候就需要回滚事务。否则A虽然失败了,但B却可以收到200块。
    大部分工作环境下使用Spring控制。

再来讨论一下数据源:
Mybatis提供了三种数据源连接方式:
1.UNPOOLED:非连接池。
2.POOLED:连接池。
3.JNDI:通过JndiDataSourceFactory获取数据源。
当然我们可以自定义数据源,他必须实现:org.apache.ibatis.datasource.DataSourceFactory
接口,当我们使用了spring框架,配置就会很简单

databaseIdProvider数据库厂商标识

相同数据库厂商环境下,数据库厂商标识没啥意义。Mybatis如果运行在不同厂商的数据库的话,可以提供标识,但是一般情况下都不会使用多厂商的数据库。

映射器

简单说一下引入映射器的方法(官方文档代码)
1.用文件路径引入。

<mappers>
<!-- Using classpath relative resources -->
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>

2.用类注册引入映射器。

<!-- Using mapper interface classes -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>

3.用包名引入。

<!-- Register all interfaces in a package as mappers -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

4.用xml文件引入。

猜你喜欢

转载自blog.csdn.net/w635614017/article/details/82801658
今日推荐