MyBatis - sqlMapConfig.xml主配置文件
SqlMapConfig.xml配置文件的内容和配置顺序如下
① properties(读取配置文件):定义配置,配置的属性可以在整个配置文件中其他位置进行引用;
② settings(全局配置参数):用于指定MyBatis的一些全局配置属性,这些属性非常重要,它们会改变MyBatis的运行时行为;
③ typeAliases(类型别名):用于配置多个数据源,每个数据源分为数据库源和事务的配置;
④ typeHandlers(类型处理器):定义类型处理,也就是定义java类型与数据库中的数据类型之间的转换关系
⑤ objectFactory(对象工厂):
⑥ plugins(插件):Mybatis的插件,插件可以修改Mybatis内部的运行规则
⑦ environments(环境集合属性对象,与Spring框架整合后Say Good Bye):用于配置多个数据源,每个数据源分为数据库源和事务的配置;
1、environment(环境子属性对象)
2、transactionManager(事务管理)
3、dataSource(数据源)
⑧ mappers(配置映射器位置):配置引入映射器的方法。
properties属性
作用:将数据连接单独配置在db.properties中,只需要在SqlMapConfig.xml中加载db.properties的属性值,在SqlMapConfig.xml中就不需要对数据库连接参数进行硬编码。
数据库连接参数只配置在db.properties中,方便对参数进行统一管理,其它xml可以引用该db.properties。
● db.properties的内容:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/games_db?useUnicode=true&characterEncoding=UTF-8&useSSL=true
jdbc.username=root
jdbc.password=123456
● 在SqlMapConfig.xml中加载db.properties
<!-- 引入外部配置文件 -->
<properties resource="db.properties"></properties> <!-- 配置mybatis运行环境 ; 在集成Spring是不用 -->
<environments default="development">
<environment id="development">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- 使用连接池连接数据库 - mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 ; UNPOOLED 表示不支持数据源连接池 ; JNDI 表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments> <!--配置映射器的位置 -->
<mappers>
<!-- 单个配置 -->
<!-- <mapper resource="com/sikiedu/mapper/UserMapper.xml" /> -->
<!-- <mapper url="file:\\\D:\Java\WorkSpace\JavaEE_SSM_Test\ssm_mybatis\src\com\sikiedu\mapper\UserMapper.xml" /> -->
<!-- <mapper class="com.sikiedu.mapper.UserMapper" /> -->
<!-- 多配置-以包的形式;推荐使用 -->
<package name="com.sikiedu.mapper" />
</mappers>
● properties特性:
- 注意:
在properties元素体内定义的属性优先读取。
然后读取properties元素中resource或url加载的属性,它会覆盖已读取的同名属性。
最后读取parameterType传递的属性,它会覆盖已读取的同名属性
- 建议:
不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。
在properties文件中定义属性名要有一定的特殊性,如xxxx.xxxx(jdbc.driver)
settings - 全局参数配置
mybatis框架运行时可以调整一些运行参数。比如,开启二级缓存,开启延迟加载等等。全局参数会影响mybatis的运行行为。
<!-- 参数设置 -->
<settings> <!-- 这个配置使全局的映射器启用或禁用缓存 -->
<setting name="cacheEnabled" value="true" /> <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 -->
<setting name="lazyLoadingEnabled" value="true" /> <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载 -->
<setting name="aggressiveLazyLoading" value="true" /> <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动) -->
<setting name="multipleResultSetsEnabled" value="true" /> <!-- 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动 -->
<setting name="useColumnLabel" value="true" /> <!-- 允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) -->
<setting name="useGeneratedKeys" value="true" /> <!-- 指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况) -->
<setting name="autoMappingBehavior" value="PARTIAL" /> <!--当检测出未知列(或未知属性)时,如何处理,默认情况下没有任何提示,这在测试的时候很不方便,不容易找到错误。 NONE : 不做任何处理 (默认值) WARNING : 警告日志形式的详细信息 FAILING : 映射失败,抛出异常和详细信息 -->
<setting name="autoMappingUnknownColumnBehavior" value="WARNING" /> <!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新 -->
<setting name="defaultExecutorType" value="SIMPLE" /> <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 -->
<setting name="defaultStatementTimeout" value="25000" /> <!--设置查询返回值数量,可以被查询数值覆盖 -->
<setting name="defaultFetchSize" value="100" /> <!-- 允许在嵌套语句中使用分页 -->
<setting name="safeRowBoundsEnabled" value="false" /> <!--是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 -->
<setting name="mapUnderscoreToCamelCase" value="false" /> <!--MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。 -->
<setting name="localCacheScope" value="SESSION" /> <!-- 当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR OTHER。 -->
<setting name="jdbcTypeForNull" value="OTHER" /> <!-- 指定哪个对象的方法触发一次延迟加载。 -->
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" /> </settings>
typeAiases - 别名
在mapper.xml中,定义很多的statement,statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。
如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发。
● mybatis默认支持的别名
别名 | 映射的类型 | 别名 | 映射的类型 | 别名 | 映射的类型 | ||
_byte | byte | _boolean | boolean | double | Double | ||
_long | long | string | String | float | Float | ||
_short | short | byte | Byte | boolean | Boolean | ||
_int | int | long | Long | date | Date | ||
_integer | int | short | Short | decimal | BigDecimal | ||
_double | double | int | Integer | bigdecimal | Bigdecimal | ||
_float | float | integer | Integer |
● 自定义别名:
- 单个别名定义
<typeAliases>
<typeAlias type="com.sikiedu.beans.User" alias="user" />
</typeAliases>
- 批量定义别名:推荐
使用package包形式来配置别名,包的形式会扫描主包及子包中所有文件;
以对象类名为别名,大小写不限,推荐使用小写。
<typeAliases>
<package name="com.sikiedu.beans" />
</typeAliases>
- UserMapper.xml引用别名
<select id="findUserById" parameterType="int" resultType="user" >
select * from t_user where id=#{id}
</select>
typeHandlers - 类型处理器
mybatis中通过typeHandlers完成jdbc类型和java类型的转换。
通常情况下,mybatis提供的类型处理器满足日常需要,不需要自定义.
mybatis支持类型处理器:
类型处理器 |
Java类型 |
JDBC类型 |
BooleanTypeHandler |
Boolean,boolean |
任何兼容的布尔值 |
ByteTypeHandler |
Byte,byte |
任何兼容的数字或字节类型 |
ShortTypeHandler |
Short,short |
任何兼容的数字或短整型 |
IntegerTypeHandler |
Integer,int |
任何兼容的数字和整型 |
LongTypeHandler |
Long,long |
任何兼容的数字或长整型 |
FloatTypeHandler |
Float,float |
任何兼容的数字或单精度浮点型 |
DoubleTypeHandler |
Double,double |
任何兼容的数字或双精度浮点型 |
BigDecimalTypeHandler |
BigDecimal |
任何兼容的数字或十进制小数类型 |
StringTypeHandler |
String |
CHAR和VARCHAR类型 |
ClobTypeHandler |
String |
CLOB和LONGVARCHAR类型 |
NStringTypeHandler |
String |
NVARCHAR和NCHAR类型 |
NClobTypeHandler |
String |
NCLOB类型 |
ByteArrayTypeHandler |
byte[] |
任何兼容的字节流类型 |
BlobTypeHandler |
byte[] |
BLOB和LONGVARBINARY类型 |
DateTypeHandler |
Date(java.util) |
TIMESTAMP类型 |
DateOnlyTypeHandler |
Date(java.util) |
DATE类型 |
TimeOnlyTypeHandler |
Date(java.util) |
TIME类型 |
SqlTimestampTypeHandler |
Timestamp(java.sql) |
TIMESTAMP类型 |
SqlDateTypeHandler |
Date(java.sql) |
DATE类型 |
SqlTimeTypeHandler |
Time(java.sql) |
TIME类型 |
ObjectTypeHandler |
任意 |
其他或未指定类型 |
EnumTypeHandler |
Enumeration类型 |
VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。 |
environments - 环境集合属性对象
● environment 元素是配置一个数据源的开始,属性id是它的唯一标识
● transactionManager 元素配置数据库事务,其中type属性有三种配置方式
- jdbc,采用jdbc的方式管理事务;
- managed,采用容器的方式管理事务,在JNDI数据源中使用;
- 自定义,自定义数据库事务管理办法;
● dataSource 元素配置数据源连接信息,type属性是连接数据库的方式配置,有四种配置方式
- UNPOOLED 非连接池方式连接
- POOLED 使用连接池连接
- JNDI 使用JNDI数据源
mappers - 映射配置
● 加载单个映射文件
- resource、url方法一次加载一个映射文件
- class属性:mapper接口加载单个映射配置文件;遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;
上边规范的前提是:使用的是mapper代理方法;
<mappers>
<!-- 单个配置 -->
<mapper resource="com/sikiedu/mapper/UserMapper.xml" />
<mapper url="file:\\\D:\Java\WorkSpace\JavaEE_SSM_Test\ssm_mybatis\src\com\sikiedu\mapper\UserMapper.xml" />
<mapper class="com.sikiedu.mapper.UserMapper" />
</mappers>
● 批量加载mapper - 推荐使用
批量加载映射配置文件,mybatis自动扫描包下面的mapper接口进行加载;
遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;
<!--配置映射器的位置 -->
<mappers>
<package name="com.sikiedu.mapper" />
</mappers>
♦ 另外,还可以通过自定义注解。当然,系统已经为我们提供了扫码工具【mybatis与spring集成】。
<bean id="mapperSanner" class="org.mybatis.spring.mapper.MapperSannerConfigurer">
<property name="basePackage" value="com.xxx.mapper"></property>
</bean>
还有一种情况,当我们不使用spring只使用mybatis时,那么我们就需要自定义注解来扫描mapper文件,通过mybatis的配置来使用了。
最新文章
- VBS 获取当前进程 ID
- 常用excel技巧
- 关于checkbox最保险和最模棱两可的方法
- POJ1125 Stockbroker Grapevine
- mongodb复制集配置
- Java关键字final、static使用总结(转)
- [物理学与PDEs]第1章 电动力学
- Redis操作命令
- ASP防注入
- mount命令以及mount ntfs硬盘权限权限与显示的问题 分类: shell ubuntu 2014-11-08 18:29 148人阅读 评论(0) 收藏
- 十二生肖&;天干地支
- [UWP]不怎么实用的Shape指南:自定义Shape
- Android中的服务
- angular4.0如何引入外部插件1:import方案
- ruby写一个文件内容相似性比较的代码
- ADB抓取内存命令
- tensorflow 源码编译
- java springboot2 jquery 抽奖项目源码
- shell一些不为人知的技巧
- centos下编译安装mysql5.5/5.6/5.7
热门文章
- 使用CSS为图片添加更多趣味的5种方法
- 纯css制作小三角
- 关于UIPageViewController去除边缘点击手势
- cpu子系统(优化)
- range和arange
- phonegap 开发指南系列(3) ----在Eclipse中Android开发环境搭建
- Java 基础 - 原生类型
- thinkphp 包含文件
- Myeclipse从外部导入项目时,jsp和html页面中所有的onclick=";return xx()";位置均出现cannot return from outside function() or method()错误
- mongodb操作指令(二):索引,聚合,管道