国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

通過項(xiàng)目逐步深入了解Mybatis<三>

khlbat / 718人閱讀

摘要:場(chǎng)合常見一些明細(xì)記錄的展示,比如用戶購買商品明細(xì),將關(guān)聯(lián)查詢信息全部展示在頁面時(shí),此時(shí)可直接使用將每一條記錄映射到中,在前端頁面遍歷中是即可。作用將關(guān)聯(lián)查詢信息映射到一個(gè)對(duì)象中。

相關(guān)閱讀:

1、通過項(xiàng)目逐步深入了解Mybatis<一>

2、 通過項(xiàng)目逐步深入了解Mybatis<二>

本項(xiàng)目所有代碼及文檔都托管在 Github地址:https://github.com/zhisheng17/mybatis

Mybatis 高級(jí)知識(shí)

安排:對(duì)訂單商品數(shù)據(jù)模型進(jìn)行分析

訂單商品數(shù)據(jù)模型

數(shù)據(jù)模型分析思路:

1、每張表記錄的數(shù)據(jù)內(nèi)容(分模塊對(duì)每張表記錄的內(nèi)容進(jìn)行熟悉,相當(dāng)于學(xué)習(xí)系統(tǒng)需求的過程)

2、每張表重要的的字段設(shè)置(非空字段、外鍵字段)

3、數(shù)據(jù)庫級(jí)別表與表之間的關(guān)系(外鍵關(guān)系)

4、表與表業(yè)務(wù)之間的關(guān)系(要建立在每個(gè)業(yè)務(wù)意義的基礎(chǔ)上去分析)

數(shù)據(jù)模型分析模型

用戶表 user:記錄購買商品的用戶信息

訂單表 order:記錄用戶所創(chuàng)建的訂單(購買商品的訂單)

訂單明細(xì)表 orderdetail:(記錄了訂單的詳細(xì)信息即購買商品的信息)

商品表 items:記錄了商品信息

表與表業(yè)務(wù)之間的關(guān)系

在分析表與表之間的業(yè)務(wù)關(guān)系時(shí)需要建立在某個(gè)業(yè)務(wù)意義基礎(chǔ)上去分析。

先分析數(shù)據(jù)級(jí)別之間有關(guān)系的表之間的業(yè)務(wù)關(guān)系:

1、usre和orders

user ---> orders:一個(gè)用戶可以創(chuàng)建多個(gè)訂單,一對(duì)多

orders ---> user:一個(gè)訂單只由一個(gè)用戶創(chuàng)建,一對(duì)一

2、 orders和orderdetail

orders ---> orderdetail:一個(gè)訂單可以包括 多個(gè)訂單明細(xì),因?yàn)橐粋€(gè)訂單可以購買多個(gè)商品,每個(gè)商品的購買信息在orderdetail記錄,一對(duì)多關(guān)系

orderdetail ---> orders:一個(gè)訂單明細(xì)只能包括在一個(gè)訂單中,一對(duì)一

3、 orderdetail 和 itesm

orderdetail ---> itesms:一個(gè)訂單明細(xì)只對(duì)應(yīng)一個(gè)商品信息,一對(duì)一

items ---> orderdetail:一個(gè)商品可以包括在多個(gè)訂單明細(xì) ,一對(duì)多

再分析數(shù)據(jù)庫級(jí)別沒有關(guān)系的表之間是否有業(yè)務(wù)關(guān)系:

4、 orders 和 items

orders 和 items 之間可以通過 orderdetail 表建立 關(guān)系。

一對(duì)一查詢 需求:

查詢訂單信息,關(guān)聯(lián)查詢創(chuàng)建訂單的用戶信息

使用 resultType

sql 語句

確定查詢的主表:訂單表

確定查詢的關(guān)聯(lián)表:用戶表

關(guān)聯(lián)查詢使用內(nèi)鏈接?還是外鏈接?

由于orders表中有一個(gè)外鍵(user_id),通過外鍵關(guān)聯(lián)查詢用戶表只能查詢出一條記錄,可以使用內(nèi)鏈接。

SELECT orders.*, USER.username, USER.sex, USER.address FROM orders, USER WHERE orders.user_id = user.id

創(chuàng)建 pojo

Orders.java

public class Orders {
    private Integer id;
    private Integer userId;
    private String number;
    private Date createtime;
    private String note;
    //用戶信息
    private User user;
    //訂單明細(xì)
    private List orderdetails;
    //getter and setter
}

OrderCustom.java

//通過此類映射訂單和用戶查詢的結(jié)果,讓此類繼承包括 字段較多的pojo類
public class OrdersCustom extends Orders{
  //添加用戶屬性
  /*USER.username,
    USER.sex,
    USER.address */
  private String username;
  private String sex;
  private String address;
  //getter and setter 
}

映射文件

OrdersMapperCustom.xml


    

Mapper 文件

OrdersMapperCustom.java

public interface OrdersMapperCustom
{
    public OrdersCustom findOrdersUser() throws Exception;
}

測(cè)試代碼(記得在 SqlConfig.xml中添加載 OrdersMapperCustom.xml 文件)

 @Test
public void testFindOrdersUser() throws Exception
{
  SqlSession sqlSession = sqlSessionFactory.openSession();
  //創(chuàng)建OrdersMapperCustom對(duì)象,mybatis自動(dòng)生成代理對(duì)象
  OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
  //調(diào)用OrdersMapperCustom的方法
   List list = ordersMapperCustom.findOrdersUser();
  System.out.println(list);
  sqlSession.close();
}

測(cè)試結(jié)果

?

?

使用 resultMap

sql 語句(和上面的一致)

使用 resultMap 映射思路

使用 resultMap 將查詢結(jié)果中的訂單信息映射到 Orders 對(duì)象中,在 orders 類中添加 User 屬性,將關(guān)聯(lián)查詢出來的用戶信息映射到 orders 對(duì)象中的 user 屬性中。

 //用戶信息
 private User user;

映射文件

OrdersMapperCustom.xml

先定義 resultMap


    
        
        
        
        
        
        
        

        
        
            
            
            
            
            
            
        
    

    

Mapper 文件

public List findOrdersUserResultMap() throws Exception;

測(cè)試代碼

@Test
 public void testFindOrdersUserResultMap() throws Exception
 {
     SqlSession sqlSession = sqlSessionFactory.openSession();
     //創(chuàng)建OrdersMapperCustom對(duì)象,mybatis自動(dòng)生成代理對(duì)象
     OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
     //調(diào)用OrdersMapperCustom的方法
     List list = ordersMapperCustom.findOrdersUserResultMap();
     System.out.println(list);
     sqlSession.close();
 }

測(cè)試結(jié)果

使用 resultType 和 resultMap 一對(duì)一查詢小結(jié)

resultType:使用resultType實(shí)現(xiàn)較為簡(jiǎn)單,如果pojo中沒有包括查詢出來的列名,需要增加列名對(duì)應(yīng)的屬性,即可完成映射。如果沒有查詢結(jié)果的特殊要求建議使用resultType。

resultMap:需要多帶帶定義resultMap,實(shí)現(xiàn)有點(diǎn)麻煩,如果對(duì)查詢結(jié)果有特殊的要求,使用resultMap可以完成將關(guān)聯(lián)查詢映射pojo的屬性中。resultMap可以實(shí)現(xiàn)延遲加載,resultType無法實(shí)現(xiàn)延遲加載。

一對(duì)多查詢

需求:查詢訂單及訂單明細(xì)信息

SQL語句

確定主查詢表:訂單表

確定關(guān)聯(lián)查詢表:訂單明細(xì)表

在一對(duì)一查詢基礎(chǔ)上添加訂單明細(xì)表關(guān)聯(lián)即可。

SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id FROM orders, USER,
orderdetail WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id

分析:

使用 resultType 將上邊的查詢結(jié)果映射到 pojo 中,訂單信息的就是重復(fù)。

要求:

對(duì) orders 映射不能出現(xiàn)重復(fù)記錄。

在 orders.java 類中添加 List orderDetails 屬性。

最終會(huì)將訂單信息映射到 orders 中,訂單所對(duì)應(yīng)的訂單明細(xì)映射到 orders 中的 orderDetails 屬性中。

映射成的 orders 記錄數(shù)為兩條(orders信息不重復(fù))

每個(gè) orders 中的 orderDetails 屬性存儲(chǔ)了該訂單所對(duì)應(yīng)的訂單明細(xì)。

映射文件

首先定義 resultMap


    
        
        
        
        
        
        
            
            
            
            
        
    
 
    

Mapper 文件

public List findOrdersAndOrderDetailResultMap() throws Exception;

測(cè)試文件

@Test
    public void testFindOrdersAndOrderDetailResultMap() throws Exception
    {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //創(chuàng)建OrdersMapperCustom對(duì)象,mybatis自動(dòng)生成代理對(duì)象
        OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
        //調(diào)用OrdersMapperCustom的方法
        List list = ordersMapperCustom.findOrdersAndOrderDetailResultMap();
        System.out.println(list);
        sqlSession.close();
    }

測(cè)試結(jié)果

總結(jié):

mybatis使用resultMap的collection對(duì)關(guān)聯(lián)查詢的多條記錄映射到一個(gè)list集合屬性中。

使用resultType實(shí)現(xiàn):將訂單明細(xì)映射到orders中的orderdetails中,需要自己處理,使用雙重循環(huán)遍歷,去掉重復(fù)記錄,將訂單明細(xì)放在orderdetails中。

多對(duì)多查詢

需求:查詢用戶及用戶購買商品信息。

SQL語句

查詢主表是:用戶表

關(guān)聯(lián)表:由于用戶和商品沒有直接關(guān)聯(lián),通過訂單和訂單明細(xì)進(jìn)行關(guān)聯(lián),所以關(guān)聯(lián)表:

orders、orderdetail、items

SELECT   orders.*, USER.username, USER.sex, USER.address,  orderdetail.id orderdetail_id,
orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id, items.name items_name,
items.detail items_detail, items.price items_price FROM orders, USER, orderdetail, items WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id AND orderdetail.items_id = items.id

映射思路

將用戶信息映射到 user 中。
在 user 類中添加訂單列表屬性List orderslist,將用戶創(chuàng)建的訂單映射到orderslist
在Orders中添加訂單明細(xì)列表屬性Listorderdetials,將訂單的明細(xì)映射到orderdetials
在OrderDetail中添加Items屬性,將訂單明細(xì)所對(duì)應(yīng)的商品映射到Items

定義 resultMap:

    
        
        
        
        
        
        

        
        
            
            
            
            
            

            
            

                
                
                
                

                
                
                    
                    
                    
                    
                    
                    
                 
            
        
    
映射文件

    
Mapper 文件
public List findUserAndItemsResultMap() throws  Exception;
測(cè)試文件
@Test
    public void testFindUserAndItemsResultMap() throws Exception
    {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //創(chuàng)建OrdersMapperCustom對(duì)象,mybatis自動(dòng)生成代理對(duì)象
        OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
        //調(diào)用OrdersMapperCustom的方法
        List list = ordersMapperCustom.findUserAndItemsResultMap();
        System.out.println(list);
        sqlSession.close();
    }
測(cè)試:

我去,竟然報(bào)錯(cuò)了,但是不要怕,通過查看報(bào)錯(cuò)信息可以知道我忘記在 User.java 中加入 orderlist 屬性了,接下來我加上去,并加上 getter 和 setter 方法。

//用戶創(chuàng)建的訂單列表
    private List ordersList;
    public List getOrdersList() {
        return ordersList;
    }
    public void setOrdersList(List ordersList) {
        this.ordersList = ordersList;
    }

再次測(cè)試就能成功了。

多對(duì)多查詢總結(jié)

將查詢用戶購買的商品信息明細(xì)清單,(用戶名、用戶地址、購買商品名稱、購買商品時(shí)間、購買商品數(shù)量)

針對(duì)上邊的需求就使用resultType將查詢到的記錄映射到一個(gè)擴(kuò)展的pojo中,很簡(jiǎn)單實(shí)現(xiàn)明細(xì)清單的功能。

一對(duì)多是多對(duì)多的特例,如下需求:

查詢用戶購買的商品信息,用戶和商品的關(guān)系是多對(duì)多關(guān)系。

需求1:

查詢字段:用戶賬號(hào)、用戶名稱、用戶性別、商品名稱、商品價(jià)格(最常見)

企業(yè)開發(fā)中常見明細(xì)列表,用戶購買商品明細(xì)列表,

使用resultType將上邊查詢列映射到pojo輸出。

需求2:

查詢字段:用戶賬號(hào)、用戶名稱、購買商品數(shù)量、商品明細(xì)(鼠標(biāo)移上顯示明細(xì))

使用resultMap將用戶購買的商品明細(xì)列表映射到user對(duì)象中。

總結(jié):

使用resultMap是針對(duì)那些對(duì)查詢結(jié)果映射有特殊要求的功能,,比如特殊要求映射成list中包括多個(gè)list。

ResultMap 總結(jié) resultType:

作用:

將查詢結(jié)果按照sql列名pojo屬性名一致性映射到pojo中。

場(chǎng)合:

常見一些明細(xì)記錄的展示,比如用戶購買商品明細(xì),將關(guān)聯(lián)查詢信息全部展示在頁面時(shí),此時(shí)可直接使用resultType將每一條記錄映射到pojo中,在前端頁面遍歷list(list中是pojo)即可。

resultMap:

使用association和collection完成一對(duì)一和一對(duì)多高級(jí)映射(對(duì)結(jié)果有特殊的映射要求)。

association:

作用:

將關(guān)聯(lián)查詢信息映射到一個(gè)pojo對(duì)象中。

場(chǎng)合:

為了方便查詢關(guān)聯(lián)信息可以使用association將關(guān)聯(lián)訂單信息映射為用戶對(duì)象的pojo屬性中,比如:查詢訂單及關(guān)聯(lián)用戶信息。
使用resultType無法將查詢結(jié)果映射到pojo對(duì)象的pojo屬性中,根據(jù)對(duì)結(jié)果集查詢遍歷的需要選擇使用resultType還是resultMap。

collection:

作用:

將關(guān)聯(lián)查詢信息映射到一個(gè)list集合中。

場(chǎng)合:

為了方便查詢遍歷關(guān)聯(lián)信息可以使用collection將關(guān)聯(lián)信息映射到list集合中,比如:查詢用戶權(quán)限范圍模塊及模塊下的菜單,可使用collection將模塊映射到模塊list中,將菜單列表映射到模塊對(duì)象的菜單list屬性中,這樣的作的目的也是方便對(duì)查詢結(jié)果集進(jìn)行遍歷查詢。如果使用resultType無法將查詢結(jié)果映射到list集合中。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/66325.html

相關(guān)文章

  • 通過項(xiàng)目逐步深入了解Mybatis&lt;一&gt;

    摘要:解決方法使用數(shù)據(jù)庫連接池管理數(shù)據(jù)庫連接。向中設(shè)置參數(shù),對(duì)占位符號(hào)位置和設(shè)置參數(shù)值,硬編碼在代碼中,同樣也不利于系統(tǒng)的維護(hù)。從中遍歷結(jié)果集數(shù)據(jù)時(shí),存在硬編碼,將獲取表的字段進(jìn)行硬編碼,不利于系統(tǒng)維護(hù)。 Mybatis Mybatis 和 SpringMVC 通過訂單商品案例驅(qū)動(dòng) 官方中文地址:http://www.mybatis.org/mybati... 官方托管地址:https://...

    2bdenny 評(píng)論0 收藏0
  • 通過項(xiàng)目逐步深入了解Mybatis&lt;二&gt;

    摘要:的實(shí)例不能共享使用,它也是線程不安全的。因此最佳的范圍是請(qǐng)求或方法范圍定義局部變量使用。在中就不需要直接對(duì)數(shù)據(jù)庫的連接參數(shù)進(jìn)行硬編碼了。 轉(zhuǎn)載請(qǐng)務(wù)必注明出處,原創(chuàng)不易! 相關(guān)文章:通過項(xiàng)目逐步深入了解Mybatis 本項(xiàng)目全部代碼地址:Github-Mybatis Mybatis 解決 jdbc 編程的問題 1、 數(shù)據(jù)庫鏈接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費(fèi)從而影響系統(tǒng)性能,如果使用...

    BigTomato 評(píng)論0 收藏0
  • Java深入-框架技巧

    摘要:從使用到原理學(xué)習(xí)線程池關(guān)于線程池的使用,及原理分析分析角度新穎面向切面編程的基本用法基于注解的實(shí)現(xiàn)在軟件開發(fā)中,分散于應(yīng)用中多出的功能被稱為橫切關(guān)注點(diǎn)如事務(wù)安全緩存等。 Java 程序媛手把手教你設(shè)計(jì)模式中的撩妹神技 -- 上篇 遇一人白首,擇一城終老,是多么美好的人生境界,她和他歷經(jīng)風(fēng)雨慢慢變老,回首走過的點(diǎn)點(diǎn)滴滴,依然清楚的記得當(dāng)初愛情萌芽的模樣…… Java 進(jìn)階面試問題列表 -...

    chengtao1633 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<