本篇内容,紧接上一篇内容 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(); } }