Mybatis
数据库连接池
- 概念
数据库连接池是个容器,负责分配、管理数据库连接
它允许应用程序使用一个现有的数据库连接,而不是再建立一个
释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏 - 实现
标准接口:DataSource
官方提供的数据库连接池接口,由第三方组织实现此接口
常见产品:C3P0,DBCP,Druid,Hikari(springboot默认)
增删改查
delete
Mapper接口:
@Delete(“delete from user where id = #{id}”)
public void deleteById(Integer id);Mybatis 中的 # 和 $
#{…} 占位符 执行时,会将#{…} 替换为?,生成预编译 SQL 用于参数值传递 安全,性能高
${…} 拼接符 直接将参数拼接再 SQL 语句中,存在 SQL 注入问题 用于表名、字段名动态设置时使用 不安全、性能低
insert
Mapper接口:
@Insert(“insert into user(username,password,name,age) values(#{username},#{password},#{name},#{age})”)
public void insert(User user);update
Mapper接口:
@Update(“update user set username = #{username},password = #{password},name = #{name},age = #{age} where id = #{id})
public void update(User user);select
Mapper接口:
@Select(“select * from user where username = #{username} and password = #{password}”)
public User fingbyUsernameAndPaswword(@Param(“username”) String username,@Param(“password”) String password);
@Param 注解的作用是为接口的方法形参起名字
说明:基于官方骨架创建的 springboot 项目中,接口编译时会保留方法形参名,@Param 注解可以省略
springboot 项目配置文件
yml 配置文件:
格式
1 数值前边必须有空格,作为分隔符
2 使用缩进表示层级关系,缩进时,不允许使用 Tab 键,只能用空格(idea 中会自动将 Tab 转化为空格)
3 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
4 # 表示注释,从这个字符一直到行尾,都会被解析器忽略
定义对象/Map 集合
1 | user: |
hobby:
- java
- game
- sport
*注意:在 yml 格式的配置文件中,如果配置项的值是以 0 开头的,值需要使用'' 引起来,因为以 0 开头在 yml 中表示 8 进制的数据*
## 开发规范
1. 开发模式:
前后端分离开发:
前端项目、后端项目 开发和部署是分开的
具体的开发流程:
需求分析 -> 接口设计 -> 前后端并行开发 -> 测试 -> 联调
2. Restful 风格
Rest(表述性状态转换),它是一种软件架构风格
Rest 风格:
URL 定位资源,HTTP 动词描述操作
请求方式:
GET:查询
DELETE:删除
POST:新增用户
PUT:修改
*注意:1. REST 是风格,是约定方式,不是规定,可以打破;2.描述功能模块通常使用复数形式,表示此类资源而非单个资源,如:users...*
3. Apifox
Apifox 是一款集成了 Api 文档、Api 调试、Api Mock、Api 测试的一体化协作平台
作用:接口文档管理、接口请求测试、Mock 服务
由于浏览器地址栏发起的请求,都是 GET 方式的请求,如果我们需要发起 POST、PUT、DELETE 方式的请求,需要借助该类工具
4. JWT:
JWT(JSON Web Token)是一种无状态登录认证机制
核心思想:
不保存登录状态,登录成功后生成一个加密字符串(token),把用户信息加密进 token 里返回给前端
前端请求带 token,服务器验证 token,解析出用户信息
**JWT结构**
Header(头部)
Payload(载荷)
Signature(签名):服务器用密钥生成签名,防止伪造,有人改 Payload,签名就会失效