JAVA框架 Mybaits 输入和输出映射

一、输入映射

当前端传来的参数,比较复杂,比如说用户名称、订单单号、账号信息等等。后端有可能有多个projo类对应这些信息。我们需要把这些的projo类封装成一个类似一个vo类。

通过设置字段形式关联我们的多个projo类。这样在查询的时候会好些。这种方式叫做输入映射。

mapper配置文件:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="jd.com.vo.vointer" >
 6     <select id="findAccountById" parameterType="jd.com.vo.vo" resultType="jd.com.mybaitstest.account">
 7         SELECT * FROM t_account WHERE id=#{ac.id}
 8     </select>
 9 
10 
11     <insert id="inAccount" parameterType="jd.com.vo.vo" >
12     <selectKey order="AFTER" resultType="int" keyProperty="id" >
13         SELECT LAST_INSERT_ID();
14     </selectKey>
15         INSERT INTO t_account (NAME,money ) VALUES (#{ac.name},#{ac.money})
16     </insert>
17 </mapper>

动态代理接口:

1 package jd.com.vo;
2 import jd.com.mybaitstest.account;
3 public interface vointer {
4      account  findAccountById(int id);
5      void  inAccount(vo vc);
6 } 

vo类:

 1 package jd.com.vo;
 2 import  jd.com.mybaitstest.account;
 3 public class vo {
 4     private account ac;
 5     private int id;
 6 
 7     public void setId(int id) {
 8         this.id = id;
 9     }
10 
11     public int getId() {
12         return id;
13     }
14 
15     public void setAc(account ac) {
16         this.ac = ac;
17     }
18 
19     public account getAc() {
20         return ac;
21     }
22 } 

测试代码:

 1 package jd.com.vo;
 2 
 3 import org.apache.ibatis.io.Resources;
 4 import org.apache.ibatis.session.SqlSession;
 5 import org.apache.ibatis.session.SqlSessionFactory;
 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 7 import org.junit.jupiter.api.Test;
 8 
 9 import java.io.IOException;
10 import java.io.InputStream;
11 
12 import jd.com.mybaitstest.account;
13 
14 public class testDemo {
15     @Test
16     public  void  testdemo1() throws IOException {
17         String resource="SqlMapConfig.xml";
18         InputStream inp = Resources.getResourceAsStream(resource);
19         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inp);
20         SqlSession sqlSession=sqlSessionFactory.openSession();
21         vointer vc=sqlSession.getMapper(vointer.class);
22         vo vo1=new vo();
23         //查询
24         account ac=vc.findAccountById(4);
25         System.out.println("ac = " + ac);
26         //插入
27         account nac=new account();
28         vo1.setAc(nac);
29         nac.setMoney(12);
30         nac.setName("kook");
31         System.out.println(nac.getMoney()+ac.getName());
32         vc.inAccount(vo1);
33         sqlSession.commit();
34         System.out.println("acz. = " + vo1.getId());
35 
36     }
37 }

总结:1)mapper接口和vo类只有参数的关联。

   2)如果vo类涉及到多个projo类的话,只需要在vo类中设置字段即可。private account ac; 提供get和set方法。

   3)接口的名称和mapper配置文件名字要保持一致。

   4)不要忘记把mapper配置文件在主配置文件:SqlMapConfig.xml注册。

二、输出映射:

1)输出简单类型:

比如说整形:

继续上面的mapper文件:

添加如下:

1     <select id="findAccountCount" resultType="int">
2         SELECT COUNT(*) FROM t_account;
3     </select>

 

 接口添加方法:

1 Integer findAccountCount();

 

测试代码:

1        Integer countNum=vc.findAccountCount();
2         System.out.println(countNum);

 

简单类型必须是输出的语句是一个,也就是类似selelctone形式。才可能有简单类型输出。

2)projo类

看上面代码。

3)list的projo类。

通过方法selelctlist形式查询是列表。

 

posted @ 2018-04-25 16:33  evil_liu  阅读(335)  评论(0编辑  收藏  举报