MyBatis的映射

一、通过包装参数查询数据

  我们之前查询数据的时候能够传入一个JavaBean的对象作为参数进行数据的处理,但是如果我们的数据非常复杂,传入一个类无法进行查询的时候,就需要将这些类进行包装,将这个包装类作为参数进行查询。下面进行案例的演示:
第一步:创建一个包装类,将User进行包装

package domain;

public class QueryVo {
    
    //将user对象包装到QureyVo中
    private User user;

    public User getUser() {
        return user;
    }

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

}

第二步:在接口中添加方法

    //通过包装参数查询数据
    List getUserList(QueryVo qurey);

第三步:在测试类中进行测试

@Test
    public void QueryVoUser() throws Exception {
        UserMapperInterface mapper = sqlSession.getMapper(UserMapperInterface.class);
        QueryVo qurey = new QueryVo();
        User user = new User();
        user.setAddress("上海");
        qurey.setUser(user);
        List userList = mapper.getUserList(qurey);
        for (User user2 : userList) {
            System.out.println(user2.toString());
        }
    }

第四步:在配置文件中添加sql语句

    

二、输出简单类型的查询结果

  sql语句中可以利用count、sum等函数计算相关的数据,那么在mybatis中如何实现呢?
第一步:在接口中添加方法

    //查询user表中记录的数量
    //也可以创建有参的方法,添加条件查询
    int getUserCount();

第二步:在测试类中进行测试

    @Test
    public void countSelect() throws Exception {
        UserMapperInterface mapper = sqlSession.getMapper(UserMapperInterface.class);
        int count = mapper.getUserCount();
        System.out.println("user表中有"+count+"条记录");
    }

在配置文件中添加sql语句

    

三、resultMap

  现在我们需要用到之前创建的订单orders表,下面是表的结构和数据:

orders数据库

根据数据库创建Orders类,注意区别

package domain;

import java.util.Date;

public class Orders {
    private Integer id;
    //注意:我们现在设置的变量名和数据库中的不同
    private Integer userId;
    private String number;
    private Date createtime;
    private String note;
    public Orders() {
        super();
        // TODO Auto-generated constructor stub
    }
    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;
    }
    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;
    }
    @Override
    public String toString() {
        return "Orders [id=" + id + ", userId=" + userId + ", number=" + number + ", createtime=" + createtime
                + ", note=" + note + "]";
    }
    
}

  我们之前一直使用resultType来接收我们的返回结果,那么一定要保证,我们的返回结果的封装对象的属性字段与数据库当中的字段名称保持一致;如果我们想要封装对象的属性字段和数据库中的字段名称不同,那么就需要用到resultMap接收返回结果。
  resultMap : mybatis的另外一种封装的返回值类型,我们可以自定义我们的数据库字段与我们返回对象字段之间的关系。
第一步:在接口中创建方法

    //resultMap封装的返回值类型
    List getUserResultMap();

第二步:在配置文件的mapper标签中添加映射

    
    
        
        
        
        
        
    

第三步:在配置文件中添加sql语句

    

第四步:在测试类中进行测试

@Test
    public void getUserMap() throws Exception {
        UserMapperInterface mapper = sqlSession.getMapper(UserMapperInterface.class);
        List ordersList = mapper.getUserResultMap();
        for (Orders orders : ordersList) {
            System.out.println(orders.toString());
        }
    }

你可能感兴趣的:(MyBatis的映射)