美文网首页程序员技术干货开源工具技巧
自学Mybatis系列(2)——Mybatis配置元素

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

作者: AceCream佳 | 来源:发表于2017-02-06 22:34 被阅读0次

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

    相关文章

      网友评论

        本文标题:自学Mybatis系列(2)——Mybatis配置元素

        本文链接:https://www.haomeiwen.com/subject/lzfyittx.html