Mapper.xml文件中的parameterType、resultType和resultMap

一、parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。

1、传递简单类型,使用 #{} 占位符或 ${} 进行sql拼接。

    <!-- 根据用户id查询用户
        1.id必须和Mapper接口方法名一致
        2.parameterType必须和接口方法参数一致
        3.resultType必须和接口方法返回值类型一致
     -->
     <select id="queryUserById" parameterType="int" resultType="com.sfwu15.pojo.User">
         SELECT * FROM `user` WHERE id=#{id}
     </select>

<!-- 根据用户名称模糊查询用户 --> <select id="queryUserByUserName" parameterType="string" resultType="com.sfwu15.pojo.User"> SELECT * FROM `user` WHERE username='%${value}%' </select>

 

2、传递pojo对象,Mybatis使用ognl表达式解析对象字段的值,#{} 或 ${} 括号中的值为pojo属性名称。

    <!-- 根保存用户 -->
     <select id="saveUser" parameterType="com.sfwu15.pojo.User">
         INSERT INTO user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address});
     </select>

 

3、传递pojo包装对象。包装对象:Pojo类中的一个属性是另外一个pojo。

public class QueryVo {
    
    // 包含其他的pojo
    private User user;
    
    private List<Integer> ids;
    
    public List<Integer> getIds() {
        return ids;
    }

    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

Mapper.xml文件。

 

     <!-- 根据用户名称模糊查询用户 -->
     <select id="queryUserByUserName" parameterType="QueryVo" resultType="com.sfwu15.pojo.User">
         SELECT * FROM `user` WHERE username='%${user.name}%'
     </select>

 

二、resultType输出结果类型。

mybatissql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中。

resultType可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。

 

 

1、输出简单类型。

    <!-- 查询数据的条数 -->
    <select id="queryUserCount" resultType="int">
        SELECT count(*) FROM
            `user`
    </select>

 

2、输出pojo对象。

    <!-- 根据用户id查询用户
        1.id必须和Mapper接口方法名一致
        2.parameterType必须和接口方法参数一致
        3.resultType必须和接口方法返回值类型一致
     -->
     <select id="queryUserById" parameterType="int" resultType="com.sfwu15.pojo.User">
         SELECT * FROM `user` WHERE id=#{id}
     </select>

 

3、输出pojo列表。

     <!-- 根据用户名称模糊查询用户 -->
     <select id="queryUserByUserName" parameterType="string" resultType="com.sfwu15.pojo.User">
         SELECT * FROM `user` WHERE username='%${value}%'
     </select>

 

三、resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojolist实现一对一查询和一对多查询。

如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系resultMap实质上还需要将查询结果映射到pojo对象中。

mapper.xml 映射文件中的列名user_id和属性名userId不一致,需要定义它们的映射关系。

    <!-- resultMap最终还是要将结果映射到pojo上,type就是指定映射到哪一个pojo -->
    <!-- id:设置ResultMap的id -->
    <resultMap type="order" id="orderResultMap">
        <!-- 定义主键 ,非常重要。如果是多个字段,则定义多个id -->
        <!-- property:主键在pojo中的属性名 -->
        <!-- column:主键在数据库中的列名 -->
        <id property="id" column="id" />

        <!-- 定义普通属性 -->
        <result property="userId" column="user_id" />
        <result property="number" column="number" />
        <result property="createtime" column="createtime" />
        <result property="note" column="note" />
    </resultMap>

    <!-- 查询所有的订单数据 -->
    <select id="queryOrderAll" resultMap="orderResultMap">
        SELECT id, user_id,
        number,
        createtime, note FROM `order`
    </select>

 

posted @ 2022-11-01 00:16  炒股沦为首负  阅读(2752)  评论(0编辑  收藏  举报