Mybatis中resultType和resultMap的用途简介说明

重生 MyBatis 发布时间:2024-02-17 16:57:01 阅读数:3758 1
下文笔者讲述ResultType和resultMap的用途说明及mybatis一对多查询的返回值写法说明
使用MyBatis查询数据库时 
   有两种返回类型分别为:resultType和resultMap
=================================================
我们可以理解为每一种返回值都是resultMap
当我们指定了resultType返回类型时,则直接将结果赋值给相应的返回值
   resultType和resultMap两者不能同时使用
例:返回一个值
@Mapper
public interface UserDao {
    // 获取用户
    public String getUser(Long id);
}

xml 

<select id="getUserName" paramTyp="java.lang.Long" resultType="java.lang.String" >
    select user_name from t_users
</select>

返回一个对象

实体类对象

@Data
public class User {
    private Long id;
    private String userName;
    private Integer sex;
}
 
@Mapper
public interface UserDao {
    // 获取用户
    public User getUser(Long id);
}

xml
 resultType:

<select id="getUsersType" parameterType="java.lang.Long" resultType="com.example.pojo.User">
    select user_name userName, sex from t_users where id=#{id}
</select>

resultMap:

<resultMap id="userMap" type="com.zkzong.mybatis.domain.Users">
    <id     column="id"        property="id"/>
    <result column="user_name" property="userName"/>
    <result column="sex"       property="sex" />
</resultMap>
 
<select id="getUsersMap" parameterType="java.lang.Long" resultMap="userMap">
    select id, user_name, sex from t_users where id=#{id}
</select>
column:字段对应的应当是数据库查询结果字段,而不是数据库中的字段
property与Javabean中属性值一致
     查询标签中的resultMap要与表映射的resultMap标签中的id一致。

id标签与result标签的区别

id标签:代表resultMap的主键,只能有一个
result标签:代表resultMap的属性,可以有多个
id是作为唯一标识的,
  当和其他对象实例对比的时候,
  尤其是应用到缓存和内嵌的结果映射

mybatis多对一

多对一
  在实际开发中经常使用
如:
  多个学生对应一个学校多个工人对应一个工厂
   可以通过在数据库中进行外键的关联物理上的实现
    也可以通过sql语句实现逻辑上的关联 
User.java

public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer sid;
    
    private School school;
}
实现方式一
UserMapping.xml

    <resultMap type="com.java265.modle.User" id="UserMap">
        <result column="t_id" property="id"/>
        <result column="t_username" property="username"/>
        <result column="t_password" property="password"/>
        <result column="t_sid" property="sid"/>
        <result column="s_name" property="school.name"/>
    </resultMap>
    <select id="getSchoolName" resultMap="UserMap" >
        select t_id,t_username,t_password,s_name FROM t_user,school where t_sid=s_id AND s_id=1;
    </select>
        可以看到在resultMap中不配置了User自身的属性还多了<result column="s_name" property="school.name"/>,
        即我们需要哪个附表的值就要在resultMap中配置相应的附表映射。

实现方式二
    <resultMap type="com.java265.modle.User" id="UserMap">
        <result column="t_id" property="id"/>
        <result column="t_username" property="username"/>
        <result column="t_password" property="password"/>
        <result column="t_sid" property="sid"/>
        <association property="school" javaType="com.java265.modle.School">
            <result column="s_name" property="name" />
        </association>
    </resultMap>
    <select id="getSchoolName" resultMap="UserMap" >
        select t_id,t_username,t_password,s_name FROM t_user,school where t_sid=s_id AND s_id=1;
    </select>
        引入了association标签
        不再在原有user映射关系上进行补充
        此标签中的property属性值为UserBean中附表对象的引用名
        javaType即为School类的的全路径
        sql语句不变

一对多

一对多与多对一的配置有许多相似点
   对多返回的类型是一个集合所以要在SchoolBean中加入学生的集合
School.java

public class School {
    private Integer id;
    private String  name;
    
    private list<User> user;
}

学校映射文件配置

    <resultMap type="com.java265.modle.School" id="SchoolMap">
        <result column="s_id" property="id"/>
        <result column="s_name" property="name"/>
        <collection property="user" ofType="com.java265.modle.User">
            <result column="t_id" property="id"/>
            <result column="t_username" property="username"/>
            <result column="t_password" property="password"/>
            <result column="t_sid" property="sid"/>         
        </collection>
 
    </resultMap>
    
    <select id="getSchool" resultMap="SchoolMap">
        select s_id,s_name,t_id,t_username,t_password
        FROM school,t_user WHERE s_id=t_sid AND s_id=1;
    </select>
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/MyBatis/202402/7962.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者