成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

Mybatis【配置文件】就是這么簡(jiǎn)單

freewolf / 1276人閱讀

摘要:場(chǎng)合常見(jiàn)一些明細(xì)記錄的展示,將關(guān)聯(lián)查詢(xún)信息全部展示在頁(yè)面時(shí),此時(shí)可直接使用將每一條記錄映射到中,在前端頁(yè)面遍歷中是即可。如果查詢(xún)單表就可以滿足需求,一開(kāi)始先查詢(xún)單表,當(dāng)需要關(guān)聯(lián)信息時(shí),再關(guān)聯(lián)查詢(xún),當(dāng)需要關(guān)聯(lián)信息再查詢(xún)這個(gè)叫延遲加載。

配置文件和映射文件還有挺多的屬性我還沒(méi)有講的,現(xiàn)在就把它們一一補(bǔ)全

映射文件

在mapper.xml文件中配置很多的sql語(yǔ)句,執(zhí)行每個(gè)sql語(yǔ)句時(shí),封裝為MappedStatement對(duì)象,mapper.xml以statement為單位管理sql語(yǔ)句

Statement的實(shí)際位置就等于namespace+StatementId

占位符

在Mybatis中,有兩種占位符

#{}解析傳遞進(jìn)來(lái)的參數(shù)數(shù)據(jù)

${}對(duì)傳遞進(jìn)來(lái)的參數(shù)原樣拼接在SQL中

主鍵生成策略

如果我們?cè)贖ibernate中,當(dāng)我們插入數(shù)據(jù)的時(shí)候,我們是可以選擇是UUID策略的...

那么在Mybatis是怎么做的呢??

UUID
    
    
        
            select uuid()
        
        
        INSERT INTO USER(id,username,birthday,sex,address) VALUES(#{id},#{username},#{birthday},#{sex},#{address})
     
主鍵返回

如果我們一般插入數(shù)據(jù)的話,如果我們想要知道剛剛插入的數(shù)據(jù)的主鍵是多少,我們可以通過(guò)以下的方式來(lái)獲取

需求:

user對(duì)象插入到數(shù)據(jù)庫(kù)后,新記錄的主鍵要通過(guò)user對(duì)象返回,通過(guò)user獲取主鍵值。

解決思路:

通過(guò)LAST_INSERT_ID()獲取剛插入記錄的自增主鍵值,在insert語(yǔ)句執(zhí)行后,執(zhí)行select LAST_INSERT_ID()就可以獲取自增主鍵。

mysql:

    
        
            select LAST_INSERT_ID()
        
        INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address})
    

oracle:

實(shí)現(xiàn)思路:

先查詢(xún)序列得到主鍵,將主鍵設(shè)置到user對(duì)象中,將user對(duì)象插入數(shù)據(jù)庫(kù)。

    
    
        
            select 序列.nextval() from dual
        
        
        INSERT INTO USER(id,username,birthday,sex,address) VALUES( 序列.nextval(),#{username},#{birthday},#{sex},#{address})
     
resultMap

有的時(shí)候,我們看別的映射文件,可能看不到以下這么一段代碼:

    
         
          
          
          
          
     
     

因?yàn)椋?strong>如果我們的數(shù)據(jù)表的字段和JavaBean的屬性名稱(chēng)是相同時(shí),我們就不用上面那段代碼了。Mybatis會(huì)自動(dòng)幫我們把返回的結(jié)果進(jìn)行封裝成JavaBean

那當(dāng)我們數(shù)據(jù)表的字段和JavaBean的屬性名稱(chēng)不是相同時(shí),我們就需要使用resultMap,也就是上面那段代碼

當(dāng)然了,在正常情況下列名和JavaBean的屬性名一般都是不同的,因此還是需要resultMap的。

resultMap和resultType區(qū)別

resultType :指定輸出結(jié)果的類(lèi)型(pojo、簡(jiǎn)單類(lèi)型、hashmap..),將sql查詢(xún)結(jié)果映射為java對(duì)象 。

使用resultType注意:sql查詢(xún)的列名要和resultType指定pojo的屬性名相同,指定相同 屬性方可映射成功,如果sql查詢(xún)的列名要和resultType指定pojo的屬性名全部不相同,list中無(wú)法創(chuàng)建pojo對(duì)象的。

resultMap:將sql查詢(xún)結(jié)果映射為java對(duì)象。

如果sql查詢(xún)列名和最終要映射的pojo的屬性名不一致,使用resultMap將列名和pojo的屬性名做一個(gè)對(duì)應(yīng)關(guān)系 (列名和屬性名映射配置)

使用resultMap
    
         
          
          
          
          
     
     

resultType和resultMap用法總結(jié)

resultType:

作用:

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

場(chǎng)合:

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

resultMap:

使用association和collection完成一對(duì)一和一對(duì)多高級(jí)映射。

association:

作用:

將關(guān)聯(lián)查詢(xún)信息映射到一個(gè)pojo類(lèi)中。

場(chǎng)合:

為了方便獲取關(guān)聯(lián)信息可以使用association將關(guān)聯(lián)訂單映射為pojo,比如:查詢(xún)訂單及關(guān)聯(lián)用戶信息。

collection:

作用:

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

場(chǎng)合:

為了方便獲取關(guān)聯(lián)信息可以使用collection將關(guān)聯(lián)信息映射到list集合中,比如:查詢(xún)用戶權(quán)限范圍模塊和功能,可使用collection將模塊和功能列表映射到list中。

Collection在前面好像并沒(méi)有用過(guò),下面就看一下它的用法:

Order與OrderDetails關(guān)系


package cn.itcast.mybatis.po;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

public class Orders implements Serializable {
    private Integer id;

    private Integer userId;

    private String number;

    private Date createtime;

    private String note;
    
    //關(guān)聯(lián)用戶信息
    private User user;
    
    //訂單明細(xì)
    private List orderdetails;
   

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number == null ? null : number.trim();
    }

    public Date getCreatetime() {
        return createtime;
    }

    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note == null ? null : note.trim();
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public List getOrderdetails() {
        return orderdetails;
    }

    public void setOrderdetails(List orderdetails) {
        this.orderdetails = orderdetails;
    } 
    
}

SQL語(yǔ)句

     
     

resultMap

    
    
        
        
        
        
            
            
            
            
        
    
    

一般地使用resultMap會(huì)多一點(diǎn)。

Mybatis映射文件處理特殊字符

第一種方法:

用了轉(zhuǎn)義字符把>和<替換掉,然后就沒(méi)有問(wèn)題了。

SELECT * FROM test WHERE 1 = 1 AND start_date <= CURRENT_DATE AND end_date >= CURRENT_DATE

第二種方法:

配置文件 別名

typeAliases別名:

自定義別名:

    
    
        
        
        
        
        
    
Mapper加載
    
        
        
        
        
        
        
        
    
延遲加載

在進(jìn)行數(shù)據(jù)查詢(xún)時(shí),為了提高數(shù)據(jù)庫(kù)查詢(xún)性能,盡量使用單表查詢(xún),因?yàn)閱伪聿樵?xún)比多表關(guān)聯(lián)查詢(xún)速度要快。

如果查詢(xún)單表就可以滿足需求,一開(kāi)始先查詢(xún)單表,當(dāng)需要關(guān)聯(lián)信息時(shí),再關(guān)聯(lián)查詢(xún),當(dāng)需要關(guān)聯(lián)信息再查詢(xún)這個(gè)叫延遲加載。

在Mybatis中延遲加載就是在resultMap中配置具體的延遲加載..

在Mybatis的文件中配置全局延遲加載

    
    
        
            
        
        
    
延遲加載測(cè)試

當(dāng)需要用戶時(shí)調(diào)用 Orders類(lèi)中的getUser()方法執(zhí)行延遲加載 ,向數(shù)據(jù)庫(kù)發(fā)出sql。

由于是對(duì)User進(jìn)行延遲加載,那么我們只要查詢(xún)Orders相關(guān)的信息即可了

     
     

使用resultMap來(lái)配置延遲加載

    
    
        
        
        
        
        
        
        
        


        
        

    

總結(jié)

在程序中調(diào)用的SQL語(yǔ)句是由映射文件的命令空間+sql片段的id所組成的。它內(nèi)部會(huì)生成一個(gè)Statement對(duì)象的。

在使用別名的時(shí)候,可以指定包名,在使用總配置文件加載映射文件時(shí),也可以指定包名。

主鍵如果需要返回的話,使用selectKey 標(biāo)簽即可。UUID也可以返回。在Oracle的話,是使用序列來(lái)返回自動(dòng)增長(zhǎng)的主鍵的。

占位符有兩種,一種是解析傳遞進(jìn)來(lái)的參數(shù)數(shù)據(jù)、一種是原樣輸出傳遞進(jìn)來(lái)的數(shù)據(jù)。

如果文章有錯(cuò)的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章,想要獲取更多的Java資源的同學(xué),可以關(guān)注微信公眾號(hào):Java3y

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

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

相關(guān)文章

  • Java3y文章目錄導(dǎo)航

    摘要:前言由于寫(xiě)的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 前言 由于寫(xiě)的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時(shí)間才會(huì)更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號(hào):Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡(jiǎn)單 注解就這么簡(jiǎn)單 Druid數(shù)據(jù)庫(kù)連接池...

    KevinYan 評(píng)論0 收藏0
  • 移動(dòng)商城項(xiàng)目【總結(jié)】

    摘要:有必要建一個(gè)資源服務(wù)器存放靜態(tài)資源。一些用戶級(jí)別的數(shù)據(jù)輕量可以考慮存儲(chǔ)在中。存儲(chǔ)的是值,可以通過(guò)來(lái)對(duì)和對(duì)象之間的轉(zhuǎn)換如果我們的數(shù)據(jù)是在后臺(tái)傳過(guò)去或者轉(zhuǎn)換而成的,在前臺(tái)上并沒(méi)有做什么改變的話。 移動(dòng)商城項(xiàng)目總結(jié) 移動(dòng)商城項(xiàng)目是我第二個(gè)做得比較大的項(xiàng)目,該項(xiàng)目系統(tǒng)來(lái)源于傳智Java168期,十天的視頻課程(想要視頻的同學(xué)關(guān)注我的公眾號(hào)就可以直接獲取了) 通過(guò)這次的項(xiàng)目又再次開(kāi)闊了我的視野,...

    BlackHole1 評(píng)論0 收藏0
  • 教你手寫(xiě)Mybatis框架

    摘要:前言嗨,小伙伴們,這篇博文將帶大家手寫(xiě),讓大家對(duì)的核心原理以及工作流程有更加深刻的理解。模塊顧名思義,就是框架配置類(lèi),用于解析配置文件加載相關(guān)環(huán)境。配置模塊這里的對(duì)框架的配置使用了簡(jiǎn)單的,主要原因還是簡(jiǎn)單易懂然后節(jié)省時(shí)間。 前言 (????)??嗨,小伙伴們,這篇博文將帶大家手寫(xiě)mybatis,讓大家對(duì)mybaits的核心原理以及工作流程有更加深刻的理解。在上篇Spring-Mybat...

    antyiwei 評(píng)論0 收藏0
  • Mybatis學(xué)習(xí)筆記

    摘要:學(xué)習(xí)筆記有官方的中文開(kāi)發(fā)文檔并且針對(duì)使用者比較友好是一款優(yōu)秀的持久層框架,它支持定制化存儲(chǔ)過(guò)程以及高級(jí)映射。它只和配置有關(guān),存在的意義僅在于用來(lái)減少類(lèi)完全限定名的冗余,為了簡(jiǎn)化中的書(shū)寫(xiě)。 Mybatis學(xué)習(xí)筆記 mybatis有官方的中文開(kāi)發(fā)文檔并且針對(duì)使用者比較友好:http://www.mybatis.org/mybatis-3/zh/ MyBatis 是一款優(yōu)秀的持久層框架,它支...

    jsyzchen 評(píng)論0 收藏0
  • Spring Boot2(一):使用Spring Boot2集成Mybatis基礎(chǔ)搭建

    摘要:主要有兩種解決方案,一種是使用注解解決一切問(wèn)題,一種是簡(jiǎn)化后的老傳統(tǒng)。新建項(xiàng)目默認(rèn)為,直接改為,另外新增一個(gè)用戶不同環(huán)境使用不同的配置文件用。配置指定配置文件為配置開(kāi)啟駝峰命名轉(zhuǎn)換,如。 倉(cāng)庫(kù)地址:spring-boot-learning歡迎star、fork,給作者一些鼓勵(lì) 前言 Mybatis 初期使用比較麻煩,需要各種配置文件、實(shí)體類(lèi)、Dao 層映射關(guān)聯(lián)、還有一大推其它配置。my...

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

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

0條評(píng)論

閱讀需要支付1元查看
<