首页 > 其他分享 >【学习笔记】Mybatis配置优化

【学习笔记】Mybatis配置优化

时间:2022-10-27 21:57:16浏览次数:55  
标签:jdbcstudy 配置文件 标签 配置 笔记 别名 数据源 Mybatis 优化

Mybatis配置优化

1.核心配置文件结构

核心配置文件:mybatis-config.xml 官方建议起这个名字,但我们可以随意起名

  • configuration(配置)

    • properties(属性)

    • settings(设置)

    • typeAliases(类型别名)

    • typeHandlers(类型处理器)

    • objectFactory(对象工厂)

    • [plugins(插件)

    • environments(环境配置)

      • environment(环境变量)

        • transactionManager(事务管理器)

        • dataSource(数据源)

    • databaseIdProvider(数据库厂商标识)

    • mappers(映射器)

注意:配置文件时,标签的顺序不能改变,只能按照这个顺序进行配置

2.属性优化 (properties)

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

这句话的意思是:我们可以将一些参数(driver、url、username、password)放在properties配置文件中或者放在properties 的子标签中,从而不用在environment 中写死

  1. 配置文件

    driver=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username=root
    password=123456
    <properties resource="db.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>
  2. 子标签

    <properties resource="db.properties">
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </properties>

问题:如果两种方式的参数重复了,怎么办,就像上面的例子,properties文件和子标签中都有username和password

这种情况存在优先级问题,配置文件优先级 > 子标签

 

3.environments 环境配置

官方:MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

  • 在environments 标签中 可以有多个 environment 标签

    <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>
         <environment id="test">
            <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>

    通过 default属性来切换环境,default的值就是environment 的 id属性

 

  • environment 标签的 transactionManager 事务管理器

    事务管理器有两种类型:JDBC 和 MANAGED

    • JDBC 这个配置直接使用了 JDBC 的提交和回滚功能,它依赖从数据源获得的连接来管理事务作用域。

    • MANAGED 几乎没做什么,知道即可

  • environment 标签的 数据源(dataSource)

    数据源有三种类型:

    • UNPOOLED 这个数据源的实现会每次请求时打开和关闭连接。没有连接池

    • POOLED 加入连接池,实现不用每次打开关闭连接

    • JNDI 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用

 

4.类型别名 (typeAliases)

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。

之前我们在sql的xml文件中,resultType 要把完整的包名+类名写出来,十分冗余

<select id="getUsers" resultType="com.wang.pojo.User">
    select * from jdbcstudy.users;
</select>
<insert id="insertUser" parameterType="com.wang.pojo.User">
    insert into jdbcstudy.users(id,`NAME`,`PASSWORD`,email,birthday) values(#{id},#{name},#{password},#{email},#{date})
</insert>

我们可以使用typeAliases 标签来给这个类起别名,降低复杂度

有两种方式:

  • 直接命名

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

    在sql的xml中,可以直接使用User

    <select id="getUsers" resultType="User">
        select * from jdbcstudy.users;
    </select>
    ​
    <insert id="insertUser" parameterType="User">
        insert into jdbcstudy.users(id,`NAME`,`PASSWORD`,email,birthday) values(#{id},#{name},#{password},#{email},#{date})
    </insert>
  • 指定包名,在没有注解的情况下,会使用类的首字母小写作为它的别名。

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

    在pojo 包下的所有实体类,都可以使用其首字母小写的类名作为别名

    <select id="getUsers" resultType="user">
        select * from jdbcstudy.users;
    </select>

    当然,也可以为实体类添加注解,自定义别名

    @Alias("hello")
    public class User {...}
    <select id="getUsers" resultType="hello">
        select * from jdbcstudy.users;
    </select>

 

在java的基本类型的别名中,八大基本类型的别名是 _ int 、_flout....

如果直接写int的话,代表的是包装类

 

5.设置 (settings)

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

比较重要的是

设置名 描述 有效值 默认值
cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 true | false true
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 true | false false
mapUnderscoreToCamelCase 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 true | false False

 

6.映射器(mappers)

用来绑定 Mapper配置文件

方式一:使用相对于类路径的资源引用

<mappers>
    <mapper resource="com/wang/Dao/UserDao.xml"/>
</mappers>

方式二:使用映射器接口实现类的类名

<mappers>
    <mapper class="com.wang.Dao.UserDao"/>
</mappers>

注意点:

  • 接口和它的mapper配置文件必须同名

  • 接口和它的mapper配置文件必须在一个包下

方式三:通过扫描包,绑定mapper配置文件

<mappers>
    <package name="com.wang.Dao"/>
</mappers>

注意点:

  • 接口和它的mapper配置文件必须同名

  • 接口和它的mapper配置文件必须在一个包下

标签:jdbcstudy,配置文件,标签,配置,笔记,别名,数据源,Mybatis,优化
From: https://www.cnblogs.com/wztblogs/p/16834113.html

相关文章

  • MybatisPlus实现逻辑删除
    逻辑删除:在表中设计一个标志位,约定0表示删除,1表示存在实现办法1.在表中添加标志位2.在该表对应的实体类中的属性上面,加上注解@TbaleLogic该注解默认0......
  • Basil: A Fast and Byzantine-Resilient Approach for Decentralized Training 阅读笔
    Basil:AFastandByzantine-ResilientApproachforDecentralizedTraining阅读笔记ProblemStatementDecentralizedSystemModel所有训练数据样本存储在分布式节......
  • STM32MP157 LINUX学习笔记01
    开发板IP:192.168.5.9配置命令ifconfigeth0192.168.5.9windowsIP:192.168.5.10ubuntuIP: 192.168.5.11首先确保三者互ping通过 通过这个博客学习如何配置ubuntu......
  • vue-element-admin框架学习笔记
    0背景vue-element-admin是一个已高度完成的系统原型,它基于vue框架和elementUI组件库。它使用最新的前端技术栈,内置i18n国际化解决方案、动态路由、权限验证。它可以帮助......
  • 完全背包问题 —— 贪心优化 DP 范围
    题意:现在有\(2n+1\)个物品(\(n\le300\)),体积分别为\(-n,-n+1,\dots,-1,0,1,\dots,n\),第\(i\)个物品有\(a_i\)个,求选出恰好\(S\)的总体积最多能选几个物品。第一......
  • Vue学习笔记之使用computed计算属性
    0x00概述本文主要记录Vue页面使用computed计算属性0x01computed基本使用在computed中定义一个函数(看起来是一个函数,其实是一个属性),命名按照属性规范命名(一般为名词)......
  • 移动端H5前端性能优化指南
    加载优化1、合并CSS、JavaScript2、合并小图片3、缓存一切可以缓存的资源4、使用长Cache,在服务器端设置缓存。5、使用外联式引用CSS、JavaScript6、压缩HTML、CSS、JavaScri......
  • Vue学习笔记之scope.row的最简单理解
    0x00概述本文转载,仅做记录用,原文 0x01表格内开关选项如果表单中只是对返回数据的字面量的显示,prop和slot-scope没有大的差异,开发过程中基本可以通用;但是如果有一个......
  • 前端性能优化(图片优化)
    从输入URL到页面加载完成的过程:首先通过DNS(域名解析)把URL解析为对应的IP地址,然后与该IP地址确定的服务器建立起TCP网络连接。随后向服务器发送HTTP请求,服务器处理完HTTP请求......
  • 硬件笔记之win系统从sata迁移到M2硬盘蓝屏inaccessible boot device
    0x00概述本文主要记录win系统从sata迁移到M2硬盘,出现蓝屏inaccessiblebootdevice导致无限重启的两种解决方案。 0x01解决方案1--注册表修改参数需要进入PE,修改本......