一、输入映射
当前端传来的参数,比较复杂,比如说用户名称、订单单号、账号信息等等。后端有可能有多个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形式查询是列表。