一对一,一对多,多对多查询 (注解写法)
生活随笔
收集整理的這篇文章主要介紹了
一对一,一对多,多对多查询 (注解写法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1、實體
- 2、一對一
- 3、一對多
- 4、多對多
- 5、測試
從用戶,訂單之間說一對一,和多對一的關系
從用戶,用戶角色,以及兩者關系的表,來說多對多
^_^ 多表操作查詢 一對一
😀一對多,多對多查詢
1、實體
/*** 用戶訂單表 一對一* 一個訂單對應一個用戶...* @author echo lovely* @date 2020/9/13 10:26*/ public class Order {private Integer orderId;private Timestamp orderTime;private Double orderMoney;// 當前訂單對應的用戶..private User user; } /*** 多對多關系測試* @author echo lovely* @date 2020/9/13 16:38*/ public class Role {private Integer roleId;private String roleName;} /*** @author echo lovely* @date 2020/9/11 20:55*/ public class User {private Integer userId;private String userName;private String userPassword;// 一對多 每個用戶 有多個訂單private List<Order> orderList;// 新增角色表 每個用戶有多個角色,每個角色可能對應多個用戶private List<Role> roleList;}2、一對一
查詢訂單對應的用戶
package cn.bitqian.dao;import cn.bitqian.entity.Order; import cn.bitqian.entity.User; import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select;import java.util.List;/*** 注解 一對一模型*/ public interface OrderMapper {/*@Select("select * from orders, users1 where orders.order_id = users1.userid")@Results({@Result(id = true, property = "orderId", column="order_id"),@Result(property = "orderName", column = "order_name"),@Result(property = "orderMoney", column = "order_money"),@Result(property = "user.userId", column = "userid"),@Result(property = "user.userName", column = "username"),@Result(property = "user.orderPassword", column = "orderpassword")})public List<Order> queryOrder();*/@Select("select * from orders")@Results({@Result(id = true, property = "orderId", column="order_id"),@Result(property = "orderName", column = "order_name"),@Result(property = "orderMoney", column = "order_money"),@Result(property = "user", // 要封裝的屬性名稱column = "order_id", // 根據哪個字段查詢user表的數據javaType = User.class, // 要封裝的實體類型// select 代表查詢對應接口 獲得數據one = @One(select="cn.bitqian.dao.UserMapper.queryOneUser"))})List<Order> queryOrder();// 根據uid 查詢對應的order@Select("select * from orders where uid = #{uid}")@Results({@Result(id = true, property = "orderId", column = "order_id"),@Result(property = "orderName", column = "order_name"),@Result(property = "orderMoney", column = "order_money")})Order queryOneOrder(int uid);}3、一對多
查詢用戶對應的訂單
package cn.bitqian.dao;import cn.bitqian.entity.User; import org.apache.ibatis.annotations.*;import java.util.List;public interface UserMapper {@Select("select * from users1")@Results({@Result(property = "userId", column = "userid"),@Result(property = "userName", column = "username"),@Result(property = "userPassword", column="userpassword"),@Result(property = "orderList", // 封裝的屬性名稱為orderListcolumn = "userId",javaType = List.class,// mapper接口中 方法many = @Many(select = "cn.bitqian.dao.OrderMapper.queryOneOrder") // 在OrderMapper里面)})List<User> queryUserAndOrder();// 一對多 (一個用戶多個訂單)}4、多對多
查詢用戶和角色
package cn.bitqian.dao;import cn.bitqian.entity.User; import org.apache.ibatis.annotations.*;import java.util.List;public interface UserMapper {// 用戶 & 角色@Select("select * from users1")@Results({@Result(id = true, property = "userId", column = "userId"),@Result(property = "userName", column = "userName"),@Result(property = "userPassword", column = "userPassword"),@Result(property = "roleList", // 要封裝的實體屬性名稱column = "userId",// 根據user id查詢role表的數據javaType = List.class, // 要封裝的實體類型many = @Many(select = "cn.bitqian.dao.RoleMapper.queryRoleByUserId"))// 查詢對應的接口 獲取數據})List<User> queryUserAndRole();}角色接口
package cn.bitqian.dao;import cn.bitqian.entity.Role; import org.apache.ibatis.annotations.*;import java.util.List;// 角色 & 用戶 & 角色關系 public interface RoleMapper {@Select(value = "SELECT r.* FROM user_role ur, role r " +"WHERE ur.role_id = r.role_id " +"AND user_id = #{userId}")@Results({@Result(property = "roleId", column = "role_id"),@Result(property = "roleName", column = "role_name")})List<Role> queryRoleByUserId(int userId);}5、測試
import cn.bitqian.dao.OrderMapper; import cn.bitqian.dao.UserMapper; import cn.bitqian.entity.Order; import cn.bitqian.entity.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test;import java.io.IOException; import java.io.InputStream; import java.util.List;/*** @author echo lovely* @date 2020/9/13 21:14*/ public class MybatisAnnotationTest {private SqlSession sqlSession;private UserMapper userMapper;@Beforepublic void initSqlSession() {try {InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);sqlSession = sqlSessionFactory.openSession(true);userMapper = sqlSession.getMapper(UserMapper.class);} catch (IOException e) {e.printStackTrace();}}// 一對一測試 注解@Testpublic void oneToOneTest() {OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);List<Order> orderList = orderMapper.queryOrder();for (Order order : orderList) {System.out.println(order);}}// 一對多測試@Testpublic void oneToManyTest() {List<User> userList = userMapper.queryUserAndOrder();for (User user : userList) {System.out.println(user);}}// 多對多測試@Testpublic void manyToMany() {List<User> userAndRoleList = userMapper.queryUserAndRole();for (User userAndRole : userAndRoleList) {System.out.println(userAndRole);}}@Afterpublic void destroySqlSession() {if (sqlSession != null) {sqlSession.close();System.out.println("close session...");}}}總結
以上是生活随笔為你收集整理的一对一,一对多,多对多查询 (注解写法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向对象之编写一个完整的类
- 下一篇: 项目日报模板_能力再强也要常向领导汇报工