2024年7.9-7.19学习总结/暑假day12-22
2024年7.9-7.19学习总结/暑假day12-22
javaweb
java 04-09~10-01
day05-SpringBootWeb请求响应
springweb接收请求
参数传递:在controller层编写函数
@RequestMapping
注解是 Spring MVC 框架中的一个控制器映射注解,用于将请求映射到相应的处理方法上。具体来说,它可以将指定 URL 的请求绑定到一个特定的方法或类上,从而实现对请求的处理和响应
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name") String username , Integer age)
{
System.out.println(username + " : " + age); return "OK";
}
三层架构和分层解耦
day06~07-MySQL
sql语句分类
分类 | 说明 |
---|---|
DDL(data defination language) | 数据定义语言,用来定义数据库对象 |
DML(data maniqulation language) | 数据操作语言,用来对数据库表内数据增删改查 |
DQL(data query language) | 数据查询语言,用来查询数据库中表的记录 |
DCL(data control language) | 用的不多,用于创建用户,管理权限 |
DDL
create table 表名(
字段1 字段类型 [ 约束 ] [ comment 字段1注释 ] ,
......
字段n 字段类型 [ 约束 ] [ comment 字段n注释 ]
) [ comment 表注释 ] ;
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 限制该字段值不能为null | not null |
唯一约束 | 保证字段的所有数据都是唯一、不重复的 | unique |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | primary key |
默认约束 | 保存数据时,如果未指定该字段值,则采用默认值 | default |
外键约束 | 让两张表的数据建立连接,保证数据的一致性和完整性 | foreign key |
主要在idea中操作数据库
DML
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, ...); |
UPDATE语句 |
---|
修改数据:update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [ where 条件 ] ; |
DELETE语句 |
---|
删除数据:delete from 表名 [ where 条件 ]; |
DQL
不详细写了,贴张图吧
day08-MySQL-Mybatis入门
mybatis使用示例
1.准备好数据库
2.引入mybatis依赖
3.编写sql语句
@Mapper
public interface UserMapper {
@Select("select * from user")
public List<User> list();
}
4.单元测试
@SpringBootTest
class SpringbootMybatisQuickstart1ApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void test1(){
List<User> userList = userMapper.list();
userList.stream().forEach(user -> {
System.out.println(user);
});
}
}
示意图:
lombok
day09-Mybatis
1.准备
2.编写根据主键删除的接口mapper
预编译sql与占位符:
作用是可以防止sql注入
3.编写新建员工的接口mapper
4.编写更新员工信息的接口mapper
5.编写查询员工的接口mapper,返回员工信息列表
数据封装使用mybatis自带的开启驼峰命名规则
#开启驼峰命名自动映射,即从数据库字段名 a_column 映射到Java 属性名 aColumn。
mybatis.configuration.map-underscore-to-camel-case=true
做项目
用户中心项目,前端使用ant-design现成模板,后端使用springboot+mysql+mybatis,ssm框架。
前端前期处理
去ant-design官网找快速开始文档
在文件夹中执行命令
# 使用 npm
npm i @ant-design/pro-cli -g
pro create myapp
#选择simple框架
? 🚀 要全量的还是一个简单的脚手架? (Use arrow keys)
❯ simple
complete
$ cd myapp && tyarn
// 或
npm install
#用npm install
至此,ant-design框架和相关依赖已经准备完成,在webstorm中打开执行package.json中的start脚本即可,然后访问8000端口就能看到初始界面
后续删除一些不用的组件,包括手机号登陆,以及ant-design自带的logo等,改成自己的。
建表
create table user
(
id bigint auto_increment primary key,
username varchar(256) null comment '用户昵称',
userAccount varchar(256) null comment '账号',
avatarUrl varchar(1024) null comment '用户头像',
gender tinyint null comment '性别',
userPassword varchar(512) not null comment '密码',
email varchar(512) null comment '邮箱',
userStatus int default 0 null comment '状态 0-正常',
phone varchar(128) null comment '电话',
createTime datetime default CURRENT_TIMESTAMP null comment '创建时间',
updateTime datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间',
isDelete tinyint default 0 not null comment '是否删除'
)
comment '用户表';
右键数据库中的user表直接MybatisX-generator,mybatis会自动帮忙生成相应的类,方法和接口。
编写后端代码
先实现register功能,包括
// 1.校验
// 2.加密
// 3.插入数据
package com.yupi.usercenter.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yupi.usercenter.model.domain.User;
import com.yupi.usercenter.service.UserService;
import com.yupi.usercenter.Mapper.UserMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import javax.annotation.Resource;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 用户服务实现类
*
* @author yupi
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
implements UserService{
@Resource
private UserMapper userMapper;
@Override
public long userRegister(String userAccount, String userPassword, String checkPassword) {
// 1.校验
if (StringUtils.isAnyBlank(userAccount, userPassword, checkPassword)) {
return -1;
}
if (userAccount.length() < 4) {
return -1;
}
if (userPassword.length() < 8 || checkPassword.length() < 8){
return -1;
}
// 账户不能包含特殊字符
String validPattern = "\\pP|\\pS|\\s+";
Matcher matcher = Pattern.compile(validPattern).matcher(userAccount);
if (matcher.find()) {
return -1;
}
// 密码和校验密码相同
if (!userPassword.equals(checkPassword)) {
return -1;
}
// 账户不能重复
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("userAccount", userAccount);
long count = userMapper.selectCount(queryWrapper);
if (count > 0) {
return -1;
}
// 2.加密
final String SALT = "yupi";
String encryptPassword = DigestUtils.md5DigestAsHex((SALT + userPassword).getBytes());
// 3.插入数据
User user = new User();
user.setUserAccount(userAccount);
user.setUserPassword(encryptPassword);
boolean saveResult = this.save(user);
if (!saveResult) {
return -1;
}
return user.getId();
}
}
碎碎念
上班+学习确实有点累,不过还算挺充实的吧,也确实有不少收获,上下班坐地铁还得拿出手机刷牛客上的java题和操作系统题,因为java是速成的,而且操作系统学校也没教,像jvm虚拟机,接口之类的不太清楚,后面看javaguide补一补。找工作居然还要刷题,真是梦回初高中了。初高中的时候在路上刷猿题库,刷百词斩。高考考完刷科目一,现在刷牛客。我真的很感慨,活到现在一直在做题,看似练就了一身应试的本领,却也只是小镇做题家罢了。