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配置文件必须在一个包下

原文地址:http://www.cnblogs.com/wztblogs/p/16834113.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性