数据库学习小结和mybatis的使用小结

本文介绍数据库查询语句相关知识,包括通用语法,内连接(隐式、显示)、外连接(左、右)查询,以及不同结果的子查询。还提及MyBatis中大于和小于号的转义写法,如parameterType、resultMap等属性,以及#{}和${}传参的区别和使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库查询语句的通用语法

SELECT 
	字段列表
FROM
	表名列表
WHERE
	条件列表
GROUP BY
	分组字段
HAVING
	分组之后的条件
ORDER BY
	排序
LIMIT
	分页限定

数据库内连接查询

隐式内连接查询

SELECT 
 t1.name,t1.gender,t2.name
FROM
 emp t1,dept t2
WHERE
 t1.dept_id = t2.id

在这里先写FROM内容,然后再写SELECT里面的内容,先写别名,
数据库不区分大小写,所以A和a是一样的,另外建议关键字用大写,变量名用小写

显示内连接

SELECT 字段列表 FROM 表名1 INNER JOIN  表名2 ON 条件
或者
SELECT 字段列表 FROM 表名1 JOIN  表名2 ON 条件

数据库外连接查询

左外连接查询

SELECT 字段列表 FROM 表1 LEFT JOIN 表2 ON 条件

查询的是左表所有数据以及其交集部分,即表1的所有部分和表1和表2的交集部分

右外连接

SELECT 字段列表 FROM 表1 RIGHT JOIN 表2 ON 条件

查询的是右表所有数据以及其交集部分,即表2的所有部分和表1和表2的交集部分

子查询

子查询的结果是单行单列

  • 子查询可以作为查询条件,使用运算符去判断。运算符: > >= < <= =

子查询的结果是单行多列

  • 子查询可以作为查询条件,使用运算符去判断。运算符: IN 查询和的情况用的是OR,并不是AND,要注意这一点

子查询的结果是多行多列

* 这种情况下,子查询就是一个表了
* 子查询可以作为一张虚拟表,开始表的查询

LISTAGG(列名,’ 分割符号’)
将指定列名的多行查询结果,用 指定的分割符号 合并成一行显示

MyBatis中大于和小于号的转义写法

< : &lt;
<= : &lt;=
> : &gt;
>= : &gt;=
  1. parameterType
    将要传入语句的参数的完全限定类名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器推断出具体传入语句的参数,默认值为未设置(unset)。

  2. resultMap
    外部 resultMap 的命名引用。结果集的映射是 MyBatis 最强大的特性,如果你对其理解透彻,许多复杂映射的情形都能迎刃而解。可以使用 resultMap 或 resultType,但不能同时使用。

  3. property
    映射到列结果的字段或属性。如果用来匹配的 JavaBean 存在给定名字的属性,那么它将会被使用。否则 MyBatis 将会寻找给定名称的字段。 无论是哪一种情形,你都可以使用通常的点式分隔形式进行复杂属性导航。 比如,你可以这样映射一些简单的东西:“username”,或者映射到一些复杂的东西上:“address.street.number”。

  4. column
    数据库中的列名,或者是列的别名。一般情况下,这和传递给 resultSet.getString(columnName) 方法的参数一样。

  5. bind
    元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文

  6. #{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
    使用#传入参数是,sql语句解析是会加上"",比如 select * from table where name = #{name} ,传入的name为小李,那么最后打印出来的就是
    select * from table where name = ‘小李’,就是会当成字符串来解析,这样相比于KaTeX parse error: Expected 'EOF', got '#' at position 13: 的好处是比较明显对的吧,#̲{}传参能防止sql注入,如果…{},这种方式 那么是会报错的。
    另外一种场景是,如果你要做动态的排序,比如 order by column,这个时候务必要用${},因为如果你使用了#{},那么打印出来的将会是select * from table order by ‘name‘ ,这样是没用。

即:能用#就最好不用$.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值