1.配置解析
1.核心配置文件
- mybatis-config.xml
- MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
- configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
2.environments-环境配置
- MyBatis 可以配置成适应多种环境,不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
- 注意一些关键点:
- 默认使用的环境 ID(比如:default=“development”)。
- 每个 environment 元素定义的环境 ID(比如:id=“development”)。
- 事务管理器的配置(比如:type=“JDBC”)。
- 数据源的配置(比如:type=“POOLED”)
- 可以设置多套运行环境,但只能同时使用一套。Mybatis默认的事务管理是JDBC(当然不止一种事务管理),连接池:POOLED。 在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):
3.属性
-
我们可以通过properties属性来实现引用配置文件【db.properties】
-
引入外部配置文件
-
可以在其中增加一些属性配置
-
如果两个文件有同一个字段,优先使用外部配置文件
开始改造
-
创建db.properties配置文件,.将(db.properties)配置文件引入(mybatis-config.xml)核心配置文件中
-
在resources文件夹中创建新文件:db.properties
-
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8 username=root password=root
-
将标签写在(mybatis-config.xml)核心配置文件的第一位。并修改核心配置文件中的driver,url…的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="db.properties"> <property name="password" value="root"/> </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> <mappers> <mapper resource="edu/xalead/dao/UserMapper.xml"/> </mappers> </configuration>
2.typeAliases(类型别名)
-
在" mybatis-config.xml "中编写别名,在 “引入外部(db.properties)配置文件” 的下方编写别名。
-
mybatis-config.xml代码:
-
<!-- 起别名方法一:使用于实体类少的情况。目的,编写接口xml的sql语句时,type写的简单--> <typeAliases> <typeAlias type="edu.xalead.pojo.User" alias="User"/> </typeAliases> <!-- 起别名方法二:使用于实体类多的情况 意思: edu.xalead.pojo.User的别名默认就是pojo包中User的小写类名。--> <typeAliases> <package name="edu.xalead.pojo.User"/> </typeAliases>
//方法3 @Alias("user") public class User(){}
接口实现xml代码:
-
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace 绑定一对应的Dao/Mapper接口 --> <!--namespace中的名要和UserMapper.xml的接口一致--> <mapper namespace="edu.xalead.Dao.UserMapper"> <!--select查询 id就是UserDao接口里面的方法的名字 resultType/Map是返回一个/多个结果集 路径就写表的映射的路径--> <select id="getUserList" resultType="User"> select * from mybatis.m_user; </select> </mapper>
3.设置(settings)
- 目前需要记住的(都在mybatis文档中)主要记住以下几个
-
<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="defaultFetchSize" value="100"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> </settings>
4.其他配置
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- Mybatis Plus 快速开发
5.映射器(mappers)
<mappers>
<!-- 方法一:使用相对于类路径的资源引用 -->
<!--<mapper resource="edu/xalead/dao/UserMapper.xml"/>-->
<!-- 方法二:使用映射器接口实现类的完全限定类名 -->
<!--<mapper class="edu.xalead.dao.UserMapper"/>-->
<!-- 方法三:将包内的映射器接口实现全部注册为映射器 -->
<package name="edu.xalead.dao"/></mappers>
- 注意点:方法二和三,设置时,接口和接口.xml的名字要一致而且要在同一个包中。
这些配置会告诉 MyBatis 去哪里找映射文件
6.生命周期和作用域
生命周期和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题。
SqlSessionFactoryBuilder:
- 一旦创建了SqlSessionFactory,就不再需要它了
- 局部变量
SqlSessionFactory:
- 说白了就像:数据库连接池
- 一旦创建在运行期间一直存在
- 最佳作用域是应用作用域
- 最简单的是使用单例模式或者静态单例模式
SqlSession:
- 连接到连接池的一个请求
- 它的实例不是线程安全的,因此是不能被共享的,所以它的最佳作用域是请求或方法作用域
- 用完之后需要赶紧关闭,否则资源被占用
每一个mapper就代表具体业务。
欢迎访问我的个人博客:http://www.ayjup.cn