一、核心配置文件
二、环境配置<environment></environment>
1.Mybatis 可以配置成适应多种环境,但是每个 SqlSessionFactory 实例只能选择一种环境
2.学会配置多套环境
3.Mybatis默认的事务管理器是JDBC,连接池POOLED
三、属性优化
1.在resource下新建db.properties
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username = root
password = root
2.在mybatis-config中进行两处更改:引入db.properties资源和把driver,url,username,password还原。
<!-- 引入db.properties,必须放在最前面-->
<properties resource="db.properties"/>
<!-- 每个 SqlSessionFactory 实例只能选择一种环境 -->
<environments default="development">
<environment id="development">
<!-- 在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]") -->
<transactionManager type="JDBC"/>
<!-- 有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]") -->
<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>
3.还可以在<properties></properties>中写入<property></property>
<!-- 引入db.properties,必须放在最前面-->
<properties resource="db.properties">
<property name="username" value="root"/>
<!--注意此处的密码是错的,说明优先使用外部配置文件的(即db.properties) -->
<property name="password" value="111111"/>
</properties>
<!-- 每个 SqlSessionFactory 实例只能选择一种环境 -->
<environments default="development">
<environment id="development">
<!-- 在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]") -->
<transactionManager type="JDBC"/>
<!-- 有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]") -->
<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>
四、别名优化
十分常见,在本例中将com.mybatislearn.pojo.user换成了User,使用起来很方便。
1.在mybatis-config里面使用别名优化
<!-- 引入db.properties,必须放在最前面-->
<properties resource="db.properties">
<property name="username" value="root"/>
<!--注意此处的密码是错的,说明优先使用外部配置文件的(即db.properties) -->
<property name="password" value="111111"/>
</properties>
<!--别名优化 -->
<typeAliases>
<typeAlias type="com.mybatislearn.pojo.user" alias="User"/>
</typeAliases>
2.在userMapper.xml中使用别名
<!-- id为接口中的方法名称,resultType为返回值类型,resultType使用了别名-->
<select id="getUserList" resultType="User">
select * from user1
</select>
五、映射器
用来注册绑定我们的Mapper文件
方式一:使用相对于类路径的资源引用
<mappers>
<mapper resource="com\mybatislearn\mapper\userMapper.xml"/>
</mappers>
方式二:使用映射器接口实现类的完全限定类名
注意:接口和他的配置文件必须重名且在同一个包里
<mappers>
<mapper class="com.mybatislearn.mapper.userMapper"/>
</mappers>
方式三:使用扫描包进行注入绑定 注意:接口和他的配置文件必须重名且在同一个包里
<mappers>
<package name="com.mybatislearn.mapper"/>
</mappers>
六、生命周期和作用域,是非常重要的,一旦错误使用,会产生严重的并发问题
SqlSessionFactoryBuilder
- 一旦创建,就不需要它了
- 作用域:局部变量
SqlSessionFactory
- 可以想象为数据库连接池
- SqlSessionFactory一旦创建就要在应用的运行时间一直存在,没有任何理由丢弃它或创建另一个实例
- 最佳作用域是应用作用域
- 最简单的是使用单例模式或静态单例模式
SqlSession
-
连接到连接池的一个请求
-
SqlSession的实例不是线程安全的,因此是不能被共享的,因此它的最佳作用域是请求或方法作用域
-
用完之后需要赶紧关闭,否则资源被占用
这里的每一个Mapper都代表一个业务。