当前位置: 首页 > news >正文

JavaWeb开发---学习---(一)

前言

前端知识会点,后端知识一直算是空白,但也不算是太空
会java、sql、web,好赖懂点,现在要串联起来,学会服务端开发
也为日后自己做个小项目打点基础(虽然有点晚,但是,只要学,就有机会)

本次学习视频教程:JavaWeb

自己只做部分知识点的记录,详细的,可以看老师有自己的讲义,可参考


Web后端基础

Maven(专家)

类似于cocoapods,是集成下载第三方库的

搜索第三方库的网址:https://mvnrepository.com/

单元测试

在这里插入图片描述

在这里插入图片描述

单元测试,一般使用JUnit(测试框架)来进行
有几个好处:

  1. 测试代码与源代码分开,便于维护
  2. 可根据需要进行自动化测试
  3. 可自动分析测试结果,产出测试报告

Spring

Spring

在这里插入图片描述
在这里插入图片描述

照猫画虎,哈哈,画成了~

@ResponseBody注解的作用

  1. 将controller方法的返回值直接写入HTTP响应体
  2. 如果是对象或集合,会先转为json,再响应
  3. @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`)
# ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_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
不同的数据库有差别,所以,有一套提供接口的API:JDBC,方便大家用一套API,操作不同的数据库

Mybatis又是对JDBC的一层封装

在这里插入图片描述

MyBatis

在这里插入图片描述

@Mapper// 加上这句话,可以在程序运行时,自动为该接口创建一个实现类对象(代理对象),并且会自动将该实现类对象存入IOC容器
public interface UserMapper {//@Select("select id, username, password, name, age from user")//查询所有用户信息public List<User> 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(){List<User> 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: 生成全参构造函数

注解使用时机总结

  1. 类级别注解: 通常在定义类时使用,如 @RestController@Service@Mapper
  2. 方法级别注解: 用于处理特定请求或执行特定功能,如 @RequestMapping
  3. 字段级别注解: 用于依赖注入或数据映射,如 @Autowired
  4. SQL注解: 直接在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;
http://www.dtcms.com/a/412815.html

相关文章:

  • 建立网站需要多少钱?网站搭建规划模板
  • 深入理解二叉树——从结构和递归原理到实战
  • Java线程安全:volatile与wait/notify详解
  • 做网站 pc端与手机端兼容淘宝店可以做团购的网站吗
  • php源码怎么建设网站响应网站怎么做
  • 长春网站设计哪家好网站是com好点还是cn
  • 住建部官方网站许昌市住房和城乡建设部网站
  • C++ 继承与派生详解:从概念到代码实战
  • C++扩展 --- 并发支持库(补充3)
  • 高级建站网站十大装饰公司排行榜
  • 苏州专门网站网络架构有几种模式
  • 深度学习任务
  • 网站建设思路及设计方案wordpress如何汉化
  • 营销网站建设设计菏泽 网站建设公司
  • 做素材类的网站赚钱吗青岛胶南做网站的有多少
  • 如何查询网站是否有做404商业模式包括哪些模式
  • 网站被降权表现佛山网站专家
  • 重庆做网站制作的公司做网站去哪找客户
  • 土地 水利 勘测设计 公司宣传册设计样本江门当地的免费网站优化
  • “常小豚苏超限定款”公益联名:以热爱之名守护生态赛场
  • 深圳网站建设设计首选公司搜索关键词排名推广
  • 怎么把自己网站推广出去在线域名注册
  • 贵州网站备案查询ftp跟网络连接Wordpress
  • 南京手机网站制作网络营销成功案例3篇
  • wordpress 多站点主题精准信息预测
  • 高端网站自己怎么做网页
  • 【香橙派开发笔记】中文界面与输入法配置
  • 做网站虚拟主机哪家好房地产网站建设招商
  • 大气的企业网站源码新西兰网站开发专业
  • 上海模板网站建站易网网站