5、MyBatis输入输出映射

一、输入映射

      输入映射,是在映射文件中通过parameterType指定输入参数的类型,类型可以是简单类型、pojo、pojo的包装类型。

1.1、简单类型

使用#{}占位符或${}进行sql拼接。

1.1.1、根据id查找User
<select id="getUserById" parameterType="int" resultType="cn.xpu.hcp.bean.User">
        select * from user where id = #{id}
</select>

Mapper接口:

public interface UserMapper {
    public User getUserById(int id);
}

测试:

public void MapperTest(){
    SqlSession session = sqlSessionFactory.openSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = mapper.getUserById(1);
    System.out.println(user);
    session.close();
}

这里写图片描述

1.1.2、根据字符串模糊查找User列表
<!-- 模糊查询 -->
<select id="getLikeByName" parameterType="string" resultType="cn.xpu.hcp.bean.User">
         select * from user where username like "%"#{value}"%"
</select>

Mapper接口:

public interface UserMapper {
    public List<User> getLikeByName(String str);
}

测试:

public void MapperTest(){
    SqlSession session = sqlSessionFactory.openSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    List<User> list = mapper.getLikeByName("张");
    for (User user : list) {
        System.out.println(user);
    }
    session.close();
}

这里写图片描述


1.2、输入POJO

MyBatis使用OGNL表达式解析对象字段的值,#{}或者${}中的值为POJO属性名称。
更新User

<!-- 更新 -->
<update id="updateUser" parameterType="cn.xpu.hcp.bean.User">
        update user set username=#{username},birthday = #{birthday},sex = #{sex},address = #{address} WHERE id=#{id}
</update>

Mapper接口:

public interface UserMapper {
    public void updateUser(User user);
}

测试:

public void MapperTest(){
    SqlSession session = sqlSessionFactory.openSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = mapper.getUserById(1);
    user.setUsername("Jake");
    mapper.updateUser(user);//先查找,再更新
    session.commit();
    session.close();
}

这里写图片描述


1.3、输入POJO的包装类

根据UserWrapper类中的POJO(user)进行模糊查询。
包装类:

public class UserWrapper {
    private User user;

    public User getUser() {
        return user;
    }

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

xml文件:

<select id="queryByWrapper" parameterType="cn.xpu.hcp.bean.UserWrapper" resultType="cn.xpu.hcp.bean.User">
        select * from user where username like '%${user.username}%'
</select>

Mapper接口:

public interface UserMapper {
    public List<User> queryByWrapper(UserWrapper wrapper); 
}

测试:

public void MapperTest(){
    SqlSession session = sqlSessionFactory.openSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    UserWrapper wrapper = new UserWrapper();
    User user = new User();
    user.setUsername("张");
    wrapper.setUser(user);
    List<User> list = mapper.queryByWrapper(wrapper);
    for (User u : list) {
        System.out.println(u);
    }
    session.commit();
    session.close();
}

这里写图片描述


二、输出映射

      MyBatis中输出映射有resultType和resultMap两种。

2.1、输出POJO对象
2.2、输出POJO列表

以上两种前面已经使用了。

2.3、resultType和resultMap

resultType可以指定将查询结果映射为POJO对象,但是,这需要表的列名和POJO的属性名相同才可以映射成功。
这里写图片描述
现在,我修改POJO的属性名:
这里写图片描述

我们继续使用resultType作为输出映射:

<select id="getUserById" parameterType="int" resultType="cn.xpu.hcp.bean.User">
        select * from user where id = #{id}
</select>

这里写图片描述
由于表名和属性名的不一致输出无法映射上,导致了空值。

这时我们就应该使用resultMap了,他可以将字段和属性名作一个对应关系。

<resultMap type="cn.xpu.hcp.bean.User" id="userMap">
      <!-- 
        id标签:定义主键
        column:表中的列名
        property:POJO中的属性名
      -->
    <id column="id" property="userId"/>
    <!-- 普通属性 -->
    <result column="username" property="name"/>
</resultMap>
<select id="getUserById" parameterType="int" resultMap="userMap" >
        select * from user where id = #{id}
</select>

这里写图片描述
成功建立了输出映射。

我认为在建立表和POJO时应该保证一致,避免麻烦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值