网站首页 > 精选教程 正文
01主配置文件说明与细节配置
<environments>:环境集标签,就是用于配置数据库的环境,一个environments 中可以包含多个 environment,例如 测试/开发/上线, 这里默认是开发环境,default属性需要和environment的id属性保持一致,可以定义多个 environment 元素,通过default属性来切换不同的环境.
<environment>:用于配置具体环境参数,例如配置事务,连接池等.
<transactionManager>:配置使用的事务类型,JDBC表示默认事物,MANAGER表示没有事务
<dataSource>:配置数据源的参数,POOLED,具体参数参看PooledDataSource的set方法
<property>:配置属性,例如数据库四大连接参数
<mappers>:配置映射文件信息的
<mapper class|resource>:配置具体指定的mapper文件
class属性:配置使用注解时指定有注解的映射接口
resource属性:指定XML映射文件
<properties>:mybatis对propertis文件的支持
<typeAliases>:用于配置别名
<typeHandlers>:用于配置自定义类型处理器.
<settings>:配置Mybatis的默认设置的.
02总配置文件的标签顺序
如下所示是主配置文件的文档声明:
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
文档声明中指定了当前XML文件的XML约束,它是一个dtd文件,dtd约束指定了配置文件中标签的顺序,如下所示:
<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,
objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>
这句话的意思就是configuration 标签下的标签的顺序以及标签出现的个数的声明
根据这个声明可以看到顺序为:
1.properties
2.settings
3.typeAliases
4.typeHandlers
5.objectFactory
6.objectWrapperFactory
7.reflectorFactory
8.plugins
9.environments
10.databaseIdProvider
11.mappers
DTD规则文件标签的出现的次数说明
? , * , + 正则表达式的次数
如果声明的标签后?:表示出现0-1次
如果声明的标签后*:表示出现0-N次
如果声明的标签后+:表示出现1-N次
如果声明的标签后什么都没有:表示出现1次
03.typeAliases别名配置
在UserMapper.xml文件中User无论是作为参数还是作为查询返回数据类型,都需要写上全限定名,实际可以写上简单类名即可,但是需要配置别名.
MyBatis框架提供了两种别名机制,一种是自定义别名,一种是内置别名
3.1 自定义别名
<typeAliases>: 自定义别名配置
常见属性:
type: 要设置别名的数据类型(全限定名)
alias : 取的别名,一般都使用类的简单名称
代码示例:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-http://mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 别名配置 -->
<typeAliases>
<!-- 配置单个类型的别名
type: 要设置别名的数据类型(全限定名)
alias : 取的别名,一般都使用类的简单名
-->
<typeAlias type="com.xyr.domain.User" alias="user"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?
useUnicode=true&characterEncoding=utf8"/
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/xyr/mapper/UserMapper.xml"/>
</mappers>
</configuration>
如果配置成功,在映射文件里面可以直接使用别名:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "http://mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xyr.mapper.UserMapper">
<select id="selectOne" parameterType="int" resultType="user">
select * from user where id = #{id}
</select>
<select id="selectAll" resultType="user">
select * from user;
</select>
<insert id="saveUser" parameterType="user">
insert into user values(null, #{name}, #{password}, #{age});
</insert>
</mapper>
包扫描配置别名
<package name="com.xyr.domain"/>
name属性 : 对应要取别名的包,自动会为包下面的所有的类取别名,别名就是当前类名的简单名称
3.2 内置别名
所谓的内置别名,就是Mybatis框架自带别名.
Mybatis已经将常用的数据类型的别名内置声明了.所以这些内置的别名不需要配置就可以直接使用.
内置的别名就是,Mybatis框架默认已经设置的别名.
别名 | 映射的类型 |
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | 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 |
04properties 读取配置文件
一般开发会将单独的数据库连接字符串配置到一个独立的 以 .properties 的配置文件中
Mybaits框架中配置文件 的 <properties>标签可以读取配置文件中的内容。并可以使用${}的OGNL语法设置给框架的数据库连接操作代码
1. 在classpath下面创建一个db.properties数据库连接配置文件
mysql.driver=com.mysql.jdbc.Driver mysql.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
mysql.user=root mysql.password=root
2. 在mybatis-config.xml主配置文件中配置<properties>标签读取配置文件,位置是在configuration标签的第一个位置
<!-- 根标签,在内部配置MyBatis框架信息
-->
<configuration>
<!-- 读取classpath下面的 数据库配置文件、 读取以后在下面连接数据库的配置中就可以使用 ${配置文件key} 获取对应的数据库连接相关信息
-->
<properties resource="db.properties"/>
3. 连接数据库的配置修改为 ${key}的方式
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"//mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置properties标签用来引入数据库连接配置 -->
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.user}"/>
<property name="password" value="${mysql.password}"/> </dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/xyr/mapper/UserMapper.xml"/>
</mappers>
</configuration>
05settings标签
Mybatis默认设置了很多默认配置.有时候,我们需求与默认的配置的参数不一样,
我们就需要修改这些默认配置的参数.
如:Mybatis已经对骆驼命名法的支持,但默认是不开启的.可以通过mapUnderscoreToCamelCase参数设置为true支持
表示Mybatis启动可以配置的设置
设置名 | 描述 | 有效值 | 默认值 |
cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true | false | true |
lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 | true | false | false |
aggressiveLazyLoading | 开启时,任一方法的调用都会加载该对象的所有延迟加载属性。 否则,每个延迟加载属性会按需加载(参考 lazyLoadTriggerMethods)。 | true | false | false (在 3.4.1 及之前的版本中默认为 true) |
multipleResultSetsEnabled | 是否允许单个语句返回多结果集(需要数据库驱动支持)。 | true | false | true |
useColumnLabel | 使用列标签代替列名。实际表现依赖于数据库驱动,具体可参考数据库驱动的相关文档,或通过对比测试来观察。 | true | false | true |
useGeneratedKeys | 允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。 | true | false | False |
autoMappingBehavior | 指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示关闭自动映射;PARTIAL 只会自动映射没有定义嵌套结果映射的字段。 FULL 会自动映射任何复杂的结果集(无论是否嵌套)。 | NONE, PARTIAL, FULL | PARTIAL |
autoMappingUnknownColumnBehavior | 指定发现自动映射目标未知列(或未知属性类型)的行为。 NONE: 不做任何反应 WARNING: 输出警告日志('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日志等级必须设置为 WARN) FAILING: 映射失败 (抛出 SqlSessionException) | NONE, WARNING, FAILING | NONE |
defaultExecutorType | 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。 | SIMPLE REUSE BATCH | SIMPLE |
defaultStatementTimeout | 设置超时时间,它决定数据库驱动等待数据库响应的秒数。 | 任意正整数 | 未设置 (null) |
defaultFetchSize | 为驱动的结果集获取数量(fetchSize)设置一个建议值。此参数只可以在查询设置中被覆盖。 | 任意正整数 | 未设置 (null) |
defaultResultSetType | 指定语句默认的滚动策略。(新增于 3.5.2) | FORWARD_ONLY | SCROLL_SENSITIVE | SCROLL_INSENSITIVE | DEFAULT(等同于未设置) | 未设置 (null) |
safeRowBoundsEnabled | 是否允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为 false。 | true | false | False |
safeResultHandlerEnabled | 是否允许在嵌套语句中使用结果处理器(ResultHandler)。如果允许使用则设置为 false。 | true | false | True |
mapUnderscoreToCamelCase | 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 | true | false | False |
localCacheScope | MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。 默认值为 SESSION,会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地缓存将仅用于执行语句,对相同 SqlSession 的不同查询将不会进行缓存。 | SESSION | STATEMENT | SESSION |
jdbcTypeForNull | 当没有为参数指定特定的 JDBC 类型时,空值的默认 JDBC 类型。 某些数据库驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。 | JdbcType 常量,常用值:NULL、VARCHAR 或 OTHER。 | OTHER |
lazyLoadTriggerMethods | 指定对象的哪些方法触发一次延迟加载。 | 用逗号分隔的方法列表。 | equals,clone,hashCode,toString |
defaultScriptingLanguage | 指定动态 SQL 生成使用的默认脚本语言。 | 一个类型别名或全限定类名。 | org.apache.ibatis.scripting.xmltags.XMLLanguageDriver |
defaultEnumTypeHandler | 指定 Enum 使用的默认 TypeHandler 。(新增于 3.4.5) | 一个类型别名或全限定类名。 | org.apache.ibatis.type.EnumTypeHandler |
callSettersOnNulls | 指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这在依赖于 Map.keySet() 或 null 值进行初始化时比较有用。注意基本类型(int、boolean 等)是不能设置成 null 的。 | true | false | false |
returnInstanceForEmptyRow | 当返回行的所有列都是空时,MyBatis默认返回 null。 当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集(如集合或关联)。(新增于 3.4.2) | true | false | false |
logPrefix | 指定 MyBatis 增加到日志名称的前缀。 | 任何字符串 | 未设置 |
logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | 未设置 |
proxyFactory | 指定 Mybatis 创建可延迟加载对象所用到的代理工具。 | CGLIB | JAVASSIST | JAVASSIST (MyBatis 3.3 以上) |
vfsImpl | 指定 VFS 的实现 | 自定义 VFS 的实现的类全限定名,以逗号分隔。 | 未设置 |
useActualParamName | 允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的项目必须采用 Java 8 编译,并且加上 -parameters 选项。(新增于 3.4.1) | true | false | true |
configurationFactory | 指定一个提供 Configuration 实例的类。 这个被返回的 Configuration 实例用来加载被反序列化对象的延迟加载属性值。 这个类必须包含一个签名为static Configuration getConfiguration() 的方法。(新增于 3.2.3) | 一个类型别名或完全限定类名。 | 未设置 |
shrinkWhitespacesInSql | Removes extra whitespace characters from the SQL. Note that this also affects literal strings in SQL. (Since 3.5.5) | true | false | false |
1. 如支持驼峰命名法
<!-- 配置默认的参数 -->
<settings>
<!-- 默认支持骆驼命名法 --> <setting name="mapUnderscoreToCamelCase" value="true"/>
// 把 u_id 转成 uId
</settings>
JavaBean如下所示:
public class User2 {
private Integer uId;
private String uName;
private String uPwd;
private String uAge;
// 此处get/set/toString方法省略... }
UserMapper类如下所示:
/**
* 测试驼峰命名法
?* @param id
* @return
*/
User2 findOne(Integer id);
UserMapper.xml配置如下所示;
<select id="findOne" parameterType="int" resultType="user2">
select id u_id, name u_name, password u_pwd, age u_age from user where id = #{id}
</select>
测试类如下所示:
@Test public void testFindOne() {
try(SqlSession sqlSession = MyBatisUtils.getSession()){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User2 user2 = userMapper.findOne(4);
System.out.println(user2);
}
}
2. 日志配置
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
06mappers标签
?mappers标签中可以包含多个子mapper标签,每一个mapper标签对应的是一个映射配置,这个映射配置可以是XML配置,也可以是注解配置
mapper的属性如果是resource,那么表示使用XML文件配置,如果是class,表示使用注解配置
如下所示是XML配置:
<mappers>
<mapper resource="com/xyr/mapper/UserMapper.xml"/>
</mappers>
如下所示是注解配置:
<mapper class="com.xyr.mapper.UserMapper"/>
在实际开发中我们的Mapper类或者Mapper.xml文件很多,这个是配置比较繁琐,我们可以配置包扫描,包扫描会自动扫描某个包下所有的mapper,代码如下所示:
<package name="com.xyr.mapper"/>
猜你喜欢
- 2024-12-26 Mybatis配置文件XML全貌详解,再不懂我也没招了
- 2024-12-26 【预警通报】关于Xstream存在多个高危漏洞的预警通报
- 2024-12-26 一文了解 Maven 的 settings.xml 配置文件
- 2024-12-26 MyBatis 入门教程-配置MyBatis XML映射文件
- 2024-12-26 Java对接微信、支付宝、银联第三方支付
- 2024-12-26 JAVA导出EXCEL表格
- 2024-12-26 Java对象的序列化与反序列化
- 2024-12-26 Java对象实例化的7种方式
- 2024-12-26 5、请介绍一下 XMLHTTPrequest 对象及常用方法和属性(必 会)
- 2024-12-26 第9天 | 鸿蒙App开发实战,XML创建布局,共性很重要
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)