zoukankan      html  css  js  c++  java
  • Mybatis(三):配置XML、ResultMap

    Mybatis(三):配置文件

    一、核心配置文件

    核心配置文件属性罗列

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

    environments元素

    <environments default="development">
      <environment id="development">
       
      </environment>
    </environments>
    
    • 配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,必须指定其中一个为默认运行环境(通过default指定)
    • 子元素节点(environment)是具体的一套环境,通过设置id进行区别,id保证唯一!

    mappers元素

    • 映射器:定义映射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元素

    • namespace(命名空间)作用

      • namespace和子元素的id联合保证唯一 , 区别不同的mapper
      • 绑定DAO接口,namespace的命名必须跟某个接口同名
      • 接口中的方法与映射文件中sql语句id应该一一对应
    • 设置sql片段

      <!--定义Sql片段 -->
      	<sql id="cust">
      		cust_id,cust_name,cust_source
      	</sql>
      
      	<!-- 引用sql片段 -->
      	<select id="selectCustomer"
      		resultType="com.ruanyuan.pojo.Customer">
      		select <include refid="cust"/> from customer
      	</select>
      

    二、Properties优化

    • 在资源目录下创建db.properties文件

      driver=com.mysql.jdbc.Driver
      url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
      username=root
      password=
      
    • 将db.properties文件导入核心配置xml中

    <configuration>
        <!--导入properties文件-->
        <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="mapper/UserMapper.xml"/>
        </mappers>
    </configuration>
    

    三、设置settings

    作用:可以根据需求,设置不同的功能(如:懒加载,缓存,自动映射等)

    <settings>
      <setting name="cacheEnabled" value="true"/>
      <setting name="lazyLoadingEnabled" value="true"/>
      <setting name="autoMappingBehavior" value="PARTIAL"/>
    </settings>
    

    四、类型别名(typeAliases)

    1.区别名的方法有三种

    //第一种方法:通过类名
    <typeAliases>
    	<typeAlias alias="Author" type="domain.blog.Author"/>
    </typeAliases>
    //第二种方法:通过包名
    <typeAliases>
      <package name="domain.blog"/> //应用:批量设置别名
    </typeAliases>
    //第三种方法:注解
    @Alias("author")
    public class Author {
        ...
    }
    

    五、typeHandler(类型处理器)元素

    • 类型处理器,将从传入的参数从JAVA转化为数据库(JDBC)类型
    • 可以自定义类型转换器,创建一个class,实现TypeHandler接口

    六、事物管理器

    • JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
    • MANAGED –让容器来管理事务的整个生命周期。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。

    七、数据源(dataSource)

    1. 三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”)

      UNPOOLED:只是每次被请求时打开和关闭连接

      POOLED:利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间,使得并发 Web 应用快速响应请求的流行处理方式

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

    2. 数据源也有很多第三方的实现,比如dbcp,c3p0,druid

    八、XML映射文件

    1.SQL映射文件

    1. cache – 对给定命名空间的缓存配置。
    2. cache-ref – 对其他命名空间缓存配置的引用。
    3. resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
    4. sql – 可被其他语句引用的可重用语句块。

    九、ResultMap

    解决的问题:属性名和字段名不一致

    mybatis会根据查询的列名(会将列名转化为小写,数据库不区分大小写) , 去对应的实体类中查找相应列名的set方法设值 , 所以返回的结果可能为null【自动映射】

    数据库字段:user{id,name,pwd}

    实体类:user{id,name,password}

    • 方案一:为列名指定别名 , 别名和java实体类的属性名一致 .
    <select id="selectUserById" resultType="User">    
        select id , name , pwd as password from user where id = #{id} 
    </select>
    
    • 方案二:使用结果集映射->ResultMap 【推荐】

    自动映射

    <resultMap id="UserMap" type="User">
        <!-- id为主键 -->
        <id column="id" property="id"/>
        <!-- column是数据库表的列名 , property是对应实体类的属性名 -->
        <result column="name" property="name"/>
        <result column="pwd" property="password"/>
    </resultMap>
    
    <select id="selectUserById" resultType="map">
        select id , name , pwd from user where id = #{id}
    </select>
    

    手动映射:

    <resultMap id="UserMap" type="User">
    <!-- id为主键 -->
    <id column="id" property="id"/>
    <!-- column是数据库表的列名 , property是对应实体类的属性名 -->
    <result column="name" property="name"/>
    <result column="pwd" property="password"/>
    </resultMap>
    
    <select id="selectUserById" resultMap="UserMap">
    select id , name , pwd from user where id = #{id}
    </select>
    

    十、mybatis插入数据时,自动获取主键的自增id

    在Mapper文件中设置useGeneratedKeys和keyProperty两个属性,其中“keyProperty”值为主键的属性

  • 相关阅读:
    Qt编写安防视频监控系统27-GPU显示
    Qt开源作品37-网络中转服务器
    【日拱一卒】链表——回文判断
    【日拱一卒】链表——判断链表是否有环
    【日拱一卒】链表——链表反转(递归解法)
    批处理文件bat设置环境变量path
    用来进行序列化和反序列化的工具类
    @JsonIgnoreProperties转换实体时忽略json中不存在的字段
    如何获取mac的ip地址
    objectMapper.convertValue
  • 原文地址:https://www.cnblogs.com/dreamzone/p/12330882.html
Copyright © 2011-2022 走看看