zoukankan      html  css  js  c++  java
  • mybatis的Mapper文件配置

    一、resultMap

      resultMap 元素是 MyBatis 中最重要最强大的元素. 该配置节点下如下子节点配置

    • id – 一个 ID 结果;标记结果作为 ID 可以帮助提高整体效能
    • constructor - 类在实例化时,用来注入结果到构造方法中id – 一个 ID 结果;标记结果作为 ID 可以帮助提高整体效能
      • idArg - ID 参数;标记结果作为 ID 可以帮助提高整体效能
      • arg - 注入到构造方法的一个普通结果
    • result – 注入到字段或 JavaBean 属性的普通结果
    • association – 一个复杂的类型关联;许多结果将包成这种类型
      • 嵌入结果映射 – 结果映射自身的关联,或者参考一个
    • collection – 复杂类型的集
      • 嵌入结果映射 – 结果映射自身的集,或者参考一个
    • discriminator – 使用结果值来决定使用哪个结果映射
      • case – 基于某些值的结果映射
        • 嵌入结果映射 – 这种情形结果也映射它本身,因此可以包含很多相 同的元素,或者它可以参照一个外部的结果映射。

      resultMap配置节点具有如下配置属性:

      id配置节点具有如下配置属性:

       剩余详细配置属性可参看文档:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#

     二、通过mapper配置实现一对多关联查询

      1.首先我们建两张表,一张user表,一张campany表。(主要看 username 和 campany_name字段)

      

      2.创建实体类表:

      user:(字段应该和数据库字段一一对应,因为要实现一对多的联合查询,所以我们在user实体类中多加了Campany实体类,表示一个人呆过的公司记录,每个字段都要有set和get方法)

      

      campany:

      

      3.创建dao接口类:(此处我们只做查询,所以只定义一个方法接口)

    1 public interface UserDao {
    2     public List<UserEntity> getUserInfo(int id);
    3 }

      4.创建dao接口对应的mapper.xml(namespace="dao.daoInterface.UserDao" 意为该mapper是UserDao的实现类,然后每个select,insert,update,delete标签节点的id都对应一个dao接口的方法,所以select的id应该和UserDao内要实现的方法一样)

     1 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     2     <mapper namespace="dao.daoInterface.UserDao">
     3     <resultMap id="UserMap" type="domain.UserEntity">
     4         <id property="id" column="uid" />
     5         <result property="username" column="username" />
     6         <result property="password" column="password"/>
     7         <result property="address" column="address"/>
     8         <result property="createTime" column="createTime"/>
     9         <result property="updateTime" column="updateTime"/>
    10         <collection property="campanyEntity" resultMap="dao.daoInterface.CampanyDao.CampanyMap" />
    11     </resultMap>
    12 
    13     <!-- 可以将sql语句独立出来,然后引用 -->
    14     <sql id="selectMap">
    15         u.username, u.address ,c.campany_name
    16     </sql>
    17 
    18     <!-- 根据id查询用户 -->
    19     <select id="getUserInfo" parameterType="int" resultMap="UserMap">
    20             SELECT <include refid="selectMap"/>
    21             FROM  user u left join campany c
    22             ON u.username = c.username
    23             WHERE id = #{id}
    24             ORDER BY id ASC
    25     </select>
    26 
    27 
    28 </mapper>

      CampanyMapper.xml (这里面直接定义了一个map,该map可以被其他mapper文件引用,如上配置:<collection property="campanyEntity" resultMap="dao.daoInterface.CampanyDao.CampanyMap" />就引用了这个mapper的resultMap,引用规则位,该mapper的实现的接口包名dao.daoInterface.CampanyDao + resultMap的id名称

    1 <mapper namespace="dao.daoInterface.CampanyDao">
    2     <resultMap id="CampanyMap" type="domain.CampanyEntity">
    3         <id property="pid" column="pid"/>
    4         <result property="username" column="username"/>
    5         <result property="campanyName" column="campany_name"/>
    6         <result property="money" column="money"/>
    7     </resultMap>
    8 
    9 </mapper>

      6.测试方法:

    1      List<UserEntity> uList = userService.getUserInfo(1);
    2         if(uList.size() > 0){
    3             for(int i=0;i<uList.size();i++){
    4                 System.out.println(uList.get(i).getUsername()+"	"+uList.get(i).getCampanyEntity().getCampanyName());
    5             }
    6         }

       7.运行结果

    这样,就实现了mapper配置实现一对多关联查询

     

  • 相关阅读:
    我不想安于当前的限度,以达到所谓的幸福,回顾下2020年的我
    CentOS 7 搭建 TinyProxy 代理 &&python 脚本访问
    使用国内源来安装pytorch速度很快
    opencv-python的格式转换 RGB与BGR互转
    自签SSL证书以及https的双向认证 实现nginx双向代理
    springboot使用 @EnableScheduling、@Scheduled开启定时任务
    微信下载对账单
    SpringBoot 中定时执行注解(@Scheduled、@EnableScheduling)
    使用idea合并 dev分支合并到test分支
    .Net Core + Entity Framework 调用Oracle 存储过程
  • 原文地址:https://www.cnblogs.com/caijh/p/7762679.html
Copyright © 2011-2022 走看看