當前位置:首頁 » 編程語言 » sql查詢的值映射
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql查詢的值映射

發布時間: 2022-05-07 16:31:45

1. 如何高效地將sql數據映射到NoSQL存儲系統中

NoSQL資料庫 ——FoundationDB的鍵-值存儲系統
FoundationDB是一個分布式的鍵-值存儲系統,支持全局ACID事務操作,並且性能出眾。在安裝系統時,可以指定數據分發的級別。數據分發為容錯性提供了支持:當某個伺服器或網路的某部分產生故障時,資料庫仍然可以正常操作,你的應用也不會受到影響。
鍵-值與SQL架構
我們開發的這套架構能夠在鍵-值存儲系統上支持多個層,每個層都能夠在FoundationDB的基礎上提供一套不同的數據模型,例如SQL資料庫、文檔資料庫或圖形資料庫。許多使用者也自行創建了自定義的層。
下圖中列出架構中的了關鍵部分。處於最底層的是FoundationDB集群,無論集群的實際大小如何,對它的操作與一個單獨的邏輯資料庫並沒有分別。SQL層則以一種無狀態的中間層方式運行在鍵-值存儲系統之上。這一層通過SQL與應用程序進行通信,並使用FoundationDB的客戶端API與鍵-值存儲系統進行通信。由於SQL層是無狀態的,因此可以並行地運行任意數據的SQL層。

2. mybatis的sql查詢返回數據類型有哪些

在MyBatis進行查詢映射時,其實查詢出來的每一個屬性都是放在一個對應的Map裡面的,其中鍵是屬性名,值則是其對應的值。

3.1 當提供的返回類型屬性是resultType時,MyBatis會將Map裡面的鍵值對取出賦給resultType所指定的對象對應的屬性。所以其實MyBatis的每一個查詢映射的返回類型都是ResultMap,只是當提供的返回類型屬性是resultType的時
候,MyBatis對自動的給把對應的值賦給resultType所指定對象的屬性。

3. MyBatis sql映射文件疑問

其實沒有什麼區別,只不過是取值的方式不一樣罷了,
<resultMap id="wpResult" class="wp">

</resultMap>
配了一次就可以反復用,
Alias 需要在查詢語句里一個一個的as,你不覺得麻煩也可以用。
Alias最大的作用是聯表查詢的時候返回多個相同ID的時候可以改下名。不致於沖突報錯

4. 請問用SQL中,如何通過查詢一個值得存在,並且返回該值對應得另外一個值

SELECT NAME FROM 表名 WHERE 學號=110

5. 一對一高級映射 插入 的 sql語句怎樣寫

查詢語句是 MyBatis 中最常用的元素之一,本文涉及mybatis的單表查詢操作,關聯表有關的查詢會後續補充。

巧婦難為無米之炊,要想從資料庫中表中取出數據並轉化為javaBean,所以,我們要先准備javabean以及與其對應的數據表。

javaBean:

public class President {

private int id;
private String name;

@Override
public String toString() {
return "President [id=" + id + ", name=" + name + "]";
}
//get set 方法.....
}
創建兩個對應的資料庫表,並插入兩條數據:

create table president1(
p_id int not null auto_increment primary key,
p_name varchar(50) not null
);

insert into president1(p_name) values('lily'),('Tom');

create table president2(
id int not null auto_increment primary key,
name varchar(50) not null
);
insert into president2(name) values('lily'),('Tom');
創建兩個資料庫是為了測試兩個不同的查詢狀況,
資料庫欄位名與實體類屬性名相同

從sql表可以看出president2的欄位名與javabean:President的屬性名完全相同,這種情況下mybatis的select操作非常簡單:

<!-- 從表 president2中查詢-->
<select id="getPreByIdPresident2" parameterType="int" resultType="President">
select * from president2 where id=#{id}
</select>

此時mybatis運用反射機制會將查詢返回的結果(id,name)封裝成President對象。

如果從表president1中查詢,同樣採用上面的sql語句

<!-- 從表 president1中查詢-->
<select id="getPreByIdPresident1" parameterType="int" resultType="President">
<span style="white-space:pre"> </span>President p1 = session.selectOne(statement+"getPreByIdPresident1", 1);
<span style="white-space:pre"> </span>System.out.println("表president1中查詢"+p1);
</select>

此時如果用getPreByIdPresident1進行查詢,返回的結果會是null,我們將上面的sql語句在mysql中執行下:

有結果返回,但是返回的欄位名為(p_id,p_name)這種結果mybatis在解析時無法與President類對應。多數情況下實體類屬性名與資料庫表的欄位名都會有差異,這種情況如果mybatis不能處理也就太low了。

資料庫欄位名與實體類屬性名不相同
mybatis針對該種情況有兩種解決方法,但是歸根到底都是同一種實現。

Method1:定義一個ResultMap將資料庫欄位名與實體類屬性名做個映射

我們欲從表president1中查詢數據,此時的mapper配置如下:

<resultMap type="President" id="getFromPresident2">
<!-- 主鍵必須用id標簽映射,其他的用非集合用result映射 集合類用collection映射 -->
<!-- column為資料庫欄位名,property為實體類屬性名 -->
<id column="p_id" property="id" />
<result column="p_name" property="name" />
</resultMap>
<select id="getPreByIdPresident1Method1" resultMap="getFromPresident2">
select * from president1 where p_id=#{id}
</select>

首先定義了一個resultMap,將資料庫表的欄位名與實體類屬性名做了一一對應,其中type為實體類(此處運用的類別名),id為了在select標簽中引用映射結果。

在select標簽中並沒有用resultType屬性,而使用了resultMap,即為上面定義的resultMap,mybatis會根據resultMap中的映射關系去構造President

Method1:直接在sql語句中使用別名

<!-- 從表 president1中查詢 -->
<select id="getPreByIdPresident1Method2" resultType="President">
select p_id id,p_name name from president1 where p_id=#{id}
</select>

這種方法會查到實際的數據,這種方法與欄位名和屬性名相同都是基於相同的原理:MyBatis 會在幕後自動創建一個 ResultMap,基於屬性名來映射列到JavaBean 的屬性上。即mybatis底層都是通過創建ResultMap來進行關系的映射,與method1原理相同。。

6. sql返回值要和resulttype一一對應嗎

MyBatis在查詢時,返回類型可以用resultType,也可以用resultMap。
resultType 直接表示返回類型 ,而resultMap需要配置對應關系
resultType跟resultMap 不能同時存在 。
MyBatis在進行查詢映射時,查詢出的每個屬性,其實都是放在一個Map里,其中鍵是資料庫的欄位名,值是其查詢出的數據。
①當返回類型是resultType時,MyBatis會將Map裡面的鍵值對取出來,賦給resultType所指定的對象對應的屬性。(要保證 結果集的列名與java對象的屬性名 完全相同)
但是有時候,資料庫的欄位名和對象的屬性名 並不一致,這種情況下,使用 resultType是不能匹配成功的,比如:
資料庫欄位 user_id 和實體類User中的userId是不能匹配的。
這種情況下,就需要 ResultMap
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16









select u.user_id, u.user_name, u.password, u.status, u.del_flag, u.create_time from user u



此時 resultMap="userMap"是一個外部resultMap的id,表示將該查詢語句的結果 映射到 userMap上。
這種情況無需關注 實體類的屬性名和資料庫的列名是否一致,因此非常的靈活,功能也更加強大
總結
resultType
基本映射 :查詢出來的 列名 和實體類中的 屬性名 一致,該列才可以映射成功。
resultMap
高級映射 :定義一個資料庫 列名 和實體類中 屬性名 間的映射關系。
cs

7. 請教一個問題,myql原生sql查詢,有一個date類型的,如何映射到實體Localdate 欄位

java中和資料庫Date類型交互的是java.sql.Date
java.time.LocalDate沒法直接和java.sql.Date進行轉換,不過可以通過
java.time.LocalDate -> java.util.Date -> java.sql.Date這個方式進行轉換

8. sql資料庫查詢中,A表欄位能否映射其它表的信息

應該可以,只要這兩張表有相同的可以連接的欄位。通過左連接,右連接,內連接等其他連接,根據你的個人需要了。

9. sql中如何通過一個值查找對應的另一個值,sql語句寫法

第一種寫法:select a.kdID from kdinfo a, order b where a.OrdID = b.OrdID and b.OrdID = '你想查的訂單號'
第二種寫法:select a.kdID from kdinfo a inner join order b on a.OrdID = b.OrdID where b.OrdID = '你想查的訂單號'