重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇文章给大家分享的是有关Mybatis_day05中怎么实现关联查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
我们提供的服务有:做网站、成都网站建设、微信公众号开发、网站优化、网站认证、襄州ssl等。为1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的襄州网站制作公司
关联查询
一对一查询
案例:查询所有订单信息,关联查询下单用户信息。
注意:因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。
方法一:
使用resultType,定义订单信息po类,此po类中包括了订单信息和用户信息:
Sql语句:
SELECT orders.*, user.username, userss.address FROM orders, user WHERE orders.user_id = user.id
定义po类
Po类中应该包括上边sql查询出来的所有字段,如下:
public class OrdersCustom extends Orders { private String username;// 用户名称 private String address;// 用户地址 get/set。。。。 OrdersCustom类继承Orders类后OrdersCustom类包括了Orders类的所有字段,只需要定义用户的信息字段即可。
Mapper.xml
Mapper接口:
public ListfindOrdersList() throws Exception; 测试: Public void testfindOrdersList()throws Exception{ //获取session SqlSession session = sqlSessionFactory.openSession(); //获限mapper接口实例 UserMapper userMapper = session.getMapper(UserMapper.class); //查询订单信息 List list = userMapper.findOrdersList(); System.out.println(list); //关闭session session.close(); }
小结:
定义专门的po类作为输出类型,其中定义了sql查询结果集所有的字段。此方法较为简单,企业中使用普遍。
方法二:
使用resultMap,定义专门的resultMap用于映射一对一查询结果。
Sql语句:
SELECT orders.*, user.username, user.address FROM orders, user WHERE orders.user_id = user.id
定义po类
在Orders类中加入User属性,user属性中用于存储关联查询的用户信息,因为订单关联查询用户是一对一关系,所以这里使用单个User对象存储关联查询的用户信息。
public class Orders { private Integer id; private Integer userId; private String number; private Date createtime; private String note; private User user; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } public String getNote() { return note; } public void setNote(String note) { this.note = note; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String toString() { return "Orders{" + "id=" + id + ", userId=" + userId + ", number='" + number + '\'' + ", createtime=" + createtime + ", note='" + note + '\'' + ", user=" + user + '}'; } }
Mapper.xml
这里resultMap指定orderUserResultMap。 association:表示进行关联查询单条记录 property:表示关联查询的结果存储在com.pp.mybatis.po.Orders的user属性中 javaType:表示关联查询的结果类型 :查询结果的user_id列对应关联对象的id属性,这里是 表示user_id是关联查询对象的唯一标识。 :查询结果的username列对应关联对象的username属性。
Mapper接口:
public ListfindOrdersListResultMap() throws Exception; 测试: Public void testfindOrdersListResultMap()throws Exception{ //获取session SqlSession session = sqlSessionFactory.openSession(); //获限mapper接口实例 UserMapper userMapper = session.getMapper(UserMapper.class); //查询订单信息 List list = userMapper.findOrdersList2(); System.out.println(list); //关闭session session.close(); }
小结:
使用association完成关联查询,将关联查询信息映射到pojo对象中。
一对多查询
案例:查询所有用户信息及用户关联的订单信息。
用户信息和订单信息为一对多关系。
使用resultMap实现如下:
Sql语句:
SELECT u.*, o.id oid, o.number, o.createtime, o.note FROM `user` u LEFT JOIN orders o ON u.id = o.user_id
定义po类
在User类中加入List
public class User { private int id; private String username; private String sex; private Date birthday; private String address; private ListordersList; @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", sex='" + sex + '\'' + ", birthday=" + birthday + ", address='" + address + '\'' + ", ordersList=" + ordersList + '}'; } public List getOrdersList() { return ordersList; } public void setOrdersList(List ordersList) { this.ordersList = ordersList; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
Mapper.xml
collection部分定义了用户关联的订单信息。表示关联查询结果集
property="orders":关联查询的结果集存储在User对象的上哪个属性。
ofType="orders":指定关联查询的结果集中的对象类型即List中的对象类型。此处可以使用别名,也可以使用全限定名。
Mapper接口:
ListgetUserOrderList();
测试
@Test public void getUserOrderList() { SqlSession session = sqlSessionFactory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); Listresult = userMapper.getUserOrderList(); for (User user : result) { System.out.println(user); } session.close(); }
以上就是Mybatis_day05中怎么实现关联查询,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。