Mybatis学习笔记3:生命周期与配置解析

其实进度已经到了Spring了,但是对学习过的东西还是感觉模模糊糊,总感觉什么都没有进脑子。还差的好多,面试要问,毕设要用,不懂的还有山那么高!继续总结


简单总结一下自己了解的生命周期
  首先呢,当我们在使用mybatis时会使用一个SqlSessionFactoryBuilder,用这个去创建SqlSessionFactory实例,当创建完成实例就不再需要它了,所以说它的作用域很小,最佳作用域是方法作用域(局部变量),最好用完就释放(毕竟会占用资源的好伐)
  上面创建了SqlSessionFactory实例,它一旦被创建,在整个运行期间就会一直存在,所以最佳作用域是应用作用域,默认单例模式。它可以创建好多个SqlSession实例,所以可以想象为一个连接池
  SqlSession可以想象成一个到连接池的请求,每个线程都有其自己的SqlSession实例,它不是线程安全的,不能共享,用完就要抓紧时间关闭,否则资源被占用。它的最佳作用域是请求或方法作用域,不能将实例引用放在一个类的静态域。每次收到HTTP请求就可以打开一个SqlSession,返回响应即关闭。

配置解析
主要就是mybatis-config.xml这个核心配置文件中的配置,mybatis配置文件包含了会严重影响mybatis行为的设置和属性。主要有以下属性:

configuration配置
properties属性
setting设置
typeAliases类型别名
typeHandlers类型处理器
objectFactory对象工厂
plugins插件
environments环境配置
environment环境变量
transactionManager事务管理器
dataSource数据源
mappers映射器

以上不是全部的配置内容,需要看全部内容可以移步mybatis官方文档

properties
可以通过properties属性来实现引用配置文件。数据库链接的属性都是可外部配置且可动态替换的,既可以在典型的java属性文件(db.properties)中配置,也可以通过properties元素的子元素来传递

  • 通过引用配置文件来设置
  1. 编写一个配置文件db.properties
driver= com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
  1. 在核心配置文件映入
<properties resource="db.properties"/>
  • 通过properties元素子元素传递
<properties >
        <property name="username" value="root"></property>
        <property name="pwd" value="123456"></property>
    </properties>

setting

这里有很多可以配置的属性,我只记住几种,想要了解更多请移步官方文档

logImpl指定 MyBatis 所用日志的具体实现,未指定时将自动查找。
cacheEnabled全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。

就简单说一下logImpl这个属性,它可以设置日志的类型,具体实现看代码

<settings>
        <!--注意空格问题,双引号内不允许出现空格,大小写都不能错 一个字符都不能错-->
        <!--标准日志工厂实现-->
        <!--<setting name="logImpl" value="STDOUT_LOGGING"/>-->
        <setting name="logImpl" value="LOG4J"/>
    </settings>

注释掉的是另一种日志

typeAliass
为java类型设置一个短的名字,意义在于减少类完全限定名的冗余

方法一

<typeAliases>
        <typeAlias type="com.yu.pojo.User" alias="User"/>
</typeAliases>

方法二
指定一个包名,Mybatis会在包名下搜索需要的javabean,就是扫描实体类的包,他的默认别名就是这个类的类名首单词小写,比如以下代码别名就是user,但是可以使用注解定义别名(在实体类最前面增加注解)

<typeAliases>
        <typeAlias name="com.yu.pojo"/>
</typeAliases>

实体类比较少的时候建议使用第一种,如果实体类十分多,建议使用第二种

区别:第一种可以自定义别名,第二种不行,如果一定要改,则需要在实体类增加注解

environments
环境配置,内部可以配置多套环境,default是默认环境,尽管可以配置多个环境,但是每个SqlSessionFactory实例只能选择一种环境。当存在多套环境时,可以更改默认环境(通过default指定)来使用某一套环境
每套环境里有transactionManager(事务管理器),dataSource(数据源,必须要有)等。

<!--environments:环境,内部可以配置多套环境,default是默认环境 -->
    <environments default="development">
        <environment id="development">
            <!--事务管理:默认使用jdbc的事务管理-->
            <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>
        <environment id=" ">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
   </environments>

mappers
映射器,定义映射sql语句文件,需要告诉 MyBatis 到哪里去找到这些语句。Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。映射器是MyBatis中最核心的组件之一,在MyBatis 3之前,只支持xml映射器,即:所有的SQL语句都必须在xml文件中配置。而从MyBatis 3开始,还支持接口映射器,这种映射器方式允许以Java代码的方式注解定义SQL语句
下面举例两种方法

  1. 使用相对于类路径的资源引用
<mappers>
    <mapper resource="com/yu/dao/EmpMapper.xml"/>
</mappers>
  1. 使用class文件绑定注册
    使用这种方法时需要注意接口和他的Mapper配置文件必须同名,接口和他的Mapper配置文件必须在同一个包下
<mappers>
    <mapper class="com.yu.dao.EmpMapper"/>
</mappers>

下面介绍以下mapper.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">
<mapper namespace="com.yu.mapper.UserMapper">
   
</mapper>

这是mapper配置文件的内容(没有添加sql语句等)
namespace命名规则 : 包名+类名,namespace的命名必须跟某个接口同名,这样绑定dao接口,接口中的方法与映射文件中sql语句id要一一对应,namespace和子元素的id联合保证唯一 , 区别不同的mapper


  写在最后的话,由于自己也是初学者,有很多地方也不是很明白,如果阅读发现有些话有歧义或者表述不清,还请指正并寻找官方文档或名师指导,本博文仅作自己学习记录与分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值