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     }
MybtisMapperTest.java

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>
User.xml

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 }
QueryVo.java

 

运行结果:

 

     2.映射输出

      1)输出简单类型integer

User.xml:

1         <select id="countUsers" 
2         resultType="Integer">
3         select count(id) from user  
4     </select>
5     
User.xml

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 }
UserMapper.java

测试代码:

 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.xml

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 }
OrderMapper.java

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 }
Orders.java

 

 

运行结果:搜索全部订单信息:

 

以上是关于Mybatis_7输入映射和输出映射的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis--02

mybatis第二天

Mybatis

MyBatis:MyBatis的输入映射和输出映射

mybatis第二天——大纲待更新

mybatis入门基础----输入映射和输出映射