Mybatis关联关系

小编 2026-07-06 阅读:386 评论:0
1、一对多,以订单与订单项为例: 1-1:将数据导入数据库 1-2:通过mybatis-generator插件生成dao、mapper、model 1-3:实体类建立关联关系: 1-3-1、一...

1、一对多,以订单与订单项为例:

1-1:将数据导入数据库
1-2:通过mybatis-generator插件生成dao、mapper、model
1-3:实体类建立关联关系:
1-3-1、一对多,订单的实体类:一个订单对应多个订单项

private Set<OrderItem> orderItems = new HashSet<>();

1-3-2、多对一,订单项的实体类:多个订单项对应一个订单

private Order order;

1-4:配置mybatis关联映射:
1-4-1:一对多:订单中的Mapper.xml配置

<collection property= oftype=“类的全路径名”>
<!--配置,与数据库保持一致-->
<!--订单配置-->
  <resultMap id=\"orderMap\" type=\"com.zking.ssm.model.Order\">
    <result property=\"orderId\" column=\"order_id\"></result>
    <result property=\"orderNo\" column=\"order_no\"></result>
    <!--一对多     订单项配置-->
   <!--  property: 指的是集合属性的值, ofType:指的是集合中元素的类型 -->
    <collection property=\"orderItems\" ofType=\"com.zking.ssm.model.OrderItem\">
      <result property=\"orderItemId\" column=\"order_item_id\"></result>
      <result property=\"productId\" column=\"product_id\"></result>
      <result property=\"quantity\" column=\"quantity\"></result>
      <result property=\"oid\" column=\"oid\"></result>
    </collection>
  </resultMap>

1-4-2:多对一:订单项中的Mapper.xml配置:

<assocation property javaType = \" 类的全路径名\"

 <resultMap id=\"OrderItemMap\" type=\"com.zking.ssm.model.OrderItem\">
    <result property=\"orderItemId\" column=\"order_item_id\"></result>
    <result property=\"productId\" column=\"product_id\"></result>
    <result property=\"quantity\" column=\"quantity\"></result>
    <result property=\"oid\" column=\"oid\"></result>
       <!-- 多对一的关系 -->
        <!-- property: 指的是属性的值, javaType:指的是属性的类型-->
    <association property=\"order\" javaType=\"com.zking.ssm.model.Order\">
      <result property=\"orderId\" column=\"order_id\"></result>
      <result property=\"orderNo\" column=\"order_no\"></result>
    </association>
  </resultMap>
  

1-5:订单中方法的配置:
1-5-1:根据订单id去查询:

 List<Order> queryOrderById(Integer orderId);

1-5-2:Mapper.xml配置:

 <select id=\"queryOrderById\" resultMap=\"orderMap\" parameterType=\"java.lang.Integer\">
    select * from t_hibernate_order o,t_hibernate_order_item oi
    where o.order_id = oi.oid
    and o.order_id=#{orderId}

  </select>

1-6:订单项中方法的配置:

注意:使用左外连接而非内连接!!!

1-6-1:根据订单项id去查询:

  OrderItem queryOrderItemById(Integer orderItemId);

1-6-2:Mapper.xml配置:

<select id=\"queryOrderItemById\" resultMap=\"OrderItemMap\" parameterType=\"java.lang.Integer\">
    select * from t_hibernate_order o,t_hibernate_order_item oi
    where o.order_id = oi.oid
    and oi.order_item_id=#{orderItemId}

  </select>

1-7:Service配置:
1-7-1:订单:OrderService:

public interface OrderService {

    List<Order> queryOrderById(Integer orderId);
}

1-7-2:订单:OrderServiceImpl:


@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Override
    public List<Order> queryOrderById(Integer orderId) {
        return orderMapper.queryOrderById(orderId);
    }
}

1-7-3:测试类:OrderServiceTest (订单测试类)

public class OrderServiceTest extends SpringJunitBaseTest {

    @Autowired
    private OrderService orderService;

    @Test
    public void queryOrderById() {
        //查询订单编号为3 的订单
        List<Order> orders = orderService.queryOrderById(3);
        for (Order order : orders) {
            System.out.println(order);
        }
    }
}

结果:\"在这里插入图片描述\"

2、多对多:书籍与类别为例:

2-1:书籍与类别是一对多的关系
书籍实体类配置:

    private Set<Category> categories = new HashSet<>();

2-2:类别与书籍也是一对多的关系:
类别实体类配置:

 private Set<HBook> hBooks = new HashSet<>();

2-3:配置mybatis关联映射:
2-3-1:一对多、书籍中的Mapper.xml配置:

<collection property= oftype=“类的全路径名”>

<resultMap id=\"bookMap\" type=\"com.zking.ssm.model.HBook\">
    <result property=\"bookId\" column=\"book_id\"></result>
    <result property=\"bookName\" column=\"book_name\"></result>
    <result property=\"price\" column=\"price\"></result>
    
    <collection property=\"categories\" ofType=\"com.zking.ssm.model.Category\">
      <result property=\"categoryId\" column=\"category_id\"></result>
      <result property=\"categoryName\" column=\"category_name\"></result>
    </collection>
  </resultMap>

2-3-2:一对多、类别中的Mapper.xml配置:

<collection property= oftype=“类的全路径名”>

 <resultMap id=\"CategoryMap\" type=\"com.zking.ssm.model.Category\">
    <result property=\"categoryId\" column=\"category_id\"></result>
    <result property=\"categoryName\" column=\"category_name\"></result>
    
    <collection property=\"hBooks\" ofType=\"com.zking.ssm.model.HBook\">
      <result property=\"bookId\" column=\"book_id\"></result>
      <result property=\"bookName\" column=\"book_name\"></result>
      <result property=\"price\" column=\"price\"></result>
    </collection>
  </resultMap>

2-4:方法配置:
2-4-1:HBookMapper配置

 HBook queryBookById(Integer bookId);

2-4-2:Mapper.xml配置:

  <select id=\"queryBookById\" resultMap=\"bookMap\" parameterType=\"java.lang.Integer\">
    select * from t_hibernate_book b,t_hibernate_book_category bc,t_hibernate_category c
    where b.book_id = bc.bid
    and bc.cid=c.category_id
    and b.book_id = #{bookId}
  </select>

2-5:Service配置:
2-5-1:HBookService

public interface HBookService {

    HBook queryBookById(Integer bookId);
}
2-5-2:HBookServiceImpl 
@Service
public class HBookServiceImpl implements HBookService {

    @Autowired
    private HBookMapper hBookMapper;

    @Override
    public HBook queryBookById(Integer bookId) {
        return hBookMapper.queryBookById(bookId);
    }
}

2-6:测试:

public class HBookServiceTest extends SpringJunitBaseTest {

    @Autowired
    private  HBookService hBookService;

    @Test
    public void queryBookById() {
        HBook hBook = hBookService.queryBookById(2);
        System.out.println(hBook);

    }

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表