网站建设 思维导图,导购网站怎么做视频教学,宝洁网站建设,一个新手如何推销产品前言 前端知识会点#xff0c;后端知识一直算是空白#xff0c;但也不算是太空 会java、sql、web#xff0c;好赖懂点#xff0c;现在要串联起来#xff0c;学会服务端开发 也为日后自己做个小项目打点基础#xff08;虽然有点晚#xff0c;但是#xff0c;只要学…前言 前端知识会点后端知识一直算是空白但也不算是太空 会java、sql、web好赖懂点现在要串联起来学会服务端开发 也为日后自己做个小项目打点基础虽然有点晚但是只要学就有机会 本次学习视频教程JavaWeb
自己只做部分知识点的记录详细的可以看老师有自己的讲义可参考 Web后端基础
Maven专家
类似于cocoapods是集成下载第三方库的
搜索第三方库的网址:https://mvnrepository.com/
单元测试 单元测试一般使用JUnit测试框架来进行 有几个好处
测试代码与源代码分开便于维护可根据需要进行自动化测试可自动分析测试结果产出测试报告
Spring
Spring 照猫画虎哈哈画成了~ ResponseBody注解的作用
将controller方法的返回值直接写入HTTP响应体如果是对象或集合会先转为json再响应RestController Controller ResponseBody
分层解耦
三层架构 分层解耦 数据库学习
MySql下载地址 按照MySql后按照Mac安装MySQL详细教程文档配置一下
常用操作
-- 查看当前数据库所有表
show tables;-- 查看表结构
desc emp;-- 查询建表语句
show create table emp;# CREATE TABLE emp (
# id int unsigned NOT NULL AUTO_INCREMENT COMMENT 唯一标识,
# username varchar(20) NOT NULL COMMENT 用户名,
# password varchar(32) DEFAULT 123456 COMMENT 密码,
# name varchar(10) NOT NULL COMMENT 姓名,
# gender tinyint unsigned NOT NULL COMMENT 性别 1男 2女,
# phonenumber char(11) NOT NULL COMMENT 手机号,
# posit tinyint unsigned DEFAULT NULL COMMENT 职位 1班主任 2讲师 3 学工主管,
# salary float unsigned DEFAULT NULL COMMENT 薪资,
# icon varchar(255) DEFAULT NULL COMMENT 头像,
# join_date date DEFAULT NULL COMMENT 入职日期,
# create_time datetime DEFAULT NULL COMMENT 创建时间,
# update_time datetime DEFAULT NULL COMMENT 修改时间,
# qq varchar(13) DEFAULT NULL COMMENT QQ,
# PRIMARY KEY (id),
# UNIQUE KEY id (id),
# UNIQUE KEY username (username),
# UNIQUE KEY phonenumber (phonenumber)
# ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci COMMENT员工表-- 字段添加字段wx
alter table db02.emp add weixin varchar(10) comment 微信号;-- 字段修改字段类型 weixin varchar(10)
alter table emp modify weixin varchar(20);-- 字段修改字段名 weixin - wx
alter table emp change weixin wx varchar(20);-- 字段删除字段 qq
alter table emp drop qq;-- 修改表名
alter table emp rename to employee;-- 删除表
drop table employee;
表查询语句
-- DQL: 基本查询
-- 1. 查询指定字段 name,entry_date 并返回
select name, emp.entry_date from emp;-- 2. 查询返回所有字段
select * from emp;-- 3. 查询所有员工的 name,entry_date, 并起别名(姓名、入职日期)
select name as name1, entry_date as entry_date2 from emp;-- 4. 查询已有的员工关联了哪几种职位(不要重复)
select distinct emp.job from emp;-- DQL: 条件查询
-- 1. 查询 姓名 为 柴进 的员工
select * from emp where name 柴进;-- 2. 查询 薪资小于等于5000 的员工信息
select * from emp where salary 5000;-- 3. 查询 没有分配职位 的员工信息
select * from emp where job is null;-- 4. 查询 有职位 的员工信息
select * from emp where job is not null;-- 5. 查询 密码不等于 123456 的员工信息
select * from emp where password ! 123456;-- 6. 查询 入职日期 在 2000-01-01 (包含) 到 2010-01-01(包含) 之间的员工信息
select * from emp where emp.entry_date between 2000-01-01 and 2010-01-01;-- 7. 查询 入职时间 在 2000-01-01 (包含) 到 2010-01-01(包含) 之间 且 性别为女 的员工信息
select * from emp where emp.entry_date between 2000-01-01 and 2010-01-01 and gender 2;-- 8. 查询 职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息
select * from emp where job in(2, 3, 4);-- 9. 查询 姓名 为两个字的员工信息
# select * from emp where name
select * from emp where name like __;-- 10. 查询 姓 李 的员工信息
select * from emp where name like 李%;-- 11. 查询 姓名中包含 二 的员工信息
select * from emp where name like %二%; -- DQL: 分组查询
-- 聚合函数-- 1. 统计该企业员工数量
select count(emp.id) from emp;
select count(*) from emp;
select count(1) from emp;-- 2. 统计该企业员工的平均薪资
select avg(emp.salary) from emp;-- 3. 统计该企业员工的最低薪资
select min(emp.salary) from emp;-- 4. 统计该企业员工的最高薪资
select max(emp.salary) from emp;-- 5. 统计该企业每月要给员工发放的薪资总额(薪资之和)
select sum(emp.salary) from emp;-- 分组
-- 1. 根据性别分组 , 统计男性和女性员工的数量
select gender, count(*) from emp group by gender;-- 2. 先查询入职时间在 2015-01-01 (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位
select job, count(*) from emp where entry_date 2015-01-01 group by job having count(*) 2;-- 排序查询
-- 1. 根据入职时间, 对员工进行升序排序
select * from emp order by entry_date;-- 2. 根据入职时间, 对员工进行降序排序
select * from emp order by entry_date desc;-- 3. 根据 入职时间 对公司的员工进行 升序排序 入职时间相同 , 再按照 更新时间 进行降序排序
select * from emp order by entry_date asc, update_time desc; JDBC
关系型数据库有很多比如mySql、Oracle、SqlServer 不同的数据库有差别所以有一套提供接口的APIJDBC方便大家用一套API操作不同的数据库
Mybatis又是对JDBC的一层封装 MyBatis Mapper// 加上这句话可以在程序运行时自动为该接口创建一个实现类对象代理对象并且会自动将该实现类对象存入IOC容器
public interface UserMapper {//Select(select id, username, password, name, age from user)//查询所有用户信息public ListUser findAll();Delete(delete from user where id #{id})
// public void deleteById(Integer id);// 无返回值public Integer deleteById(Integer id); // 有返回值Insert(insert into user(username, password, name, age) values(#{username}, #{password}, #{name}, #{age}))public Integer insertUser(User user);// Update(update user set username #{username}, password #{password}, name #{name}, age #{age} where id #{id})Update(update user set username #{username}, password #{password}, name #{name}, age #{age} where id #{id})public Integer updateUser(User user);Update(update user set username #{username} where id #{id})public Integer updateUser2(User user);Select(select * from user where username #{username} and password #{password})
// public User findByUsernameAndPassword(Param(username) String username, Param(password) String password);public User findByUsernameAndPassword( String username, String password);
}import java.util.List;SpringBootTest(classes SpringbootMybatisQuickstartApplication.class) //单元测试的注解
class SpringbootMybatisQuickstartApplicationTests {Autowiredprivate UserMapper userMapper;Testpublic void testFindAll(){ListUser userList userMapper.findAll();userList.forEach(System.out::println);}Testpublic void testDeleteById(){Integer rows userMapper.deleteById(5);System.out.println(rows rows);//影响的行数}Testpublic void testInsertUser(){User user new User(null, zhouyu, 123456, 周瑜, 20);Integer rows userMapper.insertUser(user);System.out.println(rows rows);}Testpublic void testUpdateUser(){User user new User(6, huanggai, 123456, 黄盖, 60);Integer rows userMapper.updateUser(user);System.out.println(rows rows);}Testpublic void testUpdateUser2(){User user new User();user.setId(6);user.setUsername(huanggai2);Integer rows userMapper.updateUser2(user);System.out.println(rows rows);}Testpublic void testFindByUsernameAndPassword(){User user userMapper.findByUsernameAndPassword(huanggai2, 123456);System.out.println(user);}
} yml配置 Web后端实战
Tlias案例
前端服务器是nginx 后端服务器是tomcat
Restful
Restful表述性状态转换它是一种软件架构风格。
get查询 post新增 put修改 delete删除 话说工作这么久大部分接口都是get\post基本上没用过put或者delete 创建新项目需要添加的依赖
有关注解的一些信息
Spring相关注解 SpringBootApplication: 标记在 [TliasWebManagementApplication](file:///Users/mac/IdeaProjects/web-ai-project02/tlias-web-management/src/main/java/com/example/TliasWebManagementApplication.java#L5-L12) 类上这是Spring Boot应用的入口注解组合了多个注解功能用于启用自动配置和组件扫描 RestController: 标记在 [DeptController](file:///Users/mac/IdeaProjects/web-ai-project02/tlias-web-management/src/main/java/com/example/controller/DeptController.java#L12-L25) 类上是 Controller 和 ResponseBody 的组合注解用于构建RESTful Web服务所有方法的返回值都会直接写入HTTP响应体 Autowired: 用于自动装配依赖如在 [DeptController](file:///Users/mac/IdeaProjects/web-ai-project02/tlias-web-management/src/main/java/com/example/controller/DeptController.java#L12-L25) 和 [DeptServiceImpl](file:///Users/mac/IdeaProjects/web-ai-project02/tlias-web-management/src/main/java/com/example/service/impl/DeptServiceImpl.java#L10-L20) 中注入其他组件 Service: 标记在 [DeptServiceImpl](file:///Users/mac/IdeaProjects/web-ai-project02/tlias-web-management/src/main/java/com/example/service/impl/DeptServiceImpl.java#L10-L20) 类上声明这是一个服务层组件会被Spring容器自动检测和管理 Mapper: 标记在 [DeptMapper](file:///Users/mac/IdeaProjects/web-ai-project02/tlias-web-management/src/main/java/com/example/mapper/DeptMapper.java#L8-L12) 接口上这是MyBatis框架的注解表示这是一个Mapper接口用于与数据库交互
Spring MVC相关注解
RequestMapping: 用于映射HTTP请求到处理方法 value /depts: 指定请求的URL路径method RequestMethod.GET: 指定处理GET请求
MyBatis相关注解
Select: 在 [DeptMapper](file:///Users/mac/IdeaProjects/web-ai-project02/tlias-web-management/src/main/java/com/example/mapper/DeptMapper.java#L8-L12) 接口中使用用于直接在注解中编写SQL查询语句
Lombok相关注解 Data: 在 [Dept](file:///Users/mac/IdeaProjects/web-ai-project02/tlias-web-management/src/main/java/com/example/pojo/Dept.java#L8-L16) 和 [Result](file:///Users/mac/IdeaProjects/web-ai-project02/tlias-web-management/src/main/java/com/example/pojo/Result.java#L9-L38) 类上使用自动生成getter、setter、toString等方法 NoArgsConstructor: 生成无参构造函数 AllArgsConstructor: 生成全参构造函数
注解使用时机总结
类级别注解: 通常在定义类时使用如 RestController、Service、Mapper方法级别注解: 用于处理特定请求或执行特定功能如 RequestMapping字段级别注解: 用于依赖注入或数据映射如 AutowiredSQL注解: 直接在Mapper接口方法上编写SQL语句如 Select
这些注解大大简化了Java代码的编写通过声明式的方式实现各种功能减少了样板代码的编写。 内连数据
-- 内连接
-- A. 查询所有员工的ID, 姓名 , 及所属的部门名称 (隐式、显式内连接实现)
select emp.id, emp.name, dept.name from emp, dept where emp.dept_id dept.id;select emp.id, emp.name, dept.name from emp inner join dept on emp.dept_id dept.id;select emp.id, emp.name, dept.name from emp join dept on emp.dept_id dept.id;-- B. 查询 性别为男, 且工资 高于8000 的员工的ID, 姓名, 及所属的部门名称 (隐式、显式内连接实现)
select emp.id, emp.name, dept.name from emp, dept where emp.dept_id dept.id and emp.gender 1 and emp.salary 8000; -- 外连接
-- A. 查询员工表 所有 员工的姓名, 和对应的部门名称 (左外连接)
# select emp.name, dept.name from emp, dept where emp.dept_id dept.id;select emp.name, dept.name from emp left outer join dept on emp.dept_id dept.id;-- B. 查询部门表 所有 部门的名称, 和对应的员工名称 (右外连接)
select emp.name, dept.name from emp right outer join dept on emp.dept_id dept.id;select emp.name, dept.name from dept left outer join emp on emp.dept_id dept.id;-- C. 查询工资 高于8000 的 所有员工的姓名, 和对应的部门名称 (左外连接)
select emp.name, dept.name from emp left outer join dept on emp.dept_id dept.id where emp.salary 8000;