mybatis高級マッピングとspring統合の高級マッピング(4)


mybatis高級マッピングとspring統合の高級マッピング
————————————————    ————————————————————
    0.0              
    1.0     
        1.1      
        1.2      
        1.3      
        1.4  resultMap  
        1.5     
    2.0     
        2.1     
        2.2     (  mybatis        )
    3.0 mybatis spring  (  )
    4.0     (  )
————————————————      ————————————————
0.0             
    0.1.1          
                        ,         (  )   。
    0.1.2              、  
    0.1.3             
            
    0.1.4          
                      ,                。

    0.2       (     PowerDesigner)
           :user
                        
            id:    

           :order
                       (       )
            number:   
            user_id(  ,  id)
              :orderdetall
                                
            id:    
            orders_id(  ,  id)
            items_di(  ,  id)
           :items
                   
            id:    

                  
                                           
                             :
            user oders:
            user--->orders:            ,   
            orders--->user:            ,   

            orders orderdetall:
            orders--->orderdetall:              ,              ,          , orderdetall  ,     。
            orderdetall--->orders:                ,   。

            orderdetall items:
            orderdetall--->items:               ,   。
            items--->orderdetall:                  ,   。

                               :
        orders items:
        orders items           orderdetall,   orders items   。
        user items      
1.0     
    1.1      
        1.1.1  
              ,             。
        1.1.2  resultType  
            1.1.2.1 sql  
            SELECT orders.*,USER.username,USER.sex,USER.address FROM orders,USER WHERE orders.user_id=user.id
                   :   
                    :   
                         ?     ?
                   orders    (user_id),                    ,       。
            1.1.2.2  pojo
                   sql         pojo ,pojo           。
                   Orders.java        ,       pojo。
                        pojo           po 。

                    //              ,            pojo 
                    public class OrdersCustom extends Orders{
                        //      
                        /**USER.username,
                        USER.sex,
                        USER.address*/

                        private String username;
                        private String sex;
                        private String address;
                        }
            1.1.2.3mapper.xml

                <!--            -->
                <select id="findOrdersUser" resultType="com.demo.po.OrdersCustom">
                                SELECT orders.*,
                                USER.username,
                                USER.sex,
                                USER.address
                                FROM
                                orders,
                                USER 
                                WHERE orders.user_id=user.id
                </select>



            1.1.2.4mapper.java

                public interface OrdersMapperCustom{

                    //            
                    public List<OrdersCustom> findOrdersUser()throws Exception;
                }
            1.1.2.5  
                public void testFindOrdersUser() throws Exception{
                    SqlSession sqlSession = sqlSessionFactory.openSession();
                    //      
                    OrdersMapperCustom orderMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
                    //  mapper   
                    List<OrdersCustom> list = ordersMapperCustom.findOrdersUser();
                    system.out.println(list);
                    sqlSession.close();

                }

        1.1.3  resultMap  

            1.1.3.1 sql  
                 1.2.1 resultType   sql

            1.1.3.2   resultMap     
                  resultMap              orders   , orders    User  
                ,               orders    user   。
                  Orders    User  

            1.1.3.3  Orders    user  

                public class Orders{

                    private Integer userId;
                    private String number;
                    private Date createtime;
                    private String note;
                    //    
                    private User user;
                }
            1.1.3.4 mapper.xml

            1.1.3.4.1   resultMap:

                <!--          resultMap            com.demo.po.Orders  -->
                <resultMap type="com.demo.po.Orders" id="OrdersUserResultMap">
                    <!--           -->
                    <!-- id:           ,          ,            ,    id column:           property:              Orders      -->
                    <id column="id" property="id"/>
                    <result column="user_id" property="userId"/>
                    <result column="number" property="number"/>
                    <result column="createtime" property="createtime"/>
                    <result column="note" property="note"/>

                    <!--              -->
                    <!-- association :                property:              Orders      -->
                    <association property="user" javaType="com.demo.po.User">
                        <!-- id:            column:             JavaType:   user      -->
                        <id column="user_id" javaType="id"/>
                        <result column="username" property="username"/>
                        <result column="sex" property="sex"/>
                        <result column="address" property="address"/> 
                    </association>
                </resultMap>

            1.1.3.4.2 statement    
                <!--             ,  resultmap -- > <select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap"> SELECT orders.*, USER.username, USER.sex, USER.address FROM orders, USER WHERE orders.user_id=user.id </select> 1.1.1.3.5 mapper.java //              resultMap public List<Orders> findOrdersUserResultMap() throws Exception; 1.1.3.6   @test public void testFindOrdersUserResultMap() throws Exception{ SqlSession sqlSession = sqlSessionFactory.openSession(); //       OrdersMapperCustom orderMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class) //  mapper    List.out.println(list); sqlSession.close; } 1.1.4 resultType resultMap          resultType:  resulType      ,  pojo          ,           ,      。                  resultType. resultMap:      resultMap,      ,             ,  resultMap           pojo    。 resultMap        ,resultType        。 1.2       1.2.1               。 1.2.2 sql         :           :                         。 SELECT order.*, USER.username, USER.sex, USER.address, orderdetall.id orderdetall_id, orderdetall.items_di, orderdetall.items_num, orderdetall.order_id FROM orders, USER,orderdetall WHERE order.user_id = user.id AND orderdetall.order_id = order.id 1.2.3     resultType           pojo ,          。   :  orders          。  orders.java     List<orderDetall>orderDetalls  。            orders ,             orders  orderDetails   。     orders       (orders     )   orders  orderDetalls                。 1.2.4  orders   list       public class Orders{ private Integer id; private Integer userId; private String number; private Date createtime; private String note; //     private User user; //     private List<Orderdetail> orderdetails; } 1.2.5 mapper.xml <!--                ,  resultmap -->
        <select id = "findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">
        SELECT
            order.*,
            USER.username,
            USER.sex,
            USER.address,
            orderdetall.id orderdetall_id,
            orderdetall.items_di,
            orderdetall.items_num,
            orderdetall.order_id
        FROM
            orders,
            USER,orderdetall
        WHERE order.user_id = user.id AND orderdetall.order_id = order.id
        </select>

        1.2.6 resultMap    

        <!--         resultMap   extends  ,                  -->
        <resultMap type="com.demo.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">
            <!--      -->
            <!--      --> 
            <!--   extends  ,                 (   158 176   ) -->


            <!--                    ,   collection     collection:                   property:             com.demo.po.Orders     ofType:     lsit     pojo     -->
            <collection property = "orderdetalls" ofType="com.demo.po.Orderdetail">
                <!-- id:          property:              com.demo.po.Orderdetail      -->
                <id colum="orderdetail_id" property="id"/>
                <result colum="items_id" property="itemsId"/>
                <result colum="items_num" property="itemsNum"/>
                <result colum="orders_id" property="ordersId"/>

            </collection>
            </resultMap>

        1.2.7 mapper.java
        //    (    )     
        public List<Orders> findOrdersAndOrderDetailResultMap()throws Exception;
        1.2.8   
        @Test 
        public void testfindOrdersAndOrderDetailResultMap()throws Exception{
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //      
            OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class)
            //  mapper   
            List<orders> list = ordersMapperCustom.findOrdersAndOrderDetailResultMap();
            system.out.println(list);
            sqlSession.close;
        }

        1.2.9      
        mybatis   resultMap  collection                list     。
            resultType  :
                    orders  orderdetails ,      ,        ,      ,       orderdetails 。

    1.3      
        1.3.1  
                           。
        1.3.2 sql   
                 :   
               :             ,             。     :orders、orderdetail、items

        SELECT
            order.*,
            USER.username,
            USER.sex,
            USER.address,
            orderdetall.id orderdetall_id,
            orderdetall.items_di,
            orderdetall.items_num,
            orderdetall.order_id,
            items.name items_name,
            items.detail items_detail,
            items.price items_price
        FROM
            orders,
            USER,
            orderdetall,
            items
        WHERE order.user_id = user.id AND orderdetall.order_id = order.id AND orderdetail.items_id = items.id

        1.3.3     

                user 。
         user           List<Orders>orderslist,           orderlist
         orders           List<OrderDetail>orderdetails,         orderdetails
         OrderDetail   items  ,              items



        1.3.4 mapper.xml

        <!--             ,  resultmap -->
        <select id="findUserAndItemsResultMap" resultMap="UserAndItemsResultMap">
            SELECT
                order.*,
                USER.username,
                USER.sex,
                USER.address,
                orderdetall.id orderdetall_id,
                orderdetall.items_di,
                orderdetall.items_num,
                orderdetall.order_id,
                items.name items_name,
                items.detail items_detail,
                items.price items_price
            FROM
                orders,
                USER,
                orderdetall,
                items
            WHERE order.user_id = user.id AND orderdetall.order_id = order.id AND orderdetail.items_id = items.id
        </select>


        1.3.5 resultMap  (  )
            <!--            -->
            <resultMap type="com.demo.po.User" id="UserAndItemsResultMap">
                <!--      -->
                <id column="user_id" property="id"/>
                <result column="username" property="username"/>
                <result column="sex" property="sex"/>
                <result column="address" property="address"/>

                <!--                ,  collection   -->
                <collection property="ordersList" ofType="com.demo.po.Orders">
                    <id column="id" property="id"/>
                    <result cloumn="user_id" property="user_id"/>
                    <result cloumn="number" property="number"/>
                    <result cloumn="createtime" property="createtime"/>
                    <result cloumn="note" property="note"/>

                    <!--                 -- > <collection property="ordersList" ofType="com.demo.po.Orders"> <id colum="orderdetail_id" property="id"/> <result colum="items_id" property="itemsId"/> <result colum="items_num" property="itemsNum"/> <result colum="orders_id" property="ordersId"/> <!--                   -->
                        <association property="items" javaType="com.demo.po.Items">
                            <id column="items_id" property="id"/>
                            <result cloumn="items_id" property="id"/>
                            <result cloumn="items_name" property="name"/>
                            <result cloumn="items_detail" property="detail"/>
                            <result cloumn="items_price" property="price"/>

                        </association>

                    </collection>

                </collection>



            </resultMap>




        1.3.6 mapper.java  (  )
        //          
        public List<User> findUserAndItemsResultMap()throws Exception;

        1.3.7   
        @Test
        public void testfindUserAndItemsResultMap()throws Exception{
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //      
            OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class)
            //  mapper   
            List<User> list = ordersMapperCustom.findUserAndItemsResultMap();
            system.out.println(list);
            sqlSession.close;
        }

        1.3.8      

          :                (     、    、      、      、      )

                  resultType               pojo ,            。

                  ,    :
                   ,              。
          1:
                :    、    、    、    、    (  )
                       ,          
              resultType          pojo  。
          2:
                :    、    、      、    (         )
              resultMap             user   。

          :
          resultMap                 ,         list     list。

    1.4 resultMap   :
        resultType:
          :
                   sql  pojo         pojo 。
          :
                       ,          ,             ,
              ,     resultType         pojo ,       list(list  pojo)  。

        resultMap:
              association collection             (             )。

            association:
              :
                            pojo   。
              :
                            association               pojo   ,
                  :           。
                  resultType          pojo   pojo   ,                 
                resultType  resultMap。
            collection:
              :
                            list   。
              :
                                collection        list   ,  :
                                 ,   collection        list ,
                               list   ,                 
                    。
                        resultType          list   。

    1.5    
        1.5.1        
        resultMap        (  association、collection     、     ),association、collection  
              。
          :
                        。               ,                   。
                          。

            :      、           ,         ,                   。

        1.5.2   association      
            1.5.2.1   
                        。

            1.5.2.2 mapper.xml
                  mapper      statement。
                1、       
                SELECT * FROM orders
                      statement   association     (  )   statement(        )

                <!--           ,           -->
                <select id="findOrdersUserLazyLoading" resultMap="OrdersUserLazyLoading">
                    SELECT * FROM orders
                </select>

                2、      
                                 user_id         。
                      UserMapper.xml  findUserByid
                    <select id="findUserById" parameterType="int" resultType="user">
                        SELECT * FROM USER WHERE id = #{value}
                    </select>
                  :      findOrdersUserLazyLoading,               findUserById,  
                    resultMap              。

            1.5.2.3     resultMap

              association  select          statement id。

            <!--      resultMap -->
            <resultMap type="com.demo.po.Orders" id="findOrdersUserLazyLoading">
                <!--             -->
                <id column="id" property="id"/>
                <result cloumn="user_id" property="user_id"/>
                <result cloumn="number" property="number"/>
                <result cloumn="createtime" property="createtime"/>
                <result cloumn="note" property="note"/>
                <!--               select:           statement id(   user_id       statement)    userMapper.xml findUserById      id(user_id)       ,    findUserById   mapper      namespace column:               , user_id      sql   : SELECT orders.*, (SELECT username FROM USER WHERE orders.user_id = user.id)username, (SELECT sex FROM USER WHERE orders.user_id = user.id)sex FROM orders -->
                <association property="user" javaType="com.demo.po.User" select="com.demo.mybatis.mapper.UserMapper.findUserById" cloumn="user.id">
                <!--               -->
                </association>

            </resultMap>

            <!--           ,           -->
            <select id="findOrdersUserLazyLoading" resultMap="OrdersUserLazyLoading">
                SELECT * FROM orders
            </select>


            1.5.2.4 mapper.java(  )
            //          ,         
            public List<Orders> findOrdersUserLazyLoading()throws Exception;

            1.5.2.5   
                :
            1、    mapper  (findOrdersUserLazyLoading),     com.demo.mybatis.mapper.OrdersMapperCustom  findOrdersUserLazyLoading   orders  (  )。

            2、               List<Orders>,     Orders  getUser   ,        。

            3、    ,   UserMapper.xml findUserById          。

            1.5.2.6       

             mybatis         :
            lazyLoadingEnable、aggressiveLazyLoading

                                                               

            lazyLoadingEnable           。       true        
                                'false',                        false
                                                        false

            aggressiveLazyLoading    ’true‘   ,   true
                                              。         true
                                  ,              false

            SqlMapConfig.xml

            <!--       ,       -->
            <settings>
                <!--           -->
                <setting name = "lazyLoadingEnable" value="true"/>
                <!--                  -->
                <setting name = "aggressiveLazyLoading" value="false"/>
            </setting>

            1.5.2.7     
            OrdersMapperCustomTest.java
            //          ,          
            @test
            public void testFindOrdersUserLazyLoading() throws Exception{

                SqlSession sqlSession = sqlSessionFactory.openSession();
                //      
                OrdersMapperCustom orderMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class)

                //      (  )
                List<Orders> list = ordersMapperCustom.findOrdersUserLazyLoading();

                //         
                for(Orders orders:list)
                    //  getUser()       ,        
                    User user = orders.getUser();
                    System.out.println(user);

            }
            1.5.2.8       
               mybatis   association collection        ,        ?

                  :
                mapper  :
            1、      
            2、    id      
                :
                   mapper  ,        
                (service),        mapper         。

              :
                     ,       sql(    ,        ),               。
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————