目录


properties (属性)

需求:

将数据库连接参数单独配置在 db.properties 中,只需要在 SqlMapConfig.xml 中加载 db.properties 的属性值,在 SqlMapConfig.xml 中不再需要对数据库连接进行 硬编码

这里有个小疑问,不在 SqlMapConfig.xml 中对数据库参数进行硬编码,那么在 db.properties 中就不是硬编码了吗?

这个问题的答案是,依然是硬编码,只不过在 db.properties 的数据量很少,方便我们后期去修改,所以硬编码,也无所谓;但是在 SqlMapConfig.xml 中,要是硬编码的话,后期去变动,就要在那么多的信息中进行寻找了。因为,一般修改,都是程序去读取文件进行修改的(比如,集群,几十台机器,在一起,手动去改,多费劲,因此,一般都指使程序去改),所以在 SqlMapConfig.xml 中进行信息的抽取、修改是很费劲的一件事,那么多信息 ;

 <!--加载数据库配置文件-->
<!--resource 是通过类路径加载的-->
<!--url 是通过绝对路径加载的-->
<properties resource="xin/ijava/config/db.properties">
<!--properties标签里面,还能配置一些属性名和属性值-->
<property name="" value=""></property>
</properties>

注意:

在 properties 元素体内定义的属性首先被加载 ;

然后会读取 properties 元素中的 resource 或 url 加载的属性,它会覆盖已读取的同名属性 ;

最后读取 parameterType 传递的属性,它会覆盖已读取的同名属性 ;

它们存在优先级的 ;因此,注意,不要在映射关系中,取的名字,与在上面的三个地方重名了,否则是读取上面的地方的数据的 ;

<select id="findUsersByName" parameterType="java.lang.String" resultType="xin.ijava.pojo.User">
SELECT * FROM User where name LIKE '%${jdbc.url}%'
</select> [service] 2018-09-05 23:08:14,250 - test.findUsersByName -1818
[main] DEBUG test.findUsersByName - ==>
Preparing: SELECT * FROM User where name LIKE '%jdbc:mysql:///mybatisDay01?charset=utf-8%'

我们可以看到,由于我们在映射关系文件中,使用了和 properties 元素中的 resource 资源加载的 db.properties 文件中的重名 jdbc.url 了,因此,读取了配置文件中的数据,而非我们传进去的参数了 ;

这种情况,发生在拼接 sql 的时候,这是,传进来的参数的优先级是最低的

文件取名字,要有一定的特殊性,比如 xxx.xxx 这样,就很难在映射关系中出现重名 ;


settings 全局参数配置

mybatis 在运行的时候,可以调整一些运行参数。

比如:开启二级缓存、开启延迟加载 ;

需要主要,不能加错了,因为全局参数将影响 mybatis 的运行行为 ;加错了,将导致 mybatis 出现各种问题 ;

需要时再配置 ;

(百度下具体的参数说明)


typeAliases 别名设置

在映射文件中,parameterTyperesultType 的中类型,对于我们开发的 pojo 类,类的全路径名会很长,我们可以设定别名进行简写 ;

<!--别名设置-->
<typeAliases>
<!--单个别名定义-->
<typeAlias type="xin.ijava.pojo.User" alias="user" />
<!--批量别名定义-->
<!--给包名,mybatis 会自动的定义别名,别名就是类的名字,首字母大小写都行-->
<!--多个包,就写多个-->
<package name="xin.ijava.pojo"/>
</typeAliases>

使用别名 user :

 <select id="findUsersByName" parameterType="java.lang.String" resultType="user">
SELECT * FROM User where name LIKE '%${value}%'
</select>

其中,mybatis 中有许多已经定义好的别名,针对 java 中提供的基本类型 ;


typeHandlers 类型处理器

在学 JDBC 的时候,就知道,我们需要将 java 中的类型,转成数据库可以接受的类型 ;比如 String -》 varchar

其实我们在写映射文件的时候,就已经进行了转换,比如传进去的是 javadate类型,我们是不需要手动转成 sqldate的,类型处理器自己帮我们转换了;不像之前使用 Dbutils 的时候,还需要手动处理一些类型 ;

mybatis 默认有好多的类型处理器,一般这些处理器,就已经满足日常开发的转换需要了 ;


mapper (映射器)

  1. 通过 resource 一次加载一个 映射文件

    <mappers>
    <!--地址从src包开始写,用斜杠代替 . -->
    <mapper resource="xin/ijava/config/sqlmap/User.xml"/>
    <mapper resource="xin/ijava/config/mapper/UserMapper.xml"/>
    </mappers>
  2. 通过mapper 接口 一次加载一个 映射文件

    <!--通过 mapper 接口,一次加载一个映射文件-->
    <!--
    需要满足一些规范:将接口使用 mapper 代理方法,
    然后接口名必须和映射文件名字一样,且在一个包下面
    -->
    <!--包 用点连接-->
    <mapper class="xin.ijava.dao.UserMapper"/>
  3. 通过 mapper 接口一次加载多个 映射文件 (重点内容

    <!--批量加载-->
    <!--
    需要满足一些规范:将接口使用 mapper 代理方法,
    然后接口名必须和映射文件名字一样,且在一个包下面
    name 中,写到包名就可,这样包下面的满足条件的 映射文件就会被加载
    -->
    <package name="xin.ijava.dao"/>

细节

上面的标签在全局配置文件中,进行配置的时候,是有顺序的,比如 settings 是在第二个,那么只能配置在第二个,不能配置在第三个、第四个 ;

(六)mybatis 全局配置文件讲解的更多相关文章

  1. Mybatis全局配置文件详解(三)

    每个基于Mybatis应用都是以一个SqlSessionFactory实例为中心.SqlSessionFactory实例可以由SqlSessionFactoryBuild获得,而SqlSessionF ...

  2. MyBatis 全局配置文件详解(七)

    MyBatis 配置文件作用 MyBatis配置文件包含影响 MyBatis 框架正常使用的功能设置和属性信息.它的作用好比手机里的设置图标,点击这个图标就可以帮助我们查看手机的属性信息和设置功能.其 ...

  3. Mybatis学习(3)关于mybatis全局配置文件SqlMapConfig.xml

    比如针对我这个项目的mybatis全局配置文件SqlMapConfig.xml做一些说明: <?xml version="1.0" encoding="UTF-8& ...

  4. mybatis全局配置文件

    一.properties:引入外部配置文件 1.resource :引入类路径下的全局配置文件,例如:<properties resource="conf/dbconfig.prope ...

  5. Spring+SpringMVC+MyBatis深入学习及搭建(三)——MyBatis全局配置文件解析

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6874672.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(二)——My ...

  6. MyBatis全局配置文件的各项标签3

    mapper 将sql映射注册到全局配置中,这个我们在上一章已经使用过了, resource 这个属性是用来引用类路径下的sql映射文件 url 这个属性是用来引用网络路径或磁盘路径下的sql映射文件 ...

  7. MyBatis全局配置文件MyBatis-config.xml代码

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...

  8. MyBatis全局配置文件mybatis-config.xml

    1.在官方下载的mybatis-3.4.5.zip压缩包中,有我们需要的mybatis核心jar包和mybatis的快速入门的pdf文件 在mybatis的快速入门的pdf文件中,复制如下代码到我们项 ...

  9. MyBatis全局配置文件标签详解

    一.全局配置文件结构 configuration 配置 properties 属性:可以加载properties配置文件的信息 settings 设置:可以设置mybatis的全局属性 typeAli ...

随机推荐

  1. rxjs——subject和Observable的区别

    原创文章,转载请注明出处 理解 observable的每个订阅者之间,是独立的,完整的享受observable流动下来的数据的. subject的订阅者之间,是共享一个留下来的数据的 举例 这里的cl ...

  2. python的协程,monkeyPatch

    monkey patch 一般指运行时候进行动态替换. 基本上我们使用gevent,会在最开头的地方加入gevent.monkey.patch_all();把标准库中的thread/socket等给替 ...

  3. LOJ #6669 Nauuo and Binary Tree (交互题、树链剖分)

    题目链接 https://loj.ac/problem/6669 题解 Orz yyf太神了,出这种又有意思又有意义的好题造福人类-- 首先\(n\)次询问求出所有节点的深度. 考虑按深度扩展(BFS ...

  4. IdentityServer4入门一

    这几天学习IdentityServer4,感觉内容有点乱,也可能自己水平有限吧.但为了巩固学习的内容,也打算自己理一下思路. 首先IdentityServer解决什么问题? 下图是我们的一个程序的组织 ...

  5. Leetcode题目300.最长上升子序列(动态规划-中等)

    题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度 ...

  6. Flutter移动电商实战 --(22)JSON解析和复杂数据模型转换技巧

    json转Model类 创建model文件夹,在里面新建category.dart类 主要根据这个json来分析我们要做成类的样子 { "code": "0", ...

  7. Fegin的使用总结

    /** * * @Description: 修改microservicecloud-api工程,根据已经有的DeptClientService接口 新建,MICROSERVICECLOUD-DEPT指 ...

  8. linux下的usb抓包方法

    1 linux下的usb抓包方法1.配置内核使能usb monitor: make menuconfig                   Device Drivers -->        ...

  9. vsCode多选多个元素进行统一修改

    如果你没有修改过vsCode的快捷键那么你可以按住"ctrl+d",然后逐个选中你要修改的元素,选完之后松开,你就可以敲击键盘愉快的修改了...如果你使用了ecliplse快捷键插 ...

  10. linux:解决SSH连接Linux超时自动断开

    用SSH登录到Linux的时候,由于默认的连接超时时间很短,经常断开! 1.修改文件 # vi /etc/ssh/sshd_config 2.重启sshd服务 # /etc/init.d/sshd r ...