189 8069 5689

Mybatis的多对多举例分析

本篇内容主要讲解“Mybatis的多对多举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mybatis的多对多举例分析”吧!

为汝南等地区用户提供了全套网页设计制作服务,及汝南网站建设行业解决方案。主营业务为网站设计制作、做网站、汝南网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

        多对多

        一张订单里 可以包含多种产品,一种产品 可以出现在多张订单里

        为了维系多对多关系,必须要一个中间表。 在这里我们使用订单项(OrderItem)表来作为中间表

        (1)建立order_表,增添数据

        (2)创建实体类Order和OrderItem

           Order.java中

    private int id;
    private String code;
     
    List orderItems;
    setter,getter

           OrderItem.java中

    private int id;
    private int number;
    private Order order;
    private Product product;
    setter,getter

        (3)创建映射文件Order.xml,Product.xml和OrderItem.xml

            Order.xml中    

    
        
            
            
             
            
                
                
                
                    
                    
                    
                               
            
        
         
        
            select o.*,p.*,oi.*, o.id 'oid', p.id 'pid', oi.id 'oiid', p.name 'pname'
                from order_ o
                left join order_item_ oi    on o.id =oi.oid
                left join product_ p on p.id = oi.pid
        
             
        
            select o.*,p.*,oi.*, o.id 'oid', p.id 'pid', oi.id 'oiid', p.name 'pname'
                from order_ o
                left join order_item_ oi on o.id =oi.oid
                left join product_ p on p.id = oi.pid
            where o.id = #{id}
        
    

            Product.xml中

    
        
            
            
            
     
            
            
            
                
                
            
        
 
        
            select c.*, p.*, c.id 'cid', p.id 'pid', c.name 'cname', p.name 'pname'
                from category_ c
                left join product_ p on c.id = p.cid
           
        
            select c.*, p.*, c.id 'cid', p.id 'pid', c.name 'cname', p.name 'pname'
                from category_ c
                left join product_ p on c.id = p.cid
            where p.id = #{id}
           
    

            OrderItem.xml中

    
     
        
            insert into order_item_
                values(null,#{order.id},#{product.id},#{number})
           
        
            delete from order_item_
                where oid = #{order.id} and pid = #{product.id}
           
     
    

        (3)修改mybatis-config.xml,添加对于Order.xml和OrderItem的映射

    
        
        
        
        
    

        (4)联合查询

private static void listOrder(SqlSession session) {
        List os = session.selectList("listOrder");
        for (Order o : os) {
            System.out.println(o.getCode());
            List ois = o.getOrderItems();
            for (OrderItem oi : ois) {
                System.out.format("\t%s\t%f\t%d%n", oi.getProduct().getName(), oi.getProduct().getPrice(),
                        oi.getNumber());
            }
        }
    }

        (5)建立关系,首先通过id分别获取Order对象和Product对象,然后创建一个新的OrderItem对象,

            接着设置Order,设置Product,设置数量,最后调用"addOrderItem" 对应的sql语句插入数据。

    private static void addOrderItem(SqlSession session) {
        Order o1 = session.selectOne("getOrder", 1);
        Product p6 = session.selectOne("getProduct", 6);
        OrderItem oi = new OrderItem();
        oi.setProduct(p6);
        oi.setOrder(o1);
        oi.setNumber(200);
 
        session.insert("addOrderItem", oi);
    }

        (6)删除关系,通过订单id(1)和产品id(6)进行删除,其实所谓的删除关系,就是删除掉OrderItem记录。

    private static void deleteOrderItem(SqlSession session) {
        Order o1 = session.selectOne("getOrder",1);
        Product p6 = session.selectOne("getProduct",6);
        OrderItem oi = new OrderItem();
        oi.setProduct(p6);
        oi.setOrder(o1);
        session.delete("deleteOrderItem", oi);     
    }

        (7)修改关系,多对多不存在修改关系的做法,就是删除旧的,然后新增一条即达到修改的效果。

        注:提示,通过Mybatis执行多条sql语句需要增加一个参数:allowMultiQueries

到此,相信大家对“Mybatis的多对多举例分析”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


网页标题:Mybatis的多对多举例分析
分享地址:http://cdxtjz.cn/article/jggsee.html

其他资讯