Mybatis_7输入映射和输出映射
Posted 宋泊然
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis_7输入映射和输出映射相关的知识,希望对你有一定的参考价值。
1.输入映射:
1) :传递简单类型如int,string已在之前的程序写到
2):传递pojo对象,也已经在前面的程序中写到
3):传递pojo包装对象,没有写过。
开发中可以通过使用pojo传递查询条件。查询条件可能是综合的查询条件,不仅包括用户的查询条件,还包括其他的查询条件。
根据用户名称模糊查询用户,查询条件放到QueryVo的user属性中。
测试类:
1 @Test 2 void testQueryVo() throws Exception { 3 // 加载核心配置文件 4 String resource = "SqlMapConfig.xml"; 5 InputStream resourceAsStream = Resources.getResourceAsStream(resource); 6 // 创建sqlsessionFactory 7 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); 8 // 创建sqlsession 9 SqlSession openSession = sqlSessionFactory.openSession(); 10 //sqlsession生成一个实现类 11 UserMapper mapper = openSession.getMapper(UserMapper.class); 12 //利用接口调方法 13 QueryVo vo=new QueryVo(); 14 User user=new User(); 15 user.setUsername("五"); 16 vo.setUser(user); 17 List<User> u = mapper.findUserByQueryVo(vo); 18 for (User user2 : u) { 19 System.out.println(user2); 20 } 21 }
user.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatiis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!--写sql语句 --> 6 <mapper namespace="com.me.mybatis.mapper.UserMapper"> 7 <select id="findUserByQueryVo" parameterType="QueryVo" 8 resultType="com.me.mybatis.pojo.User"> 9 select * from user where username like "%"#{user.username}"%" <!--这种方式也可以使用,一旦使用#,{}里面可填写任意 --> 10 </select> 11 </mapper>
QueryVo.java
1 package com.me.mybatis.pojo; 2 3 import java.io.Serializable; 4 5 public class QueryVo implements Serializable { 6 7 /** 8 * 9 */ 10 private static final long serialVersionUID = 1L; 11 private User user; 12 public User getUser() { 13 return user; 14 } 15 public void setUser(User user) { 16 this.user = user; 17 } 18 19 20 21 }
运行结果:
2.映射输出
1)输出简单类型integer
User.xml:
1 <select id="countUsers" 2 resultType="Integer"> 3 select count(id) from user 4 </select> 5
UserMapper.java
1 package com.me.mybatis.mapper; 2 3 import java.util.List; 4 5 import com.me.mybatis.pojo.QueryVo; 6 import com.me.mybatis.pojo.User; 7 8 public interface UserMapper { 9 //遵循四个原则 10 //1.接口方法名==user.xml文件中的id名 11 //2.返回值类型与mapper.xml文件中的返回值类型要一致 12 //3.方法的入参类型与mapper.xml中入参的类型一致 13 //4.mapper.xml文件的namespace与接口绑定在一起 14 public User findUserById(Integer id); 15 public List<User> findUserByQueryVo(QueryVo vo); 16 public Integer countUsers(); 17 }
测试代码:
1 @Test 2 void testCountUser() throws Exception { 3 // 加载核心配置文件 4 String resource = "SqlMapConfig.xml"; 5 InputStream resourceAsStream = Resources.getResourceAsStream(resource); 6 // 创建sqlsessionFactory 7 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); 8 // 创建sqlsession 9 SqlSession openSession = sqlSessionFactory.openSession(); 10 //sqlsession生成一个实现类 11 UserMapper mapper = openSession.getMapper(UserMapper.class); 12 //利用接口调方法 13 Integer users = mapper.countUsers(); 14 15 System.out.println(users); 16 17 }
运行结果:查询一共多少个用户
2):输出pojo对象,已经写过
3):输出pojo列表,已经写过
resultmap:resultType可至指定查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致才可以。如果sql查询字段名和pojo属性不一致,可以通过resultmap将字段名和属性名做一个对应关系,resultmap实质上还需要将查询结果映射到pojo对象中。resultmap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list试下那一对一查询和一对多查询。
如
一一对应关系我们可以使用resulttype(自动映射),不一致需要使用rsultmap进行手动映射。
例如查询order的所有数据:
user id不一致,剩下都一致。
OrderMapper.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatiis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="com.me.mybatis.mapper.OrderMapper"> 6 7 <resultMap type="Orders" id="orders"> 8 <result column="user_id" property="userId" /> 9 </resultMap> 10 <select id="findAllOrders" resultMap="orders"> 11 select * from orders 12 </select> 13 </mapper>
OrderMapper.java:
1 package com.me.mybatis.mapper; 2 3 import java.util.List; 4 5 import com.me.mybatis.pojo.Orders; 6 7 public interface OrderMapper { 8 public List<Orders> findAllOrders(); 9 }
Test类:
1 @Test 2 void testFindAllOrders() throws Exception { 3 // 加载核心配置文件 4 String resource = "SqlMapConfig.xml"; 5 InputStream resourceAsStream = Resources.getResourceAsStream(resource); 6 // 创建sqlsessionFactory 7 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); 8 // 创建sqlsession 9 SqlSession openSession = sqlSessionFactory.openSession(); 10 //sqlsession生成一个实现类 11 OrderMapper mapper = openSession.getMapper(OrderMapper.class); 12 //利用接口调方法 13 List<Orders> orders = mapper.findAllOrders(); 14 for (Orders orders2 : orders) { 15 16 System.out.println(orders2); 17 } 18 19 }
pojo:
1 package com.me.mybatis.pojo; 2 3 import java.util.Date; 4 5 public class Orders { 6 private Integer id; 7 8 private Integer userId; 9 10 private String number; 11 12 private Date createtime; 13 14 private String note; 15 16 public Integer getId() { 17 return id; 18 } 19 20 public void setId(Integer id) { 21 this.id = id; 22 } 23 24 public Integer getUserId() { 25 return userId; 26 } 27 28 public void setUserId(Integer userId) { 29 this.userId = userId; 30 } 31 32 public String getNumber() { 33 return number; 34 } 35 36 public void setNumber(String number) { 37 this.number = number; 38 } 39 40 public Date getCreatetime() { 41 return createtime; 42 } 43 44 public void setCreatetime(Date createtime) { 45 this.createtime = createtime; 46 } 47 48 public String getNote() { 49 return note; 50 } 51 52 public void setNote(String note) { 53 this.note = note; 54 } 55 56 @Override 57 public String toString() { 58 return "Orders [id=" + id + ", userId=" + userId + ", number=" + number + ", createtime=" + createtime 59 + ", note=" + note + "]"; 60 } 61 62 public Orders(Integer id, Integer userId, String number, Date createtime, String note) { 63 super(); 64 this.id = id; 65 this.userId = userId; 66 this.number = number; 67 this.createtime = createtime; 68 this.note = note; 69 } 70 71 public Orders() { 72 super(); 73 } 74 75 }
运行结果:搜索全部订单信息:
以上是关于Mybatis_7输入映射和输出映射的主要内容,如果未能解决你的问题,请参考以下文章