Mybatis之输入映射与输出映射

输入类型(parameterType)

  1. 传递简单类型(参考Mybatis入门程序)
  2. 传递POJO对象(Mybatis使用Ognl表达式解析对象字段的值,#{}占位符与拼接符 ${}括号内的值为POJO属性名称)
  3. 传递POJO包装对象

    开发中通过POJO传递查询条件,查询条件是综合的查询条件,不仅包括用户查询条件还包括其他的查询条件(如用户购买商品信息或订单号等),这是可以使用包装对象传递输入参数。

  • QueryVo.java 包装User类
public class QueryVo {
    private User user;

    public User getUser() {
        return user;
    }

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

  • SQL语句
SELECT * FROM `user` WHERE username LIKE '%%' and sex = 
  • 映射文件 UserMapper.xml
 </insert>
 <!--使用包装类型查询用户
 使用ognl从对象中去属性值,如果是包装对象可以使用.操作符来取其内部的属性
-->
    <select id="findUserbyVo" parameterType="cn.zst.domain.QueryVo" resultType="cn.zst.domain.User">
        SELECT * from `user` WHERE username LIKE '%${user.username}%' and sex=#{user.sex}

    </select>
  • 接口
public interface UserMapper {
    public User findUserById(Integer id);
    //动态代理情况中,如果返回结果集为list,那么Mybatis会在生成实现类的时候,会自动调用selectList()方法
    public List<User> findUserByName(String userName);
    public void insertUser(User user);
    public void delUserById(Integer id);

    public List<User> findUserbyVo(QueryVo vo);
}
  • 测试方法
    @Test
    public void testFindUserByVo()throws Exception{
    
        SqlSession openSession = factory.openSession();
        //获得Mapper的代理对象
        UserMapper mapper = openSession.getMapper(UserMapper.class);
        //创建QueryVo对象
        QueryVo vo = new QueryVo();
        //创建user对象
        User user = new User();
        user.setUsername("王");
        user.setSex("1");
        vo.setUser(user);
        //根据queryvo查询用户
        List<User> userbyVo = mapper.findUserbyVo(vo);
        System.out.println(userbyVo);
    }

输出映射(resultType)

  • 输出POJO对象(参考Mybatis入门程序)

  • 输出POJO列表(参考Mybatis入门程序)

  • 输出简单(基本)类型

  • SQL语句

SELECT COUNT(*) FROM `user`
  • 映射文件
<!--返回结果集是基本类型,只有返回结果为一行一列时,返回值类型才能指定成基本类型-->
    <select id="findUserCount" resultType="java.lang.Integer">
        SELECT COUNT(*) FROM `user`
    </select>
  • 接口
public interface UserMapper {
    public User findUserById(Integer id);
    //动态代理情况中,如果返回结果集为list,那么Mybatis会在生成实现类的时候,会自动调用selectList()方法
    public List<User> findUserByName(String userName);
    public void insertUser(User user);
    public void delUserById(Integer id);

    public List<User> findUserbyVo(QueryVo vo);
    public Integer findUserCount();
}
  • 测试方法
    @Test
    public void testFindUserCount() throws Exception{
        SqlSession openSession = factory.openSession();
        UserMapper mapper = openSession.getMapper(UserMapper.class);
        Integer count = mapper.findUserCount();
        System.out.println(count);
    }
resultMap

resutlType 可以指定POJO将查询结果映射为POJO,但需要POJO的属性名和SQL查询的列名一致才能映射成功。
如果SQL查询字段名和POJO的属性名不一致,可以通过resultMap将字段名和属性名作为一个对应关系,resultMap实质上还需要将查询结果映射到POJO对象中。
resultMap可以实现将查询结果映射为复杂类型的POJO,比如在查询结果映射对象中包含POJO和list实现一对一查询和一对多查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值