我这里写的叫做:SqlMapConfig.xml,但是标准文档中叫做:mybatis-config.xml
Mybatis的配置文件包含了会深深影响Mybatis的行为的设置和属性信息
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源) 连接池
databaseIdProvider(数据库厂商标识)
mappers(映射器)
绑定xml映射文件的核心配置文件如下:
<configuration>
<properties resource="db.properties"/>
<settings>
<setting name="logImpl" value="LOG4J"/>
settings>
<typeAliases>
<package name="cn.edu.cxtc.domain">package>
typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC">transactionManager>
<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="cn/edu/cxtc/dao/UserMapper.xml">mapper>
mappers>
configuration>
Mybatis可以配置成适应多种环境
不过要记住:尽管可以配置多个环境,但是每个SQLSessionFactory实例只能选择一种环境–> 就是一次只能选择一个。
学会用配置多套运行环境!!
Mybatis默认的事务管理器就是JDBC,连接池:POOLED
我们可以通过properties属性来实现引用配置文件。
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。
db.properties
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatisdb
username = root
password = root
在核心配置文件中引入db.properties:在写properties标签时要按照顺序写
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XBvi5sWw-1590794861058)(C:\Users\kmkd\AppData\Roaming\Typora\typora-user-images\image-20200525155236099.png)]
<properties resource="db.properties"/>
在environment中引入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>
注:就相当于我将要连接的信息写到了外部的properties配置文件中,不用在mybatis-config.xml主配置文件中写,直接引入配置文件就行了,和之前的相似。
类型别名可为 Java 类型设置一个缩写名字。
它仅用于 XML 配置,意在降低冗余的全限定类名书写
**简言之:**在dao的映射配置文件中,resultType是方法的返回值类型,但是cn.edu.cxtc.domain.User太冗余,给他起个名字。
方法一:直接给实体类起别名:
<typeAliases>
<typeAlias type="cn.edu.cxtc.domain.User" alias="User">typeAlias>
typeAliases>
方法二:也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean
cn.edu.cxtc.domain
中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写或者大写的非限定类名来作为它的别名 -->推荐使用小写,但是我使用大写 --> User或者user都可以<typeAliases>
<package name="cn.edu.cxtc.domain">package>
typeAliases>
在实体类比较少的时候,使用第一种
如果实体类十分多,建议使用第二种
第一种可以DIY别名(自定义取名字),第二种不行,必须是实体的名字首字母大写或者小写
方法三:可以在domain下的实体类中加一个注解:@Alias(“别名”)
建议三种方法不要混合使用
去官网查看Mybatis默认的一些类型别名
设置是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为 =>查看帮助文档
官网
缓存开启和关闭
懒加载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qzRh3ynm-1590794861062)(C:\Users\kmkd\AppData\Roaming\Typora\typora-user-images\image-20200525163105798.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ttQ1gfYz-1590794861072)(C:\Users\kmkd\AppData\Roaming\Typora\typora-user-images\image-20200525163143211.png)]
对象工厂(objectFactory)
类型处理器(typeHandlers)
插件(plugins)
我们需要告诉 MyBatis 到哪里去找到这些SQL语句。所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。
这些配置会告诉 MyBatis 去哪里找映射文件,剩下的细节就应该是每个 SQL 映射文件了
方式一:使用相对于类路径的资源引用 -->推荐
<mappers>
<mapper resource="cn/edu/cxtc/dao/UserMapper.xml">mapper>
mappers>
方式二:使用映射器接口实现类的完全限定类名
<mappers>
<mapper class="cn.edu.cxtc.dao.UserDao"/>
mappers>
方式三:将包内的映射器接口实现全部注册为映射器
只要指定了包,这个包下面的所有dao接口的配置文件都能够被指定
<mappers>
<package name="cn.edu.cxtc.dao"/>
mappers>
**注:**使用方法二和方法三时:
* 接口和他的Mapper配置文件必须同名
* Mapper配置文件的包结构目录必须和dao接口的包目录相同,并且分级
作用域、生命周期是至关重要的,错误的使用会导致非常严重的并发问题。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ciuSkT6J-1590794861082)(C:\Users\kmkd\AppData\Roaming\Typora\typora-user-images\image-20200525190930584.png)]
SqlSessionFactoryBuilder
* 一旦创建了SqlSessionFactory,就不在需要它了
* 所以SqlSessionFactoryBuilder是一个局部变量
SqlSessionFactory
SqlSession