网站内容与目录结构,做一个网站开发项目有哪些阶段,移动网站源码,装修设计费多少钱一平方文章目录 前言一、Maven1.Maven概述-介绍1.1.Maven概述-介绍1.2.Maven概述-安装 2.IDEA集成Maven2.1.IDEA集成Maven-配置Maven环境2.2.IDEA集成Maven-创建Maven项目2.3.IDEA集成Maven-导入Maven项目 3.Maven-依赖管理3.1.Maven-依赖管理-依赖配置3.2.Maven-依赖管理-依赖传递3.… 文章目录 前言一、Maven1.Maven概述-介绍1.1.Maven概述-介绍1.2.Maven概述-安装 2.IDEA集成Maven2.1.IDEA集成Maven-配置Maven环境2.2.IDEA集成Maven-创建Maven项目2.3.IDEA集成Maven-导入Maven项目 3.Maven-依赖管理3.1.Maven-依赖管理-依赖配置3.2.Maven-依赖管理-依赖传递3.3.Maven-依赖管理-依赖范围3.4.Maven-依赖管理-生命周期 二、SpringBootWeb入门1.SpringBootWeb入门1.1.SpringSpringBoot介绍1.2.SpringBootWeb快速入门 2.HTTP协议2.1.HTTP协议-概述2.2.HTTP协议-请求协议2.3.HTTP协议-响应协议2.4.HTTP协议-协议解析 3.Web服务器-Tomcat3.1.Tomcat-介绍3.2.Tomcat-基本使用3.3.Tomcat-入门程序解析(内嵌Tomcat) 三、请求响应1.请求响应-概述2.请求响应-请求2.1.请求响应-请求-postman工具2.2.请求响应-请求-简单参数2.3.请求响应-请求-实体参数2.4.请求响应-请求-数组集合参数2.5.请求响应-请求-日期参数2.6.请求响应-请求-JSON参数2.7.请求响应-请求-路径参数 3.请求响应-响应3.1.请求响应-响应-ResponseBody3.2.请求响应-响应-统一响应结果 四、分层解耦1.分层解耦-三层架构2.分层解耦-分层解耦(IOC-DI引入)3.分层解耦-IOCDI-IOC详解4.分层解耦-IOCDI-DI详解 五、MySQL1.MySQL- 介绍2.MySQL-概述2.1.MySQL-概述-安装配置2.2.MySQL-概述-数据模型2.3.MySQL-概述-数据模型-SQL简介 3.MySQL-DDL3.1.MySQL-DDL-数据库操作3.2.MySQL-DDL-图形化工具3.3.MySQL-DDL-表结构操作-创建3.4.MySQL-DDL-表结构操作-数据类型3.5.MySQL-DDL-表结构操作-查询修改删除 4.MySQL-DML4.1.MySQL-DML-添加数据(insert)4.2.MySQL-DML-修改数据(update)4.3.MySQL-DML-删除数据(delete) 5.MySQL-DQL5.1.MySQL-DQL-基本查询5.2.MySQL-DQL-条件查询5.3.MySQL-DQL-聚合函数5.4.MySQL-DQL-分组查询5.5.MySQL-DQL-排序查询5.6.MySQL-DQL-分页查询 6.MySQL-多表设计6.1.MySQL-多表设计-一对多6.2.MySQL-多表设计-一对多-外键6.3.MySQL-多表设计-一对一6.4.MySQL-多表设计-多对多 7.MySQL-多表查询7.1.MySQL-多表查询-概述7.2.MySQL-多表查询-内连接7.3.MySQL-多表查询-外连接7.4.MySQL-多表查询-子查询-概述分类7.5.MySQL-多表查询-子查询-标量子查询列子查询7.6.MySQL-多表查询-子查询-行子查询表子查询 8.MySQL-事务8.1.MySQL-事务-介绍8.2.MySQL-事务-操作8.3.MySQL-事务-四大特性 9.MySQL-索引9.1.MySQL-索引-介绍9.2.MySQL-索引-结构9.3.MySQL-索引-操作语法 五、Mybatis1.Mybatis-入门1.1.Mybatis-入门-介绍1.2.Mybatis-入门-快速入门程序1.3.Mybatis-入门-配置SQL提示1.4.Mybatis-入门-JDBC1.5.Mybatis-入门-数据库连接池1.6.Mybatis-入门-lombok工具包介绍 2.Mybatis-基础操作2.1Mybatis-基础操作-环境准备2.2Mybatis-基础操作-删除2.3Mybatis-基础操作-删除(预编译SQL)2.4Mybatis-基础操作-新增2.5Mybatis-基础操作-新增(主键返回)2.6Mybatis-基础操作-更新2.7Mybatis-基础操作-查询(根据ID查询)2.8Mybatis-基础操作-查询(条件查询) 3.Mybatis-XML映射文件4.Mybatis-动态SQL4.1Mybatis-动态SQL-if4.2Mybatis-动态SQL-if-案例4.3Mybatis-动态SQL-foreach4.4Mybatis-动态SQL-sqlinclude 此文档来源于网络,如有侵权请联系删除 前言 一、Maven
什么是Maven Maven是apache旗下的一个开源项目是一款用于管理和构建java项目的工具。 Apache Apache 软件基金会成立于1999年7月是目前世界上最大的最受欢迎的开源软件基金会也是一个专门为支持开源项目而生的非盈利性组织。 开源项目https://www.apache.org/index.html#projects-list Maven的作用
依赖管理方便快捷的管理项目依赖的资源(jar包)避免版本冲突问题统一项目结构提供标准统一的项目结构项目构建标准跨平台Linux、Windows、MacOS的自动化项目构建方式
1.Maven概述-介绍
1.1.Maven概述-介绍
Maven介绍
Apache Maven 是一个项目管理和构建工具它基于项目对象模型(POM)的概念通过一小段描述信息来管理项目的构建。作用 1.方便的依赖管理 2.统一的项目结构 3.标准的项目构建流程官网https://maven.apache.org/ 仓库用于存储资源管理各种jar包。 1.本地仓库自己计算机上的一个目录。 2.中央仓库由Maven团队维护的全球唯一的。仓库地址https://repo1.maven.org/maven2/ 3.远程仓库(私服)一般由公司团队搭建的私有仓库。
1.2.Maven概述-安装
Maven下载 官网https://maven.apache.org/
Maven安装 将下载好的压缩包解压到无中文名的目录下 配置本地仓库修改conf/settings.xml配置文件中的localRepository为一个指定目录 #创建一个名为maven_repository文件夹。D:\develop\apache-maven-3.9.2\maven_repository代表本地仓库jar包存放的地方
localRepositoryD:\develop\apache-maven-3.9.2\maven_repository/localRepository配置阿里云私服修改conf/settings.xml配置文件中的mirrors标签为其添加如下子标签 mirroridalimaven/idnamealiyun maven/name urlhttp://maven.aliyun.com/nexus/content/groups/public//urlmirrorOfcentral/mirrorOf
/mirror阿里maven配置指南https://developer.aliyun.com/mvn/guide 配置环境变量MAVEN_HOME 为Maven的解压目录并将其bin目录加入PATH环境变量 测试Mavem是否安装配置完毕 #能查看到Maven版本代表安装配置完毕安装Maven需要依赖JDK我这里安装的是jdk-11.0.15.1版本
mvn -v2.IDEA集成Maven
2.1.IDEA集成Maven-配置Maven环境
配置Maven环境(当前工程) 创建一个名为web_project的项目 配置项目需要使用的JDK版本 此处我使用的是JDK11版本自己安装了JDK版本选择不了就点击旁边的New添加自己安装的JDK版本 配置Maven环境 设置IDEA使用本地安装的 Maven并修改配置文件及本地仓库路径
配置Maven环境(全局) File→Close Project
2.2.IDEA集成Maven-创建Maven项目
创建Maven项目 创建模块选择Maven 填写模块信息 编写 HelloWorld并运行
中途出现了报错下面是解决方法 报错 Unable to import maven project: See logs for details 无法导入maven项目:请参阅日志了解详细信息 查看日志Help→Show Log in Explorer 日志错误信息 原因IDEA与Maven版本不兼容所致 解决方法跟换Maven安装包——重新配置Maven——重新加载项目
重新加载项目 Maven坐标
什么是坐标? Maven 中的坐标是资源的唯一标识通过该坐标可以唯一定位资源位置。使用坐标来定义项目或引入项目中需要的依赖。 Maven坐标主要组成 groupld定义当前Maven项目隶属组织名称通常是域名反写例如com.xiongjianartifactld定义当前Maven项目名称通常是模块名称例如 order-service、goods-serviceversion定当前项目版本号
2.3.IDEA集成Maven-导入Maven项目
导入Maven项目 方式一 1.选择右侧Maven面板点击 号 2.选中对应项目的pom.xml文件 方式二 1.File→Project Structure 2.点击 号→Import Module 3.选中对应项目的pom.xml文件
3.Maven-依赖管理
3.1.Maven-依赖管理-依赖配置
依赖配置
依赖指当前项目运行所需要的jar包一个项目中可以引入多个依赖。配置 1.在 pom.xml 中编写dependencies标签 2.在标签中使用dependency引入坐标 3.定义坐标的groupldartifactldversion 4.点击刷新按钮引入最新加入的坐标 注意事项
如果引入的依赖在本地仓库不存在将会连接远程仓虑/中央仓库然后下载依赖。 (这个过程会比较耗时耐心等待)如果不知道依赖的坐标信息可以到https://mvnrepository.com/中搜索
3.2.Maven-依赖管理-依赖传递
依赖传递 依赖具有传递性 直接依赖在当前项目中通过依赖配置建立的依赖关系间接依赖被依赖的资源如果依赖其他资源当前项目间接依赖其他资源 排除依赖 排除依赖指主动断开依赖的资源被排除的资源无需指定版本。
3.3.Maven-依赖管理-依赖范围
依赖范围
依赖的jar包默认情况下可以在任何地方使用。可以通过scope…/ scope 设置其作用范围。作用范围 主程序范围有效。(main文件夹范围内)测试程序范围有效。(test文件夹范围内)是否参与打包运行。(package指令范围内)
scope值主程序测试程序打包运行范例compile默认YYYlog4jtest-Y-junitprovidedYY-servlet-apiruntime-YYjdbc驱动
3.4.Maven-依赖管理-生命周期
生命周期 Maven的生命周期就是为了对所有的Maven项目构建过程进行抽象和统一。
Maven中有3套相互独立的生命周期 clean清理工作。default核心工作如编译、测试、打包、安装、部署等。site生成报告、发布站点等。
每套生命周期包含一些阶段phase阶段是有顺序的后面的阶段依赖于前面的阶段。 生命周期阶段 clean移除上一次构建生成的文件compile编译项目源代码test使用合适的单元测试框架运行测试(junit)package将编译后的文件打包如jar、war等install安装项目到本地仓库 注意事项在同一套生命周期中当运行后面的阶段时前面的阶段都会运行。
执行指定生命周期的两种方式
在idea中右侧的maven工具栏选中对应的生命周期双击执行。在命令行中通过命令执行。 mvn clean
mvn compile
mvn package
mvn test
...二、SpringBootWeb入门
1.SpringBootWeb入门
1.1.SpringSpringBoot介绍
Spring
官网https://spring.io/Spring发展到今天已经形成了一种开发生态圈Spring提供了若干个子项目每个项目用于完成特定的功能。
SpringBoot Spring Boot 可以帮助我们非常快速的构建应用程序、简化开发、提高效率。
1.2.SpringBootWeb快速入门
SpringBootWeb快速入门
需求使用 SpringBoot 开发一个web应用浏览器发起请求hello后给浏览器返回字符串Hello World~。
步骤
①.创建springboot工程并勾选web开发相关依赖。
1.File→New→Module 2.选择JDK版本→Next 3.填写相关配置信息→Next 4.Web→勾选Spring Web→Next 5.填写信息选择项目存放路径→Finish 6.等待联网下载需要等待几分钟 7.SpringBoot项目创建完成→可以删除如图所示没有用的文件 注意不同的JDK版本与SpringBoot版本不兼容会导致创建完成启动报错 ②.定义HelloController类添加方法 hello并添加注解。 ③.运行测试 浏览器访问localhost:8080/hello 2.HTTP协议
2.1.HTTP协议-概述
HTTP
概念Hyper Text Transfer Protocol超文本传输协议规定了浏览器和服务器之间数据传输的规则。 特点 1.基于TCP协议面向连接安全。 2.基于请求-响应模型的一次请求对应一次响应。 3.HTTP协议是无状态的协议对于事务处理没有记忆能力。每次请求-响应都是独立的。 缺点多次请求间不能共享数据。优点速度快
2.2.HTTP协议-请求协议
请求协议 请求方式-GET请求参数在请求行中没有请求体如/brand/findAll?nameOPPOstatus1。GET请求大小是有限制的 请求方式-POST:请求参数在请求体中POST请求大小是没有限制的。 请求头标签含义HOST请求的主机名User-Agent浏览器版本例如Chrome浏览器的标识类似Mozilla/5.0 … Chrome/79IE浏览器的标识类似Mozila/5.0(WindowsNT …) like GeckoAccept表示浏览器能接收的资源类型如text/*image/或者/*表示所有Accept-Language表示浏览器偏好的语言服务器可以据此返回不同语言的网页Accept-Encoding表示浏览器可以支持的压缩类型例如gzip,deflate等Content-Type请求主体的数据类型Content-Length请求主体的大小(单位字节)
2.3.HTTP协议-响应协议
响应协议 响应状态码含义1xx响应中-临时状态码表示请求已经接收告诉客户端应该继续请求或者如果它已经完成则忽略它2xx成功-表示请求已经被成功接收处理已完成3xx重定向-重定向到其他地方;让客户端再发起一次请求以完成整个处理4xx客户端错误-处理发生错误责任在客户端。如请求了不存在的资源、客户端未被授权、禁止访问等5xx服务器错误-处理发生错误责任在服务端。如程序抛出异常等
状态码大全 https://cloud.tencent.com/developer/chapter/13553
响应头含义Content-Type表示该响应内容的类型例如text/htmlapplication/jsonContent-Length表示该响应内容的长度 (字节数)Content-Encoding表示该响应压缩算法例如gzipCache-Control指示客户端应如何缓存例如max-age300表示可以最多缓存300秒Set-Cookie告诉浏览器为当前页面所在的域设置cookie
2.4.HTTP协议-协议解析 3.Web服务器-Tomcat
Web服务器
Web服务器是一个软件程序对HTTP协议的操作进行封装使得程序员不必直接对协议进行操作让Web开发更加便捷。主要功能是“提供网上信息浏览服务”。
3.1.Tomcat-介绍
Tomcat
概念Tomcat是Apache 软件基金会一个核心项目是一个开源免费的轻量级Web服务器支持Servlet/JSP少量JavaEE规范。JavaEEJava Enterprise EditionJava企业版。指Java企业级开发的技术规范总和。包含13项技术规范JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JTS、JTA、JavaMail、JAF。Tomcat 也被称为 Web容器、Servlet容器。Servlet程序需要依赖于Tomcat才能运行官网https://tomcat.apache.org/
3.2.Tomcat-基本使用
Tomcat-基本使用 下载官网下载地址https://tomcat.apache.org/download-90.cgi 安装绿色版直接解压即可 卸载直接删除目录即可 启动双击bin\startup.bat 控制台中文乱码修改conf/logging.properties文件 关闭 直接x掉运行窗口强制关闭bin\shutdown.bat正常关闭CtrlC正常关闭 浏览器访问http://localhost:8080/ 常见问题 双击启动窗口一闪而过检查JAVA_HOME环境变量是否正常配置 端口号冲突找到对应程序将其关闭掉或者是修改Tomcat的端口号
修改Tomcat的端口号
修改conf/server.xml配置文件
注意事项 HTTP协议默认端口号为80如果将Tomcat端口号改为80则将来访问Tomcat时将不用输入端口号。 Tomcat项目部署
将项目放置到webapps目录下即部署完成
3.3.Tomcat-入门程序解析(内嵌Tomcat)
SpringBootWeb-入门程序解析 起步依赖
spring-boot-starter-web包含了web应用开发所需要的常见依赖。spring-boot-starter-test包含了单元测试所需要的常见依赖。官方提供的starterhttps://docs.spring.io/spring-boot/docs/2.7.4/reference/htmlsingle/#using.build-systems.starters 三、请求响应
1.请求响应-概述 请求响应
请求HttpServletRequest获取请求数据响应HttpServletResponse设置响应数据BS架构Browser/Server浏览器/服务器架构模式。客户端只需要浏览器应用程序的逻辑和数据都存储在服务端。 优点维护方便缺点体验一般 CS架构Client/Server客户端/服务器架构模式。 优点体验不错缺点开发、维护麻烦
2.请求响应-请求
2.1.请求响应-请求-postman工具
postman Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。 作用常用于进行接口测试 下载地址https://app.getpostman.com/app/download/win64 安装双击下载好的安装包会自己安装 注册需要连接网络 登录 创建工作空间 请求测试 请求保存
2.2.请求响应-请求-简单参数
简单参数 原始方式 在原始的web程序中获取请求参数需要通过HttpServletRequest 对象手动获取。 SpringBoot方式 简单参数参数名与形参变量名相同定义形参即可接收参数。 get方式请求 post方式请求 2.3.请求响应-请求-实体参数
实体参数 简单实体对象请求参数名与形参对象属性名相同定义POJO接收即可 定义一个User对象类添加getsettoString方法 测试 复杂实体对象请求参数名与形参对象属性名相同按照对象层次结构关系即可接收嵌套POJO属性参数。 定义一个User对象类添加getsettoString方法 定义一个Address类添加getsettoString方法 测试
2.4.请求响应-请求-数组集合参数
数组集合参数 数组参数请求参数名与形参数组名称相同且请求参数为多个定义数组类型形参即可接收参数 集合参数请求参数名与形参数组名称相同且请求参数为多个RequestParam 绑定参数关系
2.5.请求响应-请求-日期参数
日期参数 日期参数使用 DateTimeFormat 注解完成日期参数格式转换
2.6.请求响应-请求-JSON参数
JSON参数 JSON参数JSON数据键名与形参对象属性名相同定义POJO类型形参即可接收参数需要使用 RequestBody 标识 定义一个User对象类添加getsettoString方法 定义一个Address类添加getsettoString方法 测试
2.7.请求响应-请求-路径参数
路径参数 路径参数通过请求URL直接传递参数使用{…}来标识该路径参数需要使用 PathVariable 获取路径参数 单个路径参数 多个路径参数
3.请求响应-响应
3.1.请求响应-响应-ResponseBody
ResponseBody 类型方法注解、类注解位置Controller方法上/类上作用将方法返回值直接响应如果返回值类型是 实体对象/集合将会转换为JSON格式响应说明RestController Controller ResponseBody
3.2.请求响应-响应-统一响应结果
统一响应结果 四、分层解耦
1.分层解耦-三层架构
三层架构
三层架构 ①Controller接收请求、响应数据②Service逻辑处理③Dao数据访问 controller控制层接收前端发送的请求对请求进行处理并响应数据。service业务逻辑层处理具体的业务逻辑。dao数据访问层(Data Access Obiect)(持久层)负责数据访问操作包括数据的增、删、改、查。
2.分层解耦-分层解耦(IOC-DI引入)
分层解耦
内聚软件中各个功能模块内部的功能联系。耦合衡量软件中各个层/模块之间的依赖、关联的程度。软件设计原则高内聚低耦合。控制反转Inversion Of Control简称IOC。对象的创建控制权由程席自身转移到外部容器这种思想称为控制反转。依赖注入Dependency Injection简称DI。容器为应用程序提供运行时所依赖的资源称之为依赖注入。Bean对象IOC容器中创建、管理的对象称之为bean。
3.分层解耦-IOCDI-IOC详解
Bean的声明
要把某个对象交给IOC容器管理需要在对应的类上加上如下注解之一
注解说明位置Component声明bean的基础注解不属于以下三类时用此注解ControllerComponent的衍生注解标注在控制器类上ServiceComponent的衍生注解标注在业务类上RepositoryComponent的衍生注解标注在数据访问类上由于与mybatis整个用的少
注意事项
声明bean的时候可以通过value属性指定bean的名字如果没有指定默认为类名首字母小写。使用以上四个注解都可以声明bean但是在springboot集成web开发中声明控制器bean只能用Controller。
Bean组件扫描
前面声明bean的四大注解要想生效还需要被组件扫描注解ComponentScan扫描。ComponentScan注解虽然没有显式配置但是实际上已经包含在了启动类声明注解 SprinaBootApplication中默认扫描的范围是启动类所在包及其子包。
4.分层解耦-IOCDI-DI详解
Bean注入 Autowired注解默认是按照类型进行如果存在多个相同类型的bean讲会报出如下错误 通过以下几种方案来解决 Primary Qualifier Resource Resource 与 Autowired区别 Autowired 是spring框架提供的注解、而Resource是JDK提供的注解。Autowired 默认是按照类型注入而Resource默认是按照名称注入。
五、MySQL
1.MySQL- 介绍
什么是数据库
数据库DataBaseDB是存储和管理数据的仓库。数据库管理系统DataBase Management SystemDBMS操纵和管理数据库的大型软件。SQLStructured Query Language操作关系型数据库的编程语言定义了一套操作关系型数据库统一标准。
数据库介绍Oracle收费的大型数据库Oracle公司的产品。MySQL开源免费的中小型数据库。Sun公司收购了MySQLOracle收购Sun公司。SQL ServerMicroSoft公司收费的中型的数据库。C#、.net等语言常使用。PostgreSQL开源免费中小型的数据库。DB2IBM公司的大型收费数据库产品。SQLite嵌入式的微型数据库。如作Android内置数据库MariaDB开源免费的中小型的数据库。
2.MySQL-概述
2.1.MySQL-概述-安装配置
MySQL安装 官网下载地址https://dev.mysql.com/downloads/mysql/ 通过图形化(.msi 安装文件)安装MySQL教程参考https://blog.csdn.net/weixin_44904239/article/details/130480731 通过图形化(.msi 安装文件)安装MySQL的卸载教程参考https://blog.csdn.net/weixin_44904239/article/details/111568476 通过(.zip 压缩文件)安装及卸载MySQL教程参考https://blog.csdn.net/weixin_44904239/article/details/131653062 登录语法 mysql -u用户名 -p密码 [-h数据库服务器IP地址 -p端口号]SQL数据模型 关系型数据库RDBMS建立在关系模型基础上由多张相互连接的二维表组成的数据库。 特点 使用表存储数据格式统一便于维护。使用SQL语言操作标准统一使用方便可用于复杂查询。
2.2.MySQL-概述-数据模型
MySQL数据模型 2.3.MySQL-概述-数据模型-SQL简介
SQL简介
SQL一门操作关系型数据库的编程语言定义操作所有关系型数据库的统一标准。通用语法 SQL语句可以当行或多行书写以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。MySQL数据库的SQL语句不区分大小写。注释 1.单行注释-- 注释内容 或 # 注释内容(MySQL特有) 2.多行注释/* 注释内容 */
SQL分类
SQL语句通常被分为四大类
分类全程说明DDLData Definition Language数据定义语言用来定义数据库对象(数据库表字段)DMLData Manipulation Language数据操作语言用来对数据库表中的数据进行增删改DQLData Query Language数据查询语言用来查询数据库中表的记录DCLData Control Language数据控制语言用来创建数据库用户、控制数据库的访问权限
3.MySQL-DDL
3.1.MySQL-DDL-数据库操作
DDL数据库操作
DDL 英文全称是Data Definition Language数据定义语言用来定义数据库对象(数据库、表)。
查询 查询所有数据库 show databases;查询当前数据库 select database();创建 创建数据库 create database [if not exists] 数据库名;if not exists 可选项表示数据库存在则不创建不存在则创建
使用 使用数据库 use 数据库名;删除 删除数据库 drop database [if exists] 数据库名;if exists 可选项表示数据库存在则删除不存在则不用删除
注意事项 上述语法中的database也可以替换成 schema。如: create schema db01; 3.2.MySQL-DDL-图形化工具
图形化工具
介绍DataGrip是letBrains旗下的一款数据库管理工具是管理和开发MySQL、Oracle、PostreSQL的理想解决方案。官网https://www.jetbrains.com/zh-cn/datagrip/ 我这直接使用IntelliJ IDEA操作数据库IntelliJ IDEA集成了DataGrip 1.打开IntelliJ IDEA→点击DataBase 2.点击号→Data Source→MySQL 3.输入用户名和密码→Test Connection(测试数据库连接)→测试连接成功点击OK 4.显示所有数据库 5.编写SQL语句操作数据库 6.关掉console标签页以后如何打开 3.3.MySQL-DDL-表结构操作-创建
创建
-- 语法
create table 表名(字段1 字段类型 [约束] [comment 字段1注释],......字段1 字段类型 [约束] [comment 字段1注释]
)[comment 表注释];-- 创建用户表
create table user(id int comment id,唯一标识,name varchar(10) comment 姓名,age int comment 年龄,gender char(1) comment 性别
) comment 用户表;约束
概念约束是作用于表中字段上的规则用于限制存储在表中的数据。目的保证数据库中数据的正确性、有效性和完整性。
约束描述关键字非空约束限制该字段值不能为nullnot null唯一约束保证字段的所有数据都是唯一、不重复的unique主键约束主键是一行数据的唯一标识要求非空且唯一primary keyauto_increment自增默认约束保存数据时如果未指定该字段值则采用默认值default外键约束让两张表的数据建立连接保证数据的一致性和完整性foreign key
-- 创建用户表添加约束
create table user(id int primary key auto_increment comment id,唯一标识,username varchar(20) not null unique comment 用户名,name varchar(10) not null comment 姓名,age int comment 年龄,gender char(1) default 男 comment 性别
) comment 用户表;3.4.MySQL-DDL-表结构操作-数据类型
数据类型
MySQL中的数据类型有很多主要分为三类数值类型、字符串类型、日期时间类型。
数值类型
类型大小(byte)有符号(SIGNED)范围无符号(UNSIGNED)范围描述备注tinyint1(-128127)(0255)小整数值smallint2(-3276832767)(065535)大整数值mediumint3(-83886088388607)(016777215)大整数值int4(-21474836482147483647)(04294967295)大整数值bigint8(-263,263-1)(02^64-1)极大整数值float4(-3.402823466 E383.402823466351 E38)0 和 (1.175494351 E-383.402823466 E38)单精度浮点数值float(5,2)5表示整个数字长度2 表示小数位个数double8(-1.7976931348623157 E3081.7976931348623157 E308)0 和 (2.2250738585072014 E-3081.7976931348623157 E308)双精度浮点数值double(5,2)5表示整个数字长度2 表示小数位个数decimal小数值(精度更高)decimal(5,2)5表示整个数字长度2 表示小数位个数
字符串类型
类型大小描述char0-255 bytes定长字符串varchar0-65535 bytes变长字符串tinyblob0-255 bytes不超过255个字符的二进制数据tinytext0-255 bytes短文本字符串blob0-65 535 bytes二进制形式的长文本数据text0-65 535 bytes长文本数据mediumblob0-16 777 215 bytes二进制形式的中等长度文本数据mediumtext0-16 777 215 bytes中等长度文本数据longblob0-4 294 967 295 bytes二进制形式的极大文本数据longtext0-4 294 967 295 bytes极大文本数据
日期类型
类型大小(byte)范围格式描述date31000-01-01 至 9999-12-31YYYY-MM-DD日期值time3-838:59:59 至 838:59:59HH:MM:SS时间值或持续时间year11901 至 2155YYYY年份值datetime81000-01-01 00:00:00 至 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值timestamp41970-01-01 00:00:01 至 2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS混合日期和时间值时间戳
3.5.MySQL-DDL-表结构操作-查询修改删除
查询 查询当前数据库所有表 show tables;查询表结构 desc 表名;查询建表语句 show create table 表名;修改 添加字段 alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];修改字段类型 alter table 表名 modify 字段名 新数据类型(长度);修改字段名和字段类型 alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];删除字段 alter table 表名 drop column 字段名;修改表名 rename table 表名 to 新表名;删除 删除表 drop table [if exists] 表名;注意事项 在删除表时表中的全部数据也会被删除。
4.MySQL-DML
DML DML英文全称是Data Manipulation Language(数据操作语言)用来对数据库中表的数据记录进行增、删、改操作。 添加数据(INSERT) 修改数据((UPDATE)) 删除数据(DELETE)
4.1.MySQL-DML-添加数据(insert)
insert语法 指定字段添加数据 insert into 表名 (字段名1,字段名2) values (值1,值2);全部字段添加数据 insert into 表名 values (值1,值2,...);批量添加数据指定字段 insert into 表名 (字段名1,字段名2) values (值1,值2),(值1,值2);批量添加数据全部字段 insert into 表名 values (值1,值2,...),(值1,值2,...);注意事项
插入数据时指定的字段顺序需要与值的顺序是一一对应的。字符串和日期型数据应该包含在引号中。插入的数据大小应该在字段的规定范围内。
4.2.MySQL-DML-修改数据(update)
update语法 修改数据 update 表名 set 字段名1值1,字段名2值2,... [where 条件];注意事项 修改语句的条件可以有也可以没有如果没有条件则会修改整张表的所有数据。 4.3.MySQL-DML-删除数据(delete)
delete语法 删除数据 delete from 表名 [where 条件];注意事项
DELETE 语句的条件可以有也可以没有如果没有条件则会删除整张表的所有数据。DELETE 语句不能删除某一个字段的值(如果要操作可以使用UPDATE将该字段的值置为NULL)。
5.MySQL-DQL
DQL DQL英文全称是Data Query Language(数据查询语言)用来查询数据库表中的记录。 关键字SELECT 语法 select字段列表
from表名列表
where条件列表
group by分组字段列表
having分组后条件列表
order by排序字段列表
limit分页参数5.1.MySQL-DQL-基本查询
DQL-基本查询 查询多个字段 select 字段1,字段2,字段3 from 表名;查询所有字段通配符 select * from 表名;设置别名 select 字段1 [as 别名1],字段2 [别名2] from 表名;去除重复记录 select distinct 字段列表 from 表名;注意事项 * 号代表查询所有字段在实际开发中尽量少用(不直观、影响效率)。 5.2.MySQL-DQL-条件查询
DQL-条件查询 条件查询 select 字段列表 from 表名 where 条件列表;比较运算符功能大于大于等于小于小于等于等于 或 !不等于between … and …在某个范围之内(含最小、最大值)in(…)在in之后的列表中的值多选一like 占位符模糊匹配(_匹配单个字符%匹配任意个字符)is null是null
逻辑运算符功能and huo 并且多个条件同时成立or 或 ||或者多个条件任意一个成立not 或 !非不是
5.3.MySQL-DQL-聚合函数
聚合函数 介绍将一列数据作为一个整体进行纵向计算。 语法 select 聚合函数(字段列表) from 表名;函数功能count统计数量max最大值min最小值avg平均值sum求和
注意事项
null值不参与所有聚合函数运算。统计数量可以使用count(*) count(字段) count(常量)推荐使用count(*)。
5.4.MySQL-DQL-分组查询
DQL-分组查询 分组查询 select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];where与having区别 执行时机不同where是分组之前进行过滤不满足where条件不参与分组而having是分组之后对结果进行过滤。判断条件不同where不能对聚合函数进行判断而having可以。
注意事项
分组之后查询的字段一般为聚合函数和分组字段查询其他字段无任何意义。执行顺序where 聚合函数 having 。
5.5.MySQL-DQL-排序查询
DQL-排序查询 排序查询 select 字段列表 from 表名 [where 条件列表] [group by 分组字段名] order by 字段1 排序方式1,字段2 排序方式2 ...;排序方式 1.ASC升序默认值 2.DESC降序
注意事项 如果是多字段排序当第一个字段值相同时才会根据第二个字段进行排序。 5.6.MySQL-DQL-分页查询
DQL-分页查询 分页查询 select 字段列表 from 表名 limit 起始索引,查询记录数;注意事项
起始索引从0开始起始索引 (查询页码 - 1) * 每页显示记录数。分页查询是数据库的方言不同的数据库有不同的实现MySQL中是LIMIT。如果查询的是第一页数据起始索引可以省略直接简写为 limit 10。
函数 if(表达式,tvalue,fvalue)当表达式为true时取值tvalue;当表达式为false时取值fvalue if(表达式,tvalue,fvalue)case expr when value1 then result1 [when value2 then value2 ...] [else resultl] end case expr when value1 then result1 [when value2 then value2 ...] [else resultl] end6.MySQL-多表设计
多表设计-概述
项目开发中在进行数据库表结构设计时会根据业务需求及业务模块之间的关系分析并设计表结构由于业务之间相互关联所以各个表结构之间也存在着各种联系基本上分为三种
一对多(多对一)多对多一对一
6.1.MySQL-多表设计-一对多
一对多
案例部门 与 员工的关系关系一个部门有多个员工一个员工只所在一个部门中。实现在多的一方添加外键关联另一方的主键。
6.2.MySQL-多表设计-一对多-外键
外键
外键保证数据的一致性和完整性。
外键语法 创建表时指定 create table 表名(字段名 数据类型,...[constraint] [外键名称] foreign key (外键字段名) references 主表(字段名));建完表后添加外键 alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(字段名);外键约束
物理外键
概念使用foreign key 定义外键关联另外一张表。缺点 影响增、删、改的效率需要检查外键关系。仅用于单节点数据库不适用与分布式、集群场景。容易引发数据库的死锁问题消耗性能。
逻辑外键
概念在业务层逻辑中解决外键关联。通过逻辑外键就可以很方便的解决上述问题。
6.3.MySQL-多表设计-一对一
一对一
案例用户 与 身份证信息 的关系关系一对一关系多用于单表拆分将一张表的基础字段放在一张表中其他字段放在另一张表中以提升操作效率实现在任意一方加入外键关联另外一方的主键并且设置外键为唯一的(UNIQUE)
6.4.MySQL-多表设计-多对多
多对多
案例学生 与 课程的关系关系一个学生可以选修多门课程一门课程也可以供多个学生选择实现建立第三张中间表中间表至少包含两个外键分别关联两方主键
7.MySQL-多表查询
7.1.MySQL-多表查询-概述
多表查询-概述-介绍 多表查询指从多张表中查询数据 select 字段列表 from 表1,表2;笛卡尔积笛卡尔乘积是指在数学中两个集合(A集合 和 B集合)的所有组合情况。在多表查询时需要消除无效的笛卡尔积
多表查询-概述-分类 连接查询 内连接相当于A、B交集部分数据外连接 左外连接查询左表所有数据(包括两张表交集部分数据)右外连接查询右表所有数据(包括两张表交集部分数据) 子查询
7.2.MySQL-多表查询-内连接
内连接 隐式内连接 select 字段列表 from 表1,表2 where 条件...;显式内连接 select 字段列表 from 表1 [inner] join 表2 on 连接条件...;7.3.MySQL-多表查询-外连接
外连接 左外连接 select 字段列表 from 表1 left [outer] join 表2 on 连接条件...;右外连接 select 字段列表 from 表1 right [outer] join 表2 on 连接条件...;7.4.MySQL-多表查询-子查询-概述分类
子查询-概述 介绍SQL语句中嵌套select语句称为嵌套查询又称子查询。 形式 select * from 表1 where column1 (select column1 from 表2 ...);子查询外部的语句可以是insert / update / delete / select 的任何一个最常见的是select。
子查询-分类
标量子查询子查询返回的结果为单个值列子查询子查询返回的结果为一列行子查询子查询返回的结果为一行表子查询子查询返回的结果为多行多列
7.5.MySQL-多表查询-子查询-标量子查询列子查询
标量子查询
子查询返回的结果是单个值数字、字符串、日期等最简单的形式常用的操作符 、 、 、 、 、
列子查询
子查询返回的结果是一列可以是多行常用的操作符in 、not in等
7.6.MySQL-多表查询-子查询-行子查询表子查询
行子查询
子查询返回的结果是一行可以是多列。常用的操作符 、 、in 、not in
表子查询
子查询返回的结果是多行多列常作为临时表常用的操作符in
8.MySQL-事务
8.1.MySQL-事务-介绍
介绍
概念事务是一组操作的集合它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作 要么同时成功要么同时失败。
注意事项
默认MySQL的事务是自动提交的也就是说当执行一条DML语句MySQL会立即隐式的提交事务。
8.2.MySQL-事务-操作
操作 开启事务 start transaction;/begin;提交事务 commit;回滚事务 rollback;8.3.MySQL-事务-四大特性
四大特性ACID
原子性(Atomicity)事务是不可分割的最小单元要么全部成功要么全部失败。一致性(Consistency)事务完成时必须使所有的数据都保持一致状态。隔离性(Isolation)数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行。持久性(Durability)事务一旦提交或回滚他对数据库中的数据的改变就是永久的。
9.MySQL-索引
9.1.MySQL-索引-介绍
介绍
索引(index)是帮助数据库高效获取数据的数据结构。 优缺点 优点 提高数据查询的效率降低数据库的IO成本。通过索引列对数据进行排序降低数据排序的成本降低CPU消耗。 缺点 索引会占用存储空间。索引大大提高了查询效率同时也降低了insert、update、delete的效率。
9.2.MySQL-索引-结构
结构
MySQL数据库支持的索引结构有很多如Hash索引、BTree索引、Full-Text索引等。我们平常所说的索引如果没有特别指明都是指默认的 BTree 结构组织的索引。BTree(多路平衡搜索树) 9.3.MySQL-索引-操作语法
操作语法 创建索引 create [unique] index 索引名 on 表名(字段名,...);查看索引 show index from 表名;删除索引 drop index 索引名 on 表名;注意事项
主键字段在建表时会自动创建主键索引。添加唯一约束时数据库实际上会添加唯一索引。
五、Mybatis
1.Mybatis-入门
1.1.Mybatis-入门-介绍
什么是Mybatis?
Mybatis是一款优秀的持久层框架用于简化JDBC的开发。Mybatis本是Apache的一个开源项目iBatis2010年这个项目由apache迁移到了google code并且改名为MyBatis。2013年11月迁移到Github。官网https://mybatis.org/mybatis-3/zh/index.html
1.2.Mybatis-入门-快速入门程序
快速入门程序 使用Mybatis查询所有用户数据 一、准备工作(创建springboot工程、数据库表user、实体类User)
1.打开IDEA创建一个springboot工程 2.创建user表及插入数据
#创建用户表user
create table user(id int unsigned primary key auto_increment comment ID,name varchar(100) comment 姓名,age tinyint unsigned comment 年龄,gender tinyint unsigned comment 性别, 1:男, 2:女,phone varchar(11) comment 手机号
) comment 用户表;#向user表中添加数据
insert into user(id, name, age, gender, phone) VALUES (null,张三,18,1,18800000000);
insert into user(id, name, age, gender, phone) VALUES (null,李四,20,2,18800000001);
insert into user(id, name, age, gender, phone) VALUES (null,王五,25,1,18800000002);
insert into user(id, name, age, gender, phone) VALUES (null,赵六,19,2,18800000003);
insert into user(id, name, age, gender, phone) VALUES (null,麻子,21,1,18800000004);
insert into user(id, name, age, gender, phone) VALUES (null,赢七,24,1,18800000005);3.创建实体类User添加有参构造、无参构造、get方法、set方法、toString() 二、引入Mybatis的相关依赖配置Mybatis
1.创建springboot项目的时候已经引入了Mybatis的相关依赖
2.配置Mybatis中的application.properties配置文件
#配置数据库的连接信息—四要素
#驱动类名称
spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver
#数据库连接的urldb01代表是db01数据库
spring.datasource.urljdbc:mysql://localhost:3306/db01
#连接数据库的用户名
spring.datasource.usernameroot
#连接数据库的密码
spring.datasource.passwordroot三、编写SQL语句(注解/XML)
1.创建一个UserMapper接口通过注解的方式编写SQL语句
四、运行程序测试 1.3.Mybatis-入门-配置SQL提示
配置SQL提示 默认在mybatis中编写SQL语句是不识别的。可以做如下配置 1.选中编写的SQL语句→按住AltEnter→选择 Inject language or reference 2.选择MySQL然后重新编写SQL语句就会有提示 如果表名没有提示 产生原因ldea和数据库没有建立连接不识别表信息解决方式在ldea中配置MySQL数据库连接 1.4.Mybatis-入门-JDBC
JDBC JDBC(Java DataBase Connectivity)就是使用java语言操作关系型数据库的一套API。
本质
sun公司官方定义的一套操作所有关系型数据库的规范即接口。各个数据库厂商去实现这套接口提供数据库驱动iar包。我们可以使用这套接口JDBC编程真正执行的代码是驱动jar包中的实现类。 1.5.Mybatis-入门-数据库连接池
数据库连接池
数据库连接池是个容器负责分配、管理数据库连接(Connection)它允许应用程序重复使用一个现有的数据库连接而不是再重新建立一个释放空闲时间超过最大空闲时间的连接来避免因为没有释放连接而引起的数据库连接遗漏
数据库连接池优势
资源重用提升系统响应速度避免数据库连接遗漏
标准接口DataSource 官方(sun)提供的数据库连接池接口由第三方组织实现此接口。 功能获取连接 Connection getConnection() throws SQLExeption;常见产品C3P0、DBCP、Druid、Hikarispringboot默认 Druid德鲁伊 Druid连接池是阿里巴巴开源的数据库连接池项目功能强大性能优秀是Java语言最好的数据库连接池之一 切换Druid数据库连接池 官方地址https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter pom.xml配置文件引入依赖 dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.1.17/version
/dependency运行项目测试发现以换成druid了连接池
1.6.Mybatis-入门-lombok工具包介绍
lombok Lombok是一个实用的Java类库能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法并可以自动化生成日志变量简化java开发提高效率。 注解作用Getter/Setter为所有的属性提供get/set方法ToString会给类自动生成易阅读的toString 方法EqualsAndHashCode根据类所拥有的非静态字段自动重写 equals 方法和 hashCode 方法Data提供了更综合的生成代码功能Getter Setter ToString EqualsAndHashCodeNoArgsConstructor为实体类生成无参的构造器方法AllArgsConstructor为实体类生成除了static修饰的字段之外带有各参数的构造器方法 pom.xml配置文件引入依赖 dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId
/dependency注意事项
Lombok会在编译时自动生成对应的java代码。我们使用lombok时还需要安装一个lombok的插件
2.Mybatis-基础操作
2.1Mybatis-基础操作-环境准备 准备数据库表emp #创建部门表
create table dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称,create_time datetime not null comment 创建时间,update_time datetime not null comment 修改时间
) comment 部门表;#添加数据到部门表
insert into dept (id, name, create_time, update_time)
values (1, 学工部, now(), now()),(2, 教研部, now(), now()),(3, 咨询部, now(), now()),(4, 就业部, now(), now()),(5, 人事部, now(), now());#创建员工表
create table emp (id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment 用户名,password varchar(32) default 123456 comment 密码,name varchar(10) not null comment 姓名,gender tinyint unsigned not null comment 性别, 说明: 1 男, 2 女,image varchar(300) comment 图像,job tinyint unsigned comment 职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师,entrydate date comment 入职时间,dept_id int unsigned comment 部门ID,create_time datetime not null comment 创建时间,update_time datetime not null comment 修改时间
) comment 员工表;#添加数据到员工表
INSERT INTO emp
(id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)
VALUES (1, zhangsan, 123456, 张三, 1, 1.jpg, 4, 2000-01-01, 2, now(), now()),(2, lisi, 123456, 李四, 1, 2.jpg, 2, 2015-01-01, 2, now(), now()),(3, wangwu, 123456, 王五, 1, 3.jpg, 2, 2008-05-01, 2, now(), now()),(4, zhaoliu, 123456, 赵六, 1, 4.jpg, 2, 2007-01-01, 2, now(), now()),(5, mazi, 123456, 麻子, 1, 5.jpg, 2, 2012-12-05, 2, now(), now()),(6, damimi, 123456, 大幂幂, 2, 6.jpg, 3, 2013-09-05, 1, now(), now()),(7, guijianchou, 123456, 鬼见愁, 2, 7.jpg, 1, 2005-08-01, 1, now(), now()),(8, yushen, 123456, 雨神, 2, 8.jpg, 1, 2014-11-09, 1, now(), now()),(9, fanbingbing, 123456, 范冰冰, 2, 9.jpg, 1, 2011-03-11, 1, now(), now()),(10, maoqiu, 123456, 毛球, 2, 10.jpg, 1, 2013-09-05, 1, now(), now()),(11, luofeng, 123456, 罗峰, 1, 11.jpg, 5, 2007-02-01, 3, now(), now()),(12, mahongjun, 123456, 马红俊, 1, 12.jpg, 5, 2008-08-18, 3, now(), now()),(13, daimubai, 123456, 戴沐白, 1, 13.jpg, 5, 2012-11-01, 3, now(), now()),(14, ningrongrong, 123456, 宁荣荣, 1, 14.jpg, 2, 2002-08-01, 2, now(), now()),(15, tangsan, 123456, 唐三, 1, 15.jpg, 2, 2011-05-01, 2, now(), now()),(16, bibidong, 123456, 比比东, 1, 16.jpg, 2, 2010-01-01, 2, now(), now()),(17, tangchen, 123456, 唐晨, 1, 17.jpg, NULL, 2015-03-21, NULL, now(), now());创建一个新的springboot工程选择引入对应的起步依赖mybatis、mysql驱动、lombok 参考前面Mybatis入门程序进行创建springboot工程 application.properties中引入数据库连接信息 #配置数据库的连接信息—四要素
#驱动类名称
spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver
#数据库连接的urldb01代表是db01数据库
spring.datasource.urljdbc:mysql://localhost:3306/db01
#连接数据库的用户名
spring.datasource.usernameroot
#连接数据库的密码
spring.datasource.passwordroot创建对应的实体类Emp(实体类属性采用驼峰命名) 准备Mapper接口EmpMapper
2.2Mybatis-基础操作-删除
根据主键删除 运行程序查看数据库emp表中对应id的数据是否被删除 注意事项
如果mapper接口方法形参只有一个普通类型的参数#{…}里面的属性名可以随便写如#id、#valuel。
#…里面的属性名可以随便写如: #id、#valuel。
2.3Mybatis-基础操作-删除(预编译SQL)
日志输出 可以在application.properties文件中打开mybatis的日志并指定输出到控制台。 #指定mybatis输出日志的位置输出到控制台
mybatis.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl预编译SQL优势
性能更高更安全(防止SQL注入)
SQL注入
SQL注入是通过操作输入的数据来修改事先定义好的SQL语句以达到执行代码对服务器进行攻击的方法。
参数占位符
#{...} 执行SQL时会将#{…}替换为?生成预编译SQL会自动设置参数值。使用时机参数传递都使用#{…} ${...} 拼接SQL。直接将参数拼接在SQL语句中存在SQL注入问题。使用时机如果对表名、列表进行动态设置时使用。
2.4Mybatis-基础操作-新增
新增 运行测试程序查看数据库emp表中是否新增了数据 2.5Mybatis-基础操作-新增(主键返回)
新增(主键返回) 2.6Mybatis-基础操作-更新
更新 运行测试程序查看数据库emp表中数据是否修改了 2.7Mybatis-基础操作-查询(根据ID查询)
查询(根据ID查询) 数据封装
Emp(id19, usernamehuoyuhao2, password123456, name霍雨浩2, gender1, image2.jpg, job1, entrydate2001-01-01, deptIdnull, createTimenull, updateTimenull)deptIdnull, createTimenull, updateTimenull这三个字段为什么为null 实体类属性名和数据库表查询返回的字段名一致mybatis会自动封装。如果实体类属性名和数据库表查询返回的字段名不一致不能自动封装。 解决方案一给字段起别名让别名与实体类属性一致 解决方案二通过ResultsResult注解手动映射封装 解决方案三开启mybatis的驼峰命名自动映射开关 a_column → aColumn 2.8Mybatis-基础操作-查询(条件查询)
查询(条件查询) 由于根据name字段进行模糊查询引号里面有占位符无法使用#{}预编译SQL只能使用${}进行字符串拼接。会造成性能低、不安全、存在SQL注入问题。为了解决此问题可以使用SQL中的concat()函数进行字符串拼接。 3.Mybatis-XML映射文件
XML映射文件
XML映射文件的名称与Mapper接口名称一致并且将XML映射文件和Mapper接口放置在相同包下同包同名。XML映射文件的namespace属性为Mapper接口全限定名一致。XML映射文件中sql语句的id与Mapper 接口中的方法名一致并保持返回类型一致。
1.resources目录下创建一个同包同名的xml文件 2.XML映射文件的namespace属性为Mapper接口全限定名一致
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.xiongjian.mapper.EmpMapper/mappermybatis官网示例https://mybatis.net.cn/getting-started.html 3.XML映射文件中sql语句的id与Mapper 接口中的方法名一致并保持返回类型一致
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.xiongjian.mapper.EmpMapperselect idlist resultTypecom.xiongjian.pojo.Empselect * from emp where name like concat(%,#{name},%) and gender #{gender}and entrydate between #{begin} and #{end} order by update_time desc/select
/mapper启动程序测试 MybatisX插件
MybatisX插件是一款基于IDEA的快速开发Mybatis的插件为效率而生。安装 使用MybatisX插件安装以后会显示一个小鸟图标点击小鸟可以切换到对应的接口和SQL语句 使用Mybatis的注解主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能建议使用XML来配置映射语句。 官方说明: https://mybatis.net.cn/getting-started.html 4.Mybatis-动态SQL
动态SQL 随着用户的输入或外部条件的变化而变化的SQL语句我们称为动态SQL。 4.1Mybatis-动态SQL-if
动态SQL-if
if用于判断条件是否成立。使用test属性进行条件判断如果条件为true则拼接SQL。wherewhere 元素只会在子元素有内容的情况下才插入where子句。而且会自动去除子句的开头的AND 或OR。
?xml version1.0 encodingUTF-8 ?!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.xiongjian.mapper.EmpMapper!--resultType单条记录所封装的类型--select idlist resultTypecom.xiongjian.pojo.Empselect * from emp whereif testname ! nullname like concat(%,#{name},%)/ifif testgender ! nulland gender #{gender}/ifif testbegin ! null and end ! nulland entrydate between #{begin} and #{end}/iforder by update_time desc/select
/mapper修改参数后继续启动测试程序进行测试发现报错原因是sql语句拼接结果where后面多了个and解决方法如下使用where/where标签包裹if标签 4.2Mybatis-动态SQL-if-案例
动态SQL-if-案例 set 动态地在行首插入 SET 关键字并会删掉额外的逗号。用在update语句中 案例动态更新员工内容 !-- 动态更新员工信息 --
update idupdate2update empsetif testusername ! nullusername #{username},/ifif testname ! nullname #{name},/ifif testgender ! nullgender #{gender},/ifif testimage ! nullimage #{image},/ifif testjob ! nulljob #{job},/ifif testentrydate ! nullentrydate #{entrydate},/ifif testdeptId ! nulldept_id #{deptId},/ifif testupdateTime! nullupdate_time #{updateTime}/if/setwhere id #{id}
/update4.3Mybatis-动态SQL-foreach
动态SQL-foreach
属性 collection集合名称item集合遍历出来的元素/项separator每一次遍历使用的分隔符open遍历开始前拼接的片段close遍历结束后拼接的片段 !-- 批量删除员工信息 --
delete iddeleteByIdsdelete from emp where id inforeach collectionids itemid separator, open( close)#{id}/foreach
/delete4.4Mybatis-动态SQL-sqlinclude
动态SQL-sqlinclude
sql定于可重用的SQL片段。include通过属性refid指定包含的sql片段 sql idcomonSelectselect id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_timefrom emp/sql!--resultType单条记录所封装的类型--select idlist resultTypecom.xiongjian.pojo.Empinclude refidcomonSelect /whereif testname ! nullname like concat(%,#{name},%)/ifif testgender ! nulland gender #{gender}/ifif testbegin ! null and end ! nulland entrydate between #{begin} and #{end}/if/whereorder by update_time desc/select此文档来源于网络,如有侵权请联系删除