3. MyBatis配置解析

环境配置(environments)

  • MyBatis可以配置成适应多种环境,但是每个SQLSessionFactory只能选择一种环境
  • MyBatis默认的事务管理器是JDBC,默认连接是POOLED(连接池)
        <!--可以通过重写id,新建多个environment,将environments的default字段设置成environment的id,即可生效。-->
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>

属性(properties)

我们可以通过properties属性来实现引用配置文件

这些属性可以在外部进行配置,并可以进行动态替换。既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456

mybatis-config.xml

    <!--引入外部配置文件-->
    <properties resource="db.properties">
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </properties>

    <environments default="development">
        <!--可以通过重写id,新建多个environment,将environments的default字段设置成environment的id,即可生效。-->
        <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>	
  • 可直接引入外部配置文件
  • 也可以在引用的位置再增加一些配置
  • 如果有一个字段在内部跟外部都进行了配置,则优先使用外部的

类型别名(typeAliases)

类型别名可为 Java 类型设置一个缩写名字,它仅用于 XML 配置, 用于减少类完全限定名的冗余。

方式一:

mybatis-config.xml

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

UserMapper.xml

    <!--可以给实体类起别名-->
    <select id="getUserList" resultType="User">
        select * from mybatis.user;
    </select>

方式二:

可以直接指定一个包名,MyBatis会在包名下面搜索需要的JavaBean

比如:扫描实体类的包,它的默认别名是首字母小写的实体类类名,大写也可以

mybatis-config.xml

    <typeAliases>
        <package name="com.indi.pojo"/>
    </typeAliases>

UserMapper.xml

    <!--可以通过包名给类起别名-->
    <select id="getUserList" resultType="user">
        select * from mybatis.user;
    </select>

如果要单独设置别名,则需要在实体类上单独添加注解

User.java

@Alias("hello")
public class User {

}
  • 实体类较少的时候,建议使用方式一
  • 多的时候,建议使用方式二

设置(settings)

设置名描述有效值默认值
logImpl指定 MyBatis 所用日志的具体实现,未指定时将自动查找。SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING |STDOUT_LOGGING | NO_LOGGING未设置 (null)
cacheEnabled全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。true | falsetrue
lazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。true | falsefalse
mapUnderscoreToCamelCase是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。true | falseFalse

驼峰命名示例
createTime ------ create_time

    <insert id="addBlog" parameterType="blog">
        insert into mybatis.blog (id, title, author, create_time, views)
        values (#{id}, #{title}, #{author}, #{createTime}, #{views});
    </insert>

映射器(mappers)

MapperRegistry:注册绑定我们的Mapper文件

方式一

    <!--每一个Mapper.XML都需要在MyBatis核心文件中注册-->
    <mappers>
        <mapper resource="com/indi/dao/UserMapper.xml"/>
    </mappers>

方式二
使用class文件绑定注册

    <mappers>
        <mapper class="com.indi.dao.UserMapper"/>
    </mappers>

方式三
使用扫描包进行注入绑定

    <mappers>
        <package class="com.indi.dao"/>
    </mappers>

方式二与方式三的注意点

  • 接口和Mapper配置必须同名!
  • 接口和Mapper必须在同一包下!

生命周期 和作用域(Scope)

在这里插入图片描述
错误使用作用域和生命周期,会导致严重的并发问题

SqlSessionFactoryBuider

  • 一旦创建了SqlSessionFactory,就不再需要它了
  • 通常声明为局部变量

SqlSessionFactory

  • SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例,可以把它理解成数据库连接池
  • 最简单的就是使用单例模式 或者静态单例模式,来保证全局只有一个生效。

SqlSession
在这里插入图片描述

  • 连接到连接池的一个请求
  • 它的实例不是线程安全的,所以最佳的作用域是请求或方法作用域
  • 用完之后需要赶紧关闭,否则资源被占用
  • 这里的每一个Mapper代表一个具体的业务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值