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

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

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中大于和小于号的转义写法

< : <
<= : <=
> : >
>= : >=
  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‘ ,这样是没用。

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

你可能感兴趣的:(Java学习历程)