Mybatis 动态SQL
动态SQL
随着用户的输入或外部条件的变化而变化的SQL语句,我们称为动态SQL。
12345678910111213141516171819202122232425262728293031323334<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.newboy.demo3.mapper.EmpMapper"> <sql id="commonSelete"> select * from emp </sql> <de ...
Mybatis XML映射文件
XML映射文件
规范
XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)。
XML映射文件的namespace属性为Mapper接口全限定名一致。
XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。
Mybatis约束配置网站
文件头约束配置
1234<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
示例文件1
1234567891011<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLI ...
Mybatis基本操作
删除
根据主键删除
mybatis参数占位符#{}
SQL语句
1delete from emp where id = #{id};
接口方法
12@Delete("delete from emp where id = #{id}")public void delete(Integer id);
日志输出(预编译SQL)
可以在application.properties中,打开mybatis的日志,并指定输出到控制台。
12#指定nybatis输出日志的位置,输出控制台mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
如果接口为delete,控制台可输出
12Preparing:delete from emp where id = ? ##预编译SQLParameters:16(Integer)
预编译SQL优势
性能更高
传统方式每次执行一条SQL语句时,MySQL服务器都要对SQL语句进行解析、优化和 ...
SQL索引和事务
概念
索引(index)是帮助数据库高效获取数据的数据结构。
优点
提高数据查询的效率,降低数据库的IO成本。通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗。
缺点
索引会占用存储空间。
索引大大提高了查询效率,同时却也降低了insert、update、delete的效率。
数据结构
MySQL数据库支持的索引结构有很多,如:Hash索引、B+Tree索引、Full-Text索引等。我们平常所说的索引,如果没有特别指明,都是指默认的B+Tree结构组织的索引。
B+ Tree多路平衡搜索树
每一个节点,可以存储多个key(有个key,就有n个指针),
所有的数据都存储在叶子节点,章叶子节点仅用于素引数据。
叶子节点形度了一颗双向链表,便于数据的排序及区间范围查询。
语法
创建索引
create [unique] index 索引名 on 表名(字段名…);
1create index idx emp_name on tb_emp(name);
查看索引
show index from 表名;
1show index from tb-emp ...
Mybatis入门
使用Mybatis 查询所有用户数据
1,准备工作(创建springboot工程、数据库表user、实体类User)
2.引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)
123456spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/mybatisspring.datasource.username=rootspring.datasource.password=1234//application.properties
3.编写5QL语句(注解/XML)
持久层接口
1234@Mapperpublic interface UserMapper@Select("select * from user")public List<User>list();
使用Mapper注解后不需要定义接口的实现类,程序在运行时框架底层会自动生成这个接口的实现类对象
IDEA 配置SQL提示
选 ...
多表操作
多表设计
概述
项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:
一对多
多对多
一对一
一对多
在一对多的关系中,一的一方为父表,多的一方为子表
外键约束
物理外键
概念:使用foreign key定义外键关联另外一张表。
缺点:
影响增、删、改的效率(需要检查外键关系)。
仅用于单节点数据库,不适用与分布式、集群场景。
容易引发数据库的死锁问题,消耗性能。
外键语法
123456789-- 创建表时指定create table 表名( 字段名 数据类型, ... [constraint] [外键名称] foreign key (外键字段名) references 主表 (字段名));-- 建完表后,添加外键alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表 (字段名);
逻辑外键
概念:在业务层逻辑中,解决外键关联。
通过逻辑外键,就可以很方便的解决物理外键的 ...
SQL
SQL分类
SQL 语句通常分为四大类
分类
全称
说明
DDL
Data Definition Language
数据定义语言,用来定义数据库对象(数据库,表,字段)
DML
Data Manipulation Language
数据操作语言,用来对数据库表中的数据进行增删改
DQL
Data Query Language
数据查询语言,用来查询数据库中的记录
DCL
Data Control Language
数据控制语言,用来创建数据库用户,控制数据库的访问权限
SQL通用语法
SQL语句可以单行/多行书写,以分号结束。
SQL语句中可以增加缩进/空格来增强可读性。
SQL语句中的关键字不区分大小写。
SQL语句注释:单行注释(-注释),多行注释(/*注释*/)
DDL数据库操作
查询
查询所有数据库:show databases;
查询当前数据库:select database();
使用
使用数据库:use 数据库名;
创建
create database[if not exists] 数据库名;
删除
删除数据库:drop ...
分层耦合
三层架构
controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据。
service:业务迈辑层,处理具体的业务逻辑。
dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查。
分层解耦
内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层模块之间的依赖、关联的程度。
软件设计原则 : 高内聚低耦合
SpringBoot提供的分层解耦
控制反转:Inversion Of Control,.简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
依赖注入:Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
Bean对象:IOC容器中创建、管理的对象,称之为bean。
IOC & DI入门
@Component在接口类中添加,将创建返回的bean对象放入IOC容器
@Autowired在类中使用,将创建返回的bean对象注入到自身类中的对象形成数据
IOC 详解
Bean的声明
要把某个对象交给 ...
SQL语句
1. SELECT all columns with LIMIT
SELECT 命令会选择所有的行、列,全部进行打印时,浪费时间、电脑内存,Limit命令可以查看数据中的前几行。
数据表:Customers
CustomerID
CustomerName
City
Country
1
John Doe
New York
USA
2
Jane Smith
Madrid
Spain
3
Juan Carlos
Barcelona
Spain
4
Sara Lee
Paris
France
SQL 语句:
1SELECT * FROM Customers LIMIT 3;
输出:
CustomerID
CustomerName
City
Country
1
John Doe
New York
USA
2
Jane Smith
Madrid
Spain
3
Juan Carlos
Barcelona
Spain
2. WHERE clause
WHERE可以对特定列的值进行过滤。例如,我们过滤来自西班牙的国家,并且返回对应的城市。
数 ...
正则表达式
正则表达式(Regular Expression,简称regex或regexp)是一种用来匹配字符串的强大工具。它广泛应用于文本搜索、替换、验证等任务中。接下来,我会分步骤详细讲解正则表达式的基础知识和一些常见的用法。
1. 基本概念
正则表达式是一种描述字符模式的规则,用于在文本中查找特定的字符组合。正则表达式中的符号和字符有特定的含义,例如:
字面字符(Literal Characters):直接匹配文本中的字符。例如,正则表达式abc只会匹配文本中的“abc”。
元字符(Metacharacters):具有特殊意义的字符,用于定义更复杂的模式。例如,.可以匹配任意一个字符,*表示前面的字符可以重复零次或多次。
2. 元字符和特殊符号
以下是一些常见的元字符及其含义:
. : 匹配任意单个字符(除换行符外)。
例如,正则表达式a.c可以匹配“abc”、“a1c”、“a_c”等。
^ : 匹配字符串的开始位置。
例如,^abc匹配以“abc”开头的字符串。
$ : 匹配字符串的结束位置。
例如,abc$匹配以“abc”结尾的字符串。
* : 匹配前面的 ...