Mybatis——配置信息及resultMap
1 Mybatis配置信息
Mybatis一般以mybatis-config.xml
为名作为配置文件。
配置内容如下:
- configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器) 了解
- objectFactory(对象工厂) 了解
- plugins(插件) 了解
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
注意:
各个属性在Mybatis核心配置文件中的顺序,都是规定好的,不可打乱,顺序就如同上面的书写顺序。
(1)环境配置(environments)
<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?useSSL=true&
useUnicode=true&chracterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="mysql"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&
useUnicode=true&chracterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="mysql"/>
</dataSource>
</environment>
</environments>
1) environments
- 尽管可以配置多个环境,但每个 SqlSessionFactory
实例只能选择一种环境,使用default="development"
选定所要使用的环境。
2) transactionManager:事务管理器
Mybatis有两种事务管理器,JDBC、MANAGED
3) dataSource:数据源(连接数据库)
有三种内建的数据源类型,UNPOLLED, POLLED, JNDI
UNPOOLED
– 这个数据源的实现会每次请求时打开和关闭连接.
POOLED
– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。
(2)属性(properties)
我们可以通过properties属性来实现引用配置文件。
1) 编写一个配置文件db.properties
:
driver = com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&chracterEncoding=utf8
username =root
password =mysql
2) 在Mybatis配置文件mybatis.xml中引入外部配置文件
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
注:
用${username}
代表db.properties中的key
3) 在properties内部增加一些property属性配置
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="mysql"/>
</properties>
注意:
当内部property属性和外部db.properties配置有冲突时,优先使用外部配置文件。
(3) 类型别名(typeAliases)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
方式一:实体类比较少的时候,可以直接指定
<typeAliases>
<typeAlias type="com.glp.POJO.User" alias="User"/>
</typeAliases>
方式二:适用于实体类比较多的情况下
在Bean没有注解的情况下,首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。
@Alias("author")
public class Author {
...
}
<typeAliases>
<package name="com.glp.POJO"/>
</typeAliases>
Java 类型内建的类型别名。它们都是不区分大小写的:
_byte byte
_long long
_short short
_int int
map Map
hashmap HashMap
list List
integer Integer
double Double
float Float
boolean Boolean
(4) 设置(settings)
1)mapUnderscoreToCamelCase
是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 true (开启)False(默认关闭)
注:
之所以有这个,是因为Oracle会将存入数据库的字段全部转化为大写,所以为了区分字段,在存入数据库时,字段中间都加一个_
比如A_COLUMN
2)logImpl
指定 MyBatis 所用日志的具体实现,未指定时将自动查找。
SLF4J | LOG4J |
LOG4J2 | JDK_LOGGING |
COMMONS_LOGGING | STDOUT_LOGGING |
NO_LOGGING
3)cacheEnabled
全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 默认true
4)lazyLoadingEnabled
延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 默认true
(5) plugins(插件)
- mybatis-generator-core:用来自动生成Mybatis代码
- mybatis-plus
- mapper
(6) 映射器(mappers)
注册绑定我们的mapper文件
方式一:使用相对于类路径的资源引用
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
</mappers>
方式二:使用映射器接口实现类的完全限定类名 常用
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
</mappers>
方式三:将包内的映射器接口实现全部注册为映射器
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
注意:使用方法二和方法三
- 接口和它的Mapper配置文件必须同名。
- 接口和它的Mapper配置文件必须在同一个包下。
2 解决属性名和字段不一致的情况——resultMap
- resultMap 元素是 MyBatis 中最重要最强大的元素。
- ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。
属性名和字段不一致:即POJO类中的属性和数据库中的字段名不一致的情况。
方式一:通过起别名来解决(粗暴)
select id,name,pwd as password from mybatis.user where id = #{id};
方式二:结果集映射(resultMap)
定义resultMap,将字段映射到类属性中。其中column为数据库字段,type为POJO类属性。
<resultMap id="UserMap" type="User">
<result column="pwd" property="password"/>
</resultMap>
<select id="getUserById" parameterType="int" resultMap="UserMap">
select * from mybatis.user where id = #{id};
</select>
resultMap处理复杂类型:https://blog.csdn.net/glpghz/article/details/107747128