文章目录
- 三、MyBatis核心配置文件详解
三、MyBatis核心配置文件详解
application.properties
server.port=8018
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.31.20:3306/litemall
jdbc.username=root
jdbc.password=123456
详情请看mybatis-config.xml配置文件
<?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>
<!--
MyBatis核心配置文件中,标签的顺序:
properties?,settings?,typeAliases?,typeHandlers?,
objectFactory?,objectWrapperFactory?,reflectorFactory?,
plugins?,environments?,databaseIdProvider?,mappers?
-->
<!--引入properties文件,此时就可以${属性名}的方式访问属性值-->
<properties resource="application.properties" />
<settings>
<!--将表中字段的下划线自动转换为驼峰-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--开启延迟加载-->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
<!--设置类型别名-->
<typeAliases>
<!--
typeAlias:设置某个具体的类型的别名
属性:
type:需要设置别名的类型的全类名
alias:设置此类型的别名,若不设置此属性,该类型拥有默认的别名,即类名且不区分大小
写
若设置此属性,此时该类型的别名只能使用alias所设置的值
-->
<typeAlias type="com.mybatis.entity.User" alias="User"></typeAlias>
<!--以包为单位,设置改包下所有的类型都拥有默认的别名,即类名且不区分大小写-->
<!-- <package name="com.mybatis.entity"/>-->
</typeAliases>
<!--
environments:配置多个连接数据库的环境
属性:
default:设置默认使用的环境的id
-->
<environments default="development">
<!--
environment:设置具体的连接数据库的环境信息
属性:
id:设置环境的唯一标识,可通过environments标签中的default设置某一个环境的id,
表示默认使用的环境
-->
<environment id="development">
<!--
transactionManager:设置事务管理方式
属性:
type:设置事务管理方式,type="JDBC|MANAGED"
type="JDBC":设置当前环境的事务管理都必须手动处理
type="MANAGED":设置事务被管理,例如spring中的AOP
-->
<transactionManager type="JDBC"/>
<!--
dataSource:设置数据源
属性:
type:设置数据源的类型,type="POOLED|UNPOOLED|JNDI"
type="POOLED":使用数据库连接池,即会将创建的连接进行缓存,下次使用可以从
缓存中直接获取,不需要重新创建
type="UNPOOLED":不使用数据库连接池,即每次使用连接都需要重新创建
type="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>
<!--配置生产环境-->
<environment id="prod">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.31.20:3306/litemall"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<!-- <mapper resource="mapper/UserMapper.xml"/>-->
<!--
以包为单位引入映射文件
要求:
1、mapper接口所在的包要和映射文件所在的包一致
2、mapper接口要和映射文件的名字一致
-->
<package name="com.mybatis.mapper"/>
</mappers>
</configuration>
注意点1:
问题:mybatis-config.xml中的属性标签是有顺序的,乱写会报错,如图1
解决方案
:按顺序书写即可,把<typeAliases>标签放在<properties>之后即可。
注意点2
:实体类可以设置别名,
问题:为啥需要设置别名?一定要设置吗?
答案
:不一定非得设置,但是设置别名后使用更加简洁、清爽。
比如com/mybatis/mapper/UserMapper.xml中的定义<select id=“getUserById” resultType=“com.mybatis.entity.User”>,请看resultType属性配置包名,如果包名嘎嘎长,那么这里也会写的嘎嘎长,很不优雅;而如果在mybatis-config.xml定义别名,那么可以写成<select id=“getAllUser” resultType=“User”>,瞬间清爽了许多。
注意点3
:针对注意点2中,配置类别名有2种方式
方式1
:单独一个一个引入实体类。
<typeAlias type="com.mybatis.entity.User"></typeAlias>
方式2
:指定包名,默认会把包下面所有实体定义别名,实体类的类名作为别名,且不区分大小写。
<package name="com.mybatis.entity"/>
注意点4
:设置类别名时,采用<typeAlias>标签如果设置alias属性,那么这个alias属性值就是唯一的别名且不区分大小写;如果没设置alias属性,那么alias属性值就采用类名。具体请看下方代码,resultType属性值设置大小写都能查询结果:
<select id="getAllUser" resultType="User">
select * from litemall.litemall_user
</select>
------------------------------------------------
<select id="getAllUser" resultType="user">
select * from litemall.litemall_user
</select>
注意点5
:mybatis-config.xml中引入映射文件也有2种方式
方式1
:单独一个一个引入xml文件,比如
<mapper resource="mapper/UserMapper.xml"/>
方式2
:指定包名,注意其中的2点注意事项
<!--
以包为单位引入映射文件
要求:
1、mapper接口所在的包要和映射文件所在的包一致
2、mapper接口要和映射文件的名字一致
-->
<package name="com.mybatis.mapper"/>
注意点6
:针对注意点5中如果采用方式1引入指定的xx.xml,那么它可以放在任何目录下,比如如图1,UserMapper接口在包com.mybatis.mapper路径下,而UserMapper.xml则在resources下的mapper路径下,哪怕两个路径不同名也没问题;但是如果采用方式2,包名不同名的话就会报错如图2,所以必须同名,改为如图3中的效果就可以正常运行。
注意点7
:mybatis-config.xml中可以配置多环境,比如开发环境,生产环境等,他们读取的是不同的配置信息,调用不同的数据库。其中标签<environments>中的default属性,用来指定加载哪个环境的配置信息。
<!--
environments:配置多个连接数据库的环境
属性:
default:设置默认使用的环境的id
-->
<environments default="development">
<!--
environment:设置具体的连接数据库的环境信息
属性:
id:设置环境的唯一标识,可通过environments标签中的default设置某一个环境的id,
表示默认使用的环境
-->
<environment id="development">
<!--
transactionManager:设置事务管理方式
属性:
type:设置事务管理方式,type="JDBC|MANAGED"
type="JDBC":设置当前环境的事务管理都必须手动处理
type="MANAGED":设置事务被管理,例如spring中的AOP
-->
<transactionManager type="JDBC"/>
<!--
dataSource:设置数据源
属性:
type:设置数据源的类型,type="POOLED|UNPOOLED|JNDI"
type="POOLED":使用数据库连接池,即会将创建的连接进行缓存,下次使用可以从
缓存中直接获取,不需要重新创建
type="UNPOOLED":不使用数据库连接池,即每次使用连接都需要重新创建
type="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>
<!--配置生产环境-->
<environment id="prod">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.31.20:3306/litemall"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
`注意点8:mybatis-config.xml中可以指定加载哪个配置文件名称的信息,假设你数据库连接配置放在自定义配置文件名称叫xx.properties,在这里就可以指定加载,这里主要和<environments>标签一起使用,通过${}获取属性值。
<!--引入properties文件-->
<properties resource="application.properties" />