Mybatis快速入门(3)resultType(输出类型)一对一关联映射,一对多关联映射
发布日期:2021-06-29 15:03:42
浏览次数:3
分类:技术文章
本文共 7795 字,大约阅读时间需要 25 分钟。
一、输入输出映射
Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。
1、parameterType(输入类型)
1.1、传递简答类型
参考第一天内容
使用#{}占位符,或者${}进行SQL拼接1.2、传递pojo对象
参考第一天的内容
Mybatis使用OGNL表达式解析对象字段的值,#{}或者${}括号当中的值为pojo属性名称1.3、传递pojo包装对象:创建包装的pojo对象QueryVo
package com.itzheng.mybatis.pojo;/* * 包装的pojo */public class QueryVo { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; }}
1.4、在UserMapper当中创建getUserByQueryVo方法
/* * 传递包装pojo */ ListgetUserByQueryVo(QueryVo vo);
1.5、在UserMapperTest类当中创建testGetUserByQueryVo方法
@Test public void testGetUserByQueryVo() { SqlSession openSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(); // 获取接口的代理实现类 UserMapper userMapper = openSession.getMapper(UserMapper.class); QueryVo vo = new QueryVo(); User user = new User(); user.setUsername("张"); vo.setUser(user); Listlist = userMapper.getUserByQueryVo(vo); for (User user2 : list) { System.out.println(user2); } openSession.close(); }
运行测试
2、统计个数
(1)修改UserMapper.xml创建对应的内容
(2)创建对应的接口当中的方法
/* * 查询用户总记录数 */ Integer getUserCount();
(3)在UserMapperTest类当中创建对应的方法
@Test public void testGetUserByCount() { SqlSession openSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(); // 获取接口的代理实现类 UserMapper userMapper = openSession.getMapper(UserMapper.class); System.out.println("用户总记录数为:"+userCount); System.out.println(userCount); openSession.close(); }
运行测试结果
3、查询订单列表
(1)创建OrderMapper接口当中的getOrderList方法
package com.itzheng.mybatis.mapper;import java.util.List;import com.itzheng.mybatis.pojo.Order;/* * 订单的持久化接口 */public interface OrderMapper { /* * 获取订单列表 */ ListgetOrderList();}
(2)在OrderMapper.xml当中
(3)创建单元测试包OrderMapperTest
package com.itzheng.mybatis.test;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.junit.Test;import com.itzheng.mybatis.mapper.OrderMapper;import com.itzheng.mybatis.pojo.Order;import com.itzheng.mybatis.utils.SqlSessionFactoryUtils;public class OrderMapperTest { @Test public void testGetOrderList() { SqlSession openSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(); //获取OrderMapper代理实现 OrderMapper ordermapper = openSession.getMapper(OrderMapper.class); Listlist = ordermapper.getOrderList(); for (Order order : list) { System.out.println(order); } openSession.close(); }}
运行测试
4、resultMap
(1)修改OrderMapper.xml添加
(2)在OrderMapper接口当中创建getOrderListMap方法
ListgetOrderListMap();
测试运行
5、动态sql-if标签的使用(条件查询)
(1)修改UserMapper.xml
(2)在接口当中创建对应的方法
ListgetUserByPojo(User user);
(3)UserMapperTest当中创建对应的testGetUserByPojo方法
@Test public void testGetUserByPojo() { SqlSession openSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(); // 获取接口的代理实现类 UserMapper userMapper = openSession.getMapper(UserMapper.class); User user = new User(); user.setSex("1"); user.setUsername("张"); ListuserByPojo = userMapper.getUserByPojo(user); for (User user2 : userByPojo) { System.out.println(user2); } openSession.close(); }
运行测试
6、动态sql-sql片段的使用
(1)抽取SQL片段
id, username, birthday, sex, address
(2)引用sql片段的id
(3)运行测试代码
7、sql-foreach标签的使用:
(1)修改QueryVo类
(2)修改UserMapper.xml
运行测试代码
8、(方式一)一对一关联查询
(1)创建OrderUser
package com.itzheng.mybatis.pojo;/* * 订单关联用户信息的pojo */public class OrderUser extends Order { private String username;// 用户姓名 private String address;// 地址 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "OrderUser [username=" + username + ", address=" + address + ", getUsername()=" + getUsername() + ", getAddress()=" + getAddress() + ", getId()=" + getId() + ", getUserId()=" + getUserId() + ", getNumber()=" + getNumber() + ", getCreatetime()=" + getCreatetime() + ", getNote()=" + getNote() + ", toString()=" + super.toString() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + "]"; }}
(2)修改OrderMapper.xml
(3)OrderMapper接口当中创建getOrderUser方法
/* * 一对一关联:resultType使用 */ ListgetOrderUser();
(4)OrderMapperTest当中编写测试方法testGetOrderUser
@Test public void testGetOrderUser() { SqlSession openSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(); //获取OrderMapper代理实现 OrderMapper ordermapper = openSession.getMapper(OrderMapper.class); ListorderUser = ordermapper.getOrderUser(); for (OrderUser orderUser2 : orderUser) { System.out.println(orderUser2); } openSession.close(); }
运行测试代码
9、(方式一)一对一关联查询:ResultMap:一个订单只有一个人
(1)修改Order
private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; }
(2)修改OrderMapper.xml
(3)在OrderMapper接口当中编写getOrderUserMap方法
/* * 一对一关联:ResultMap使用 */ ListgetOrderUserMap();
(4)编写测试方法,然后运行
@Test public void testGetOrderUserMap() { SqlSession openSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(); //获取OrderMapper代理实现 OrderMapper ordermapper = openSession.getMapper(OrderMapper.class); ListorderUserMap = ordermapper.getOrderUserMap(); for (Order order : orderUserMap) { System.out.println(order); System.out.println(" 此订单的用户为:" + order.getUser()); } openSession.close(); }
运行测试
10、(方式二)一对多关联查询:一个人有多个订单
(1)修改User
private Listorders; public List getOrders() { return orders; } public void setOrders(List orders) { this.orders = orders; }
(2)修改UserMapper.xml
(3)在UserMapper接口当中创建getUserOrderMap方法
(4)编写测试方法
@Test public void testGetUserOrderMap() { SqlSession openSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(); // 获取接口的代理实现类 UserMapper userMapper = openSession.getMapper(UserMapper.class); Listlist = userMapper.getUserOrderMap(); for (User user2 : list) { System.out.println(user2); for (Order order : user2.getOrders()) { System.out.println(" 此用户的订单有:"+order); } } openSession.close(); }
总结
转载地址:https://code100.blog.csdn.net/article/details/114580468 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月15日 15时44分16秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
芯片IC附近为啥要放0.1uF的电容?
2019-04-29
电赛 | 19年全国一等奖,北航学子回忆录。
2019-04-29
电赛 | 19年全国一等奖,北航学子回忆录(上)
2019-04-29
电赛 | 19年全国一等奖,北航学子回忆录(下)
2019-04-29
突破!台积电1nm芯片,有了新进展。
2019-04-29
一文读懂全系列树莓派!
2019-04-29
自制一个害羞的口罩,见人就闭嘴,戴着可以喝奶茶
2019-04-29
聊聊我是如何编程入门的
2019-04-29
J-Link该如何升级固件?
2021-07-02
485通信自动收发电路,历史上最详细的解释
2021-07-02
一位头发发白的神人教你怎么写程序,运维,买电脑,写文章,平面设计!
2021-07-02
「第三篇」全国电子设计竞赛,这些你必须知道的比赛细节,文末附上近十年电赛题目下载...
2021-07-02
5G小科普(漫画版,So easy!)
2021-07-02
「第四篇」电赛控制题可以准备一些什么?
2021-07-02
「第六篇」对于电赛,我们应该看重什么?
2021-07-02
树莓派翻车了
2019-04-29
这位电子工程师,你不能错过。
2019-04-29
「重磅猜题之第二篇」2019年大学生电子设计竞赛
2019-04-29
干货分享 JVM 之第 3 篇 —— Java 内存结构相关
2019-04-29
基于 Hystrix 高并发服务限流第 2 篇 —— 服务隔离(线程池隔离、信号量隔离)
2019-04-29