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	 */	List
getUserByQueryVo(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); List
list = 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 {
/* * 获取订单列表 */ List
getOrderList();}

(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); List
list = ordermapper.getOrderList(); for (Order order : list) {
System.out.println(order); } openSession.close(); }}

运行测试

在这里插入图片描述

4、resultMap

(1)修改OrderMapper.xml添加

在这里插入图片描述

(2)在OrderMapper接口当中创建getOrderListMap方法

在这里插入图片描述

List
getOrderListMap();

测试运行

在这里插入图片描述

5、动态sql-if标签的使用(条件查询)

(1)修改UserMapper.xml

在这里插入图片描述

(2)在接口当中创建对应的方法

在这里插入图片描述

List
getUserByPojo(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("张"); List
userByPojo = 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使用	 */		List
getOrderUser();

(4)OrderMapperTest当中编写测试方法testGetOrderUser

在这里插入图片描述

@Test	public void testGetOrderUser() {
SqlSession openSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(); //获取OrderMapper代理实现 OrderMapper ordermapper = openSession.getMapper(OrderMapper.class); List
orderUser = 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使用	 */	List
getOrderUserMap();

(4)编写测试方法,然后运行

在这里插入图片描述

@Test	public void testGetOrderUserMap() {
SqlSession openSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(); //获取OrderMapper代理实现 OrderMapper ordermapper = openSession.getMapper(OrderMapper.class); List
orderUserMap = ordermapper.getOrderUserMap(); for (Order order : orderUserMap) {
System.out.println(order); System.out.println(" 此订单的用户为:" + order.getUser()); } openSession.close(); }

运行测试

在这里插入图片描述

10、(方式二)一对多关联查询:一个人有多个订单

(1)修改User

在这里插入图片描述

private List
orders; 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); List
list = 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android Studio创建shapeDrawable的方法
下一篇:Java 的Swing 之JFrame快速入门

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月15日 15时44分16秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章