当前位置:首页 » 编程语言 » 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 = '你想查的订单号'