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


写在前面:十分感谢《深入浅出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>

<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>

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


<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>

3.用包名引入。


<mappers>
<package name="org.mybatis.builder"/>
</mappers>

4.用xml文件引入。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,422评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,714评论 6 342
  • Java数据持久化之mybatis 一. mybatis简介 1.1 原始的JDBC操作: Java 通过 Jav...
    小Q逛逛阅读 4,890评论 0 16
  • I love you not for who you are, but for who I am with you...
    小猪咕噜噜阅读 191评论 0 0