一、纯Springboot环境下
配置在properties.yml 、properties.xml下,该文件放置在resosurces下,建议使用properties.yml,层次感强。
可以多个配置文件或配置,然后指明active的配置是那组。
二、Springboot+MyBatis整合环境下
可以配置在properties.yml 、properties.xml下,默认调用。
Mybatis核心配置文件一般命名为MyBatis-config.xml(也可以是其他名称),核心配置文件一般存放的位置:src/main/resources
1、直接配置
也快配置在MyBatis核心配置文件的<enviroments> 标签的子标签<enviroment>下:
(1)单一数据源环境配置
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/powernode?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
注:
1)enviorments:配置多个连接数据库环境,default:默认使用的环境的ID
2)enviroment:配置某个具体的环境,id:表示连接数据库有的唯一标识,不能重复
3)transactionManager:设置事务管理方式,type:"JDBC/MANAGED":
JDBC:表示当前环境中,执行sql时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动;
MANAGED:表示被管理,例如被Spring
(2)多数据源环境配置:
可以在environments标签下,配置多个标签:多数据源,进行多环境的配置
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/powernode?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="mybatisDB">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisDB?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
配置说明:
(1)<environments default="development"> 表示默认的环境配置,通过id来指定
(2)一个环境下对应一个SqlSessionFactory 对象
(3)使用默认的环境
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
(4)指定mybatis的环境
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"),"mybatisDB");
三、properties标签
properties标签是用来加载Mybatis外部属性的标签,该标签用来将内部的配置外在化,即通过外部的配置来动态为内部定义的属性赋值。具体方式如下:
(2)使用配置文件加载属性的三种方式
- 使用resource加载相对路径下配置文件中的属性
- <properties resource="jdbc.properties" ></properties>
- 使用url加载绝对路径下配置文件的属性
- <properties url="file:///Users/yinyw/Documents/WorkSpace/MybatisDemo/src/main/resources/jdbc.properties" ></properties>
- 使用property加载属性
<properties>
<property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="jdbc.url" value="jdbc:mysql://192.168.0.101:3306/mybatis?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</properties>
(2)、在配置文件中使用属性
<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>
(3)在JAVA代码中使用属性
@Test
public void getProperty() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlConfiguration.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
Configuration configuration = sqlSessionFactory.getConfiguration();
Properties properties = configuration.getVariables();
String property = properties.getProperty("jdbc.driver");
System.out.printf("jdbc.driver:" + property);
}
4、使用时的注意事项
- resource和url不能同时使用,但是resource和property或者url和property能同时使用。
- 如果同时使用了resource和property或者是url和property,并且两者存在重复的属性,那么以resource或url中的属性为准,因为mybatis在加载配置的属性时,先加载property中的属性,后加载resource或url中的属性,所以在加载后者时,前者的属性就会被覆盖。
- 除了上述在xml文件中配置属性之外,还可以在JAVA代码中为mybatis配置属性,并且这种方式配置的属性优先级最高,也就是说如果配置文件中配置的属性和下面JAVA代码中配置的属性重复了,那么以JAVA代码中配置的属性为准。具体使用如下所示:
@Test
public void getProperty() throws IOException {
// 创建Properties对象,用来存放属性
Properties properties = new Properties();
properties.setProperty("yinyw.mybatisDemo.port","9888");
// 在mybatis构建SqlSessionFactory时将Properties对象作为参数传入进去
InputStream resourceAsStream = Resources.getResourceAsStream("SqlConfiguration.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream,properties);
}
- 属性命名建议:项目名.模块名.属性名。这样做的好处在于易识别。
2、properties标签的属性及子标签的值
通过properties标签的resource属性,指明外部的配置文件,提供表MyBatis核心配置文件读取其中的值。
<properties resource="org/mydemo/config/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="f2fa3!33tyyg"/>
</properties></span>
MyBatis核心配置文件中的enviroment的子标签dataSource中的值,将被以上动态替换。
<datasource type="pooled">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</datasource>
以上, username 和 password 将会由 properties 元素中设置的相应值来替换。driver 和 url 属性将会由 config.properties 文件中对应的值来替换。
例:
(1) MyBatis-config.xml核心配置文件中
<properties resource="jdbc.properties"></properties>
(2) jdbc.properties文件:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=12345
注:
dataSource:配置数据源,
type:"POOLED\UPOOLED\JNDI"、POOLED:表示使用数据库连接池缓存数据库连接(最经常使用)、UNPOOLED:表示不适用数据库连接池、JNDI:表示使用上下文数据源
三、类型别名配置
设置一个别名来代替一个类的全类名,设置完以后,就可以在Mapper.xml里的resultType/resultMap中直接写别名,大小写不敏感
typeAliases单个设置别名,ypeAlias设置一个类的类型别名
-
type:一个类型的全类名,必须设置
-
alias:这个类型的别名,可以不设置,默认自动为类名,并且大小写不敏感
<typeAliases> | |
<typeAlias type="全类名" alias="别名"></typeAlias> | |
</typeAliases> |
package包下所有类都自动设置别名
以包为单位,自动设置指定包下所有类的类型别名,默认为该类的类名并且大小写不敏感
<package name="com.atguigu.mybatis.pojo"></package> |
预设的类型别名,这些别名都大小写不敏感
四、Mapper映射配置
1、映射文件命名规则
-
表对应的实体类的类名+Mapper.xml
-
存放位置为src/main/resource/mappers
表t_user,映射实体类User,映射文件UserMapper.xml
2、面向接口编程
表——实体类——mapper接口——映射文件
-
映射文件的namespace和mapper全类名一致
-
映射文件中sql语句的id和mapper接口的方法名一致
3、引入映射文件配置
mapper单个引入
<mappers> | |
<mapper resource="mappers/UserMapper.xml"></mapper> | |
</mappers> |
<mapper namespace="com.atguigu.mybatis.mapper.UserMapper">
<insert id="insertUser" >
insert into t_user values(null,"asd","123","12","m","123@123.com")
</insert>
</mapper>
其中,UserMapper为针对实体类(pojo)的Mapper文件名,这个mapper文件针对该类定义了一个数据库操作。
4、调用
直接以sqlSession调用
可以在在java程序中,用sqlSession的相应数据库操作函数调用
sqlSession.insert("insertOneCar",map);
创建Mapper接口调用
MyBatis中的Mapper接口相当于以前的Dao,区别在于mapper仅仅是接口,不需要提供实现类(其实现,由Mybatis根据MyBatis配置文件中指定的mapper标签的属性、sql语句去组装)
public interface UserMapper {
public int insertUser();
}
其中,insertUser()映射为对数据集表的操作。
package引入包下所有映射文件
-
mapper接口所在的包要和映射文件所在的包的名字一致
-
mapper接口和映射文件的名字一致
-
创建目录的时候需要以斜线进行分割,而不是点
<mappers> | |
<package name="com.atguigu.mybatis.mapper"></package> | |
</mappers> |
补充:优先级别
mybatis 将读取核心配置文件,按照下面的顺序来加载:
- 在 properties 元素体内指定的属性首先被读取。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。