本篇内容,紧接上一篇内容 Mybatis学习笔记一

输入映射和输出映射

传递简单类型和pojo类型上篇已介绍过,下面介绍一下包装类型。

传递pojo包装对象

开发中通过可以使用pojo传递查询条件。查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。包装对象即Pojo类中的一个属性是另外一个pojo。

演示:根据用户名模糊查询用户信息,查询条件放到QueryVo的user属性中。

1、编写QueryVo

package com.yyb.pojo;

import java.io.Serializable;

/**
 * Created by Administrator on 2017/8/16.
 */
public class QueryVo implements Serializable{
    public User getUser() {
        return user;
    }

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

    private User user;

}

2、userMapper配置

    <select id="findByQueryVo"  parameterType="QueryVo" resultType="User">
        SELECT * FROM user WHERE username  like "%"#{user.username}"%"
    </select>

3.、userMapper接口中添加

 List<User> findByQueryVo(QueryVo vo);

4、测试类

    @org.junit.Test
    public void func2() throws Exception {
        //加载核心配置文件
        String resource = "sqlMapConfig.xml";
        InputStream in = Resources.getResourceAsStream(resource);
        //创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        //创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //SqlSEssion帮我生成一个实现类  (给接口)
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        QueryVo vo=new QueryVo();
        User u=new User();
        u.setUsername("五");
        vo.setUser(u);
        List<User> us = userMapper.findByQueryVo(vo);
        for (User use:us) {
            System.out.println(use);
        }
    }

resultType(输出类型)

1、输出简单类型。示例:查询用户表数据条数

在userMapper.xml中添加如下代码:

   <select id="findUserCount"  resultType="Integer">
        SELECT COUNT(*) FROM user
    </select>

在userMapper接口中添加以下代码:

 int findUserCount();

测试方法

    @org.junit.Test
    public void func3() throws Exception {
        //加载核心配置文件
        String resource = "sqlMapConfig.xml";
        InputStream in = Resources.getResourceAsStream(resource);
        //创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        //创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //SqlSEssion帮我生成一个实现类  (给接口)
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        int count = userMapper.findUserCount();
        System.out.println(count);
    }

注意:输出简单类型必须查询出来的结果集有一条记录,最终将第一个字段的值转换为输出类型。

2、输出pojo对象,参考上篇

3、输出pojo列表,参考上篇

4、resultMap

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

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

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

示例:查询订单表order的所有数据

添加Order实体

package com.yyb.pojo;

import java.io.Serializable;
import java.util.Date;

public class Orders  implements Serializable{
    private static final long serialVersionUID = 1L;

    private Integer id;

    private Integer userId;

    private String number;

    private Date createtime;

    private String note;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number == null ? null : number.trim();
    }

    public Date getCreatetime() {
        return createtime;
    }

    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note == null ? null : note.trim();
    }

    
    
}
Orders .java

相关文章:

  • 2021-10-27
  • 2021-11-08
  • 2021-12-30
  • 2022-12-23
  • 2021-04-15
  • 2021-12-19
  • 2021-06-02
猜你喜欢
  • 2022-02-02
  • 2021-09-23
  • 2022-01-05
  • 2022-12-23
  • 2021-09-14
  • 2021-06-18
  • 2021-05-17
相关资源
相似解决方案