• MyBatis 配置详解


    mybatis-config.xml 核心配置文件

    mybatis-config.xml 包含的内容如下

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

    注意元素节点的顺序!顺序不对会报错

    1. environments元素

    <environments default="development">
     <environment id="development">
       <transactionManager type="JDBC">
         <property name="..." value="..."/>
       transactionManager>
       <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">
         <property name="..." value="..."/>
       transactionManager>
       <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>
    
    • environments配置mybatis 多套环境,将sql 映射到多个不同的数据库上,必须指定一个默认环境,即default="development"

    1.1 子元素environment

    其中dataSource 数据源(共三种内建的数据源类型)

            type="[UNPOOLED|POOLED|JNDI]"
    • unpooled:这个数据源的实现只是每次被请求时打开和关闭连接
    • pooled:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来 , 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
    • jndi:这个数据源的实现是为了能在如 Spring 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
      注: 数据源也有很多第三方的实现,比如dbcp,c3p0,druid等等....

    1.2 transactionManager 事务管理器(共两种)

            "[ JDBC | MANAGED ]"/>
    

    2. mappers 元素(定义映射SQL语句文件)

    主要用于找到sql语句的文件在哪里?可以使用不同的方式引用sql语句 具体的引用方式如下

    • 使用相对路径引入sql语句的文件
    
    <mappers>
     <mapper resource="org/mybatis/builder/PostMapper.xml"/>
    mappers>
    
    • 使用完全限定资源定位符(URL)
    
    <mappers>
     <mapper url="file:///var/mappers/AuthorMapper.xml"/>
    mappers>
    
    • 使用映射器接口实现类的完全限定类名,需要配置文件名称和接口名称一致,并且位于同一目录下
    
    <mappers>
     <mapper class="org.mybatis.builder.AuthorMapper"/>
    mappers>
    
    • 将包内的映射器接口实现全部注册为映射器但是需要配置文件名称和接口名称一致,并且位于同一目录下
    
    <mappers>
     <package name="org.mybatis.builder"/>
    mappers>
    

    **mapper配置文件
    主要用用关联dao接口中的方法,并书写sql语句 相当于实现了接口中的各个方法

    
    mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.xiezhr.dao.UserMapper">
        <select id="getUserList" resultType="com.xiezhr.pojo.User">
         select * from mybatis.user;
        select>
    
        <insert id="addUser" parameterType="com.xiezhr.pojo.User">
            insert into mybatis.user values(#{id},#{name},#{pwd})
        insert>
    
        <update id="updateUserById" parameterType="int">
            update mybatis.user set name='小头爸爸' where id=#{id}
        update>
    
        <delete id="deleteUserById" parameterType="int">
            delete from mybatis.user where id=#{id}
        delete>
    mapper>
    

    3.properties

    • 我们都知道在java开发中,通过properties文件来配置一些参数。这我们就要通过db.properties文件来配置连接数据库的各个属性

    具体步骤如下

    (1)编写db.properties 文件

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

    (2)在mybatis核心配置文件中加在外部配置文件来连接数据库

    
    configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <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>
    
        <mappers>
            <mapper resource="com/xiezhr/Dao/UserMapper.xml">mapper>
        mappers>
    configuration>
    

    4. typeAliases(定义别名)

    • 类型别名是为java类型这只一个短的名字。意义在于用来减少过长类名的冗余

    (1)自定义javabean别名

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

    如上配置之后就可以在任何地方用user 代替 com.xiezhr.pojo.User配置别名也可按照下面方式配置

    (2)配置所有com.xiezhr.pojo 包下的Javabean别名为小写的类名

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

    通过上述配置之后,以下的xml即等价

    <select id="getUserList" resultType="user">
         select * from mybatis.user;
    select>
    
    <select id="getUserList" resultType="com.xiezhr.pojo.user">
         select * from mybatis.user;
    select>
    

    其他配置【设置】

    设置常用的有如下几个

    • 懒加载
    • 日志实现
    • 缓存的开启与关闭
      下面是一个完整的setting元素示例
    <settings>
     <setting name="cacheEnabled" value="true"/>
     <setting name="lazyLoadingEnabled" value="true"/>
     <setting name="multipleResultSetsEnabled" value="true"/>
     <setting name="useColumnLabel" value="true"/>
     <setting name="useGeneratedKeys" value="false"/>
     <setting name="autoMappingBehavior" value="PARTIAL"/>
     <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
     <setting name="defaultExecutorType" value="SIMPLE"/>
     <setting name="defaultStatementTimeout" value="25"/>
     <setting name="defaultFetchSize" value="100"/>
     <setting name="safeRowBoundsEnabled" value="false"/>
     <setting name="mapUnderscoreToCamelCase" value="false"/>
     <setting name="localCacheScope" value="SESSION"/>
     <setting name="jdbcTypeForNull" value="OTHER"/>
     <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
    settings>
    
  • 相关阅读:
    【无标题】
    redis 哨兵
    基于sklearn实现LDA主题模型(附实战案例)
    什么是自动化测试?
    mybaits-plus lambdaQuery() 和 lambdaUpdate() 比较常见的使用方法
    小样本图像语义分割综述
    时序预测 | MATLAB实现CNN-GRU卷积门控循环单元时间序列预测(风电功率预测)
    【附源码】计算机毕业设计SSM特种设备全生命周期管理系统
    ARM系列之ARM多核指令WFE、WFI、SEV原理
    成集云 | 英克对接零售O2O+线上商城 | 解决方案
  • 原文地址:https://www.cnblogs.com/xiezhr/p/17343395.html