千峰商城-springboot项目搭建-14-关联查询实现
1.添加实体类Orders.java
package com.qfedu.tkmapperdemo.beans; import lombok.Data;
@Data
public class Orders {
private String orderId;
private Integer userId;
private String receiverName;
private String receiverMobile;
private String receiverAddress;
}
2.添加OrderDAO.java:
package com.qfedu.tkmapperdemo.dao; import com.qfedu.tkmapperdemo.beans.Orders; import com.qfedu.tkmapperdemo.general.GeneralDAO; public interface OrderDAO extends GeneralDAO<Orders> { }
3.编写UserDAOTest.java:
package com.qfedu.tkmapperdemo.dao; import com.qfedu.tkmapperdemo.TkmapperDemoApplication; import com.qfedu.tkmapperdemo.beans.Orders; import com.qfedu.tkmapperdemo.beans.User; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import tk.mybatis.mapper.entity.Example; import java.util.List; @RunWith(SpringRunner.class) @SpringBootTest(classes = TkmapperDemoApplication.class) public class UserDAOTest { @Autowired private UserDAO userDAO; @Autowired private OrderDAO orderDAO; @Test public void testSelect(){ //查询用户的同时查询订单 Example example = new Example(User.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("username","zhangsan"); //根据用户名查询用户 //1.先根据用户名查询用户信息 List<User> users = userDAO.selectByExample(example); User user = users.get(0); //2.再根据用户id到订单表查询订单信息 Example example1 = new Example(Orders.class); Example.Criteria criteria1 = example1.createCriteria(); criteria1.andEqualTo("userId",user.getUserId()); List<Orders> ordersList = orderDAO.selectByExample(example1); //3.将查询到的订单集合设置到user中 user.setOrdersList(ordersList); System.out.println(user); } }
4.在User.java中的Id上加上@Id注解。
package com.qfedu.tkmapperdemo.beans; import io.swagger.annotations.ApiModel; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import javax.persistence.Id; import javax.persistence.Table; import java.util.Date; import java.util.List; @Data @NoArgsConstructor @AllArgsConstructor @ApiModel(value = "User对象",description = "买家信息") @Table(name = "users") public class User { @Id private Integer userId; private String username; private String password; private String nickname; private String realname; private String userImg; private String userMobile; private String userEmail; private String userSex; private Date userBirth; private Date userRegtime; private Date userModtime; private List<Orders> ordersList; }
测试:
方法二:
5.创建UserMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qfedu.tkmapperdemo.dao.UserDAO">
<resultMap id="userMap" type="User">
<id column="user_id" property="userId"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<result column="nickname" property="nickname"/>
<result column="realname" property="realname"/>
<result column="user_img" property="userImg"/>
<result column="user_mobile" property="userMobile"/>
<result column="user_email" property="userEmail"/>
<result column="user_sex" property="userSex"/>
<result column="user_birth" property="userBirth"/>
<result column="user_regtime" property="userRegtime"/>
<result column="user_modtime" property="userModtime"/>
<collection property="ordersList" ofType="Orders">
<result column="order_id" property="orderId"/>
<result column="receiver_name" property="receiverName"/>
<result column="receiver_mobile" property="receiverMobile"/>
<result column="receiver_address" property="receiverAddress"/>
</collection>
</resultMap>
<select id="selectByUsername" parameterType="String" resultMap="userMap">
select
u.user_id,
u.username,
u.password,
u.nickname,
u.realname,
u.user_img,
u.user_mobile,
u.user_email,
u.user_sex,
u.user_birth,
u.user_regtime,
u.user_modtime,
o.order_id,
o.receiver_name,
o.receiver_mobile,
o.receiver_address
from users u inner join orders o
on u.user_id = o.user_id
where u.username = #{username}
</select>
</mapper>
6.修改UserDAOTest.java:
package com.qfedu.tkmapperdemo.dao; import com.qfedu.tkmapperdemo.TkmapperDemoApplication; import com.qfedu.tkmapperdemo.beans.Orders; import com.qfedu.tkmapperdemo.beans.User; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import tk.mybatis.mapper.entity.Example; import java.util.List; @RunWith(SpringRunner.class) @SpringBootTest(classes = TkmapperDemoApplication.class) public class UserDAOTest { @Autowired private UserDAO userDAO; @Autowired private OrderDAO orderDAO; @Test public void testSelect(){ // //查询用户的同时查询订单 // Example example = new Example(User.class); // Example.Criteria criteria = example.createCriteria(); // criteria.andEqualTo("username","zhangsan"); // // //根据用户名查询用户 // //1.先根据用户名查询用户信息 // List<User> users = userDAO.selectByExample(example); // User user = users.get(0); // // //2.再根据用户id到订单表查询订单信息 // Example example1 = new Example(Orders.class); // Example.Criteria criteria1 = example1.createCriteria(); // criteria1.andEqualTo("userId",user.getUserId()); // // List<Orders> ordersList = orderDAO.selectByExample(example1); // //3.将查询到的订单集合设置到user中 // user.setOrdersList(ordersList); // // // System.out.println(user); User user = userDAO.selectByUsername("zhangsan"); System.out.println(user); } }