Mybatis全局配置文件
前言
如果IDEA没有XML自动提示,可在如下图所示地方添加两个dtd文件:
http://mybatis.org/dtd/mybatis-3-config.dtd
http://mybatis.org/dtd/mybatis-3-mapper.dtd
一、properties
- mybatis可以使用properties标签来引入外部properties配置文件内容
- resource属性:引入类路径下的资源
- URL属性:引入网络路径或磁盘路径下的资源
示例:
新建文件 dbconfig.properties 在里面配置数据库连接信息
jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=user
jdbc.username=sa
jdbc.password=12345
修改 mybatis-config.xml 配置文件
- 在properties 标签下的resource 中写入dbconfig.properties 文件(注意路径问题)
- 修改数据库连接信息,将写死的 value 改成 用 ${} 符号取出配置文件中的值的格式
如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="com\conf\dbconfig.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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/conf/StudentDAO.xml"/>
</mappers>
</configuration>
二、settings
settings标签包含了很多mybatis设置项
- setting :用来设置每一个 设置项
- name:设置项名
- value:设置项取值
具体每一个设置项请参考: 官方文档
<settings>
<setting name="" value=""/>
</settings>
举例:一个常用的设置项 mapUnderscoreToCamelCase 数据库驼峰命名设置,即是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。
<settings>
<setting name="mapUnderscoreToCamelCase " value="true"/>
</settings>
开启后即可映射因为驼峰命名导致数据库名与属性名不一致的数据项
三、typeAliases
typeAliases是mybatis下的别名处理器,可以为一个java类型起一个别名、
- typeAliases :可以为一个java类型起一个别名
- type:指定要起别名的类型全类名,默认别名为类名小写
- alias:指定一个新的别名
- 别名不区分大小写
如:
<typeAliases>
<typeAlias type="com.company.Student" alias="student"/>
</typeAliases>
则mapper文件里resultType属性即可写别名
<mapper namespace="com.company.StudentDAO">
<select id="SelectStudent" resultType="student">
select * from userbean where username = #{username}
</select>
</mapper>
批量起别名
- package:为某个指定包下的所有类其别名
- name: 指定包名(为当前包下所有类其默认别名)
注解:使用此方法后mybatis会在包名下搜索需要的java Bean,在后面使用java Bean时可省去前面的报名直接写类名名,首字母小写
<typeAliases>
<package name="com.company"/>
</typeAliases>
在类里面使用注解 @Alias 起别名
在批量起别名的情况下
@Alias("student")
public class Student{
}
很多java类型都起有默认别名
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
四、typeHandlers
typeHandlers类型处理器,架起java类型和数据库类型的桥梁
官方文档
五、objectFactory
objectFactory 对象工厂
官方文档
六、plugins
plugins 插件
七、environments
environments 环境配置,mybatis可以配置多种环境
- default :指定使用某种环境
- environment:配置一个具体的环境信息
id:代表当前环境的唯一标识(可用于设定测试可开发环境,修改 environments 的default 属性可切换环境)
transactionManager :事务管理器
type:事务管理器类型:{JDBC|MANAGED}进行事务控制
dataSource :数据源;
type:数据源类型:{UNPOOLED(不使用连接池技术)|POOLED(使用连接池技术)|JNDI}(可自定义数据源,C3P0等)
<environments default="development">
<environment id="text">
<transactionManager type=""></transactionManager>
<dataSource type=""></dataSource>
</environment>
<environment id="development">
<transactionManager type="JDBC"/>
<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>
八、databaseIdProvider
databaseIdProvider 数据库厂商标识
- databaseIdProvider 支持多数据库厂商
- type=“DB_VENDOR”:获取数据库厂商标识,mybatis能根据数据库厂商标识来执行不同的sql语句
- property:为不同厂商起别名(name:厂商标识;value:别名 )
在mapper文件中告诉mybatis 某个sql属于哪个数据库厂商使用
databaseId="mysql"指定为mysql数据库使用
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
<mapper namespace="com.company.StudentDAO">
<select id="SelectStudent" resultType="student" databaseId="mysql">
select * from userbean where username = #{username}
</select>
<select id="SelectStudent" resultType="student" databaseId="sqlserver">
select * from user where username = #{username}
</select>
</mapper>
这样在environments 的default中切换环境时就可自动切换数据库语句
九、mappers
mappers 映射器,将sql映射注册到全局映射中
- mappers :注册一个sql映射
- resource:引用类路径下的sql文件(注册配置文件)
- url:引用网络路径下或磁盘路径下的sql文件(注册配置文件)
- class:引用接口(注册接口)
有sql映射文件,映射文件名必须和接口同名,并且放在同一目录下
没有sql映射文件,所有sql都是利用注解写在接口上 - package
三种方法注册mapper:resource、class、package (url不推荐使用,推荐使用resource)
/**
注入方法:
'将sql写在注解上,则注册mappers时使用 class 属性
*/
public interface StudnetAnnotation {
@Select(" select * from user where username = #{username}")
Student SelectStudent(String s) ;
}
<!--resource方法-->
<mappers>
<mapper resource="com/company/StudnetAnnotation"></mapper>
</mappers>
<!--class方法,使用注解写sql时使用-->
<mappers>
<mapper class="com.company.StudnetAnnotation"></mapper>
</mappers>
<!--package 方法-->
<mappers>
<mapper package="com.company.StudnetAnnotation"></mapper>
</mappers>
推荐
比较重要的,复杂DAO接口使用映射文件
不重要的DAO接口可以使用注解(更快)
批量注册
package:进行批量注册
name:写包名
<package name="com.company"/>
注意:
1、 各种接口、映射文件的路径问题,可以让DAO和映射文件在不同路径下起同样包名,如下
2、使用package和class方法映射时接口和他的mapper配置文件必须同名且在同一包下
待续。。。。