news 2026/6/24 2:54:46

web作业七

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
web作业七

一、三层架构

1.controller:接受请求,响应数据

service:业务逻辑层,处理业务逻辑,接口实现。在service中要创建dao层对象,才能拿到返回数据

dao:数据访问层,负责数据访问操作(增删改查),面向接口的方式

三层架构请求流程:前端发起请求,controller接收请求后调用service进行逻辑处理,service调用dao层,dao调用数据,将数据返回给service,service进行逻辑处理,再将结果返回给controller,controller响应给前端。

Dao层实现类

package com.example.third.dao.impl; import java.util.List; import com.example.third.dao.EmpDao; import com.example.third.pojo.Emp; import com.example.third.utils.XmlParserUtils; //EmpDaoA是EmpDao接口的一个实现类, public class EmpDaoA implements EmpDao { //加载并解析xml文件,获取Emp对象列表,直接使用相对路径来指定xml文件的位置 @Deprecated public List<Emp> listEmp() { String file = "no6/third/src/main/resources/emp.xml"; System.out.println("file:"+file); List<Emp> empList = XmlParserUtils.parse(file, Emp.class); return empList;//调用XmlParserUtils工具类的parse方法,传入xml文件路径和Emp类的Class对象,返回一个Emp对象列表 } }

Dao层接口

package com.example.third.dao; import java.util.List; import com.example.third.pojo.Emp; //EmpDao接口定义了一个方法listEmp(),用于获取员工信息的列表。 public interface EmpDao { //EmpDao接口定义了一个方法listEmp(),用于获取员工信息的列表。这个接口是一个数据访问对象(DAO)接口,负责与数据源进行交互,获取员工信息的数据。 List<Emp> listEmp(); }

二、分层解耦

1.内聚:软件中各个功能模块内部的功能联系

2.耦合:衡量软件中各个层/模块之间的依赖、关联程度,关联度越高,耦合度越高

eg、controller中创建了service类,改变service就要改变controller的代码,二者之间耦合

低耦合高内聚

3.分层解耦

创建service对象放到一个容器中,controller只需要在容器中查找对应的对象,即可完成对象

(1)控制反转(IOC):对象创建的控制权由程序自身转移到容器。在类上加上@Component注解,将当前类交给IOC容器管理。

声明bean的注解@Compoent@Controller(标注在控制器上)@Service(标注在业务类上)@Respostory(标注在数据访问类上)。

@componet(value+“名字”)为bean命名,默认首字母小写

(2)依赖注入(DI):容器为应用程序提供运行时所依赖的资源。在对象前加上@Autowired注解·,运行时IOC容器会提供该类型对象,并赋值给对应变量

(3)Bean是对象(bean):IOC容器中创建、管理的对象

三、Mybatis

1.对教案中的user表进行增删改查的mapper和test测试文件

UserMapperTest.java

package com.example.mybatis01; import com.example.mybatis01.mapper.UserMapper; import com.example.mybatis01.pojo.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.junit.jupiter.api.Test; import java.util.List; @SpringBootTest // 这个注解让测试类能启动Spring容器 public class UserMapperTest { @Autowired // 把UserMapper自动注入进来,方便我们调用 private UserMapper userMapper; // 测试1:查询所有 @Test public void testList() { List<User> list = userMapper.list(); System.out.println("===== 查询所有用户 ====="); for (User user : list) { System.out.println(user); } } // 测试2:根据ID查询 @Test public void testGetById() { User user = userMapper.getById(1); System.out.println("===== 查询ID为1的用户 ====="); System.out.println(user); } // 测试3:新增用户 @Test public void testInsert() { User user = new User(); user.setName("令狐冲"); user.setAge((short) 28); user.setGender((short) 1); user.setPhone("13912345678"); int rows = userMapper.insert(user); System.out.println("===== 新增用户 ====="); System.out.println("影响行数:" + rows); System.out.println("生成的新ID:" + user.getId()); } // 测试4:修改用户(把ID为1的名字改一下) @Test public void testUpdate() { User user = new User(); user.setId(1); user.setName("白眉大侠"); // 把原来叫白眉鹰王的改成白眉大侠 user.setAge((short) 55); user.setGender((short) 1); user.setPhone("18800000000"); int rows = userMapper.update(user); System.out.println("===== 修改用户 ====="); System.out.println("影响行数:" + rows); } // 测试5:删除用户(删除ID为7的用户,如果ID不存在就报错) @Test public void testDelete() { int rows = userMapper.delete(7); System.out.println("===== 删除用户 ====="); System.out.println("影响行数:" + rows); } }

UserMapper.java

package com.example.mybatis01.mapper; import com.example.mybatis01.pojo.User; import org.apache.ibatis.annotations.*; import java.util.List; @Mapper public interface UserMapper { // 1. 查询所有用户 @Select("select id, name, age, gender, phone from [dbo].[user]") List<User> list(); // 2. 根据id查询 @Select("select id, name, age, gender, phone from [dbo].[user] where id = #{id}") User getById(Integer id); // 3. 新增用户(id自增,不传id) @Insert("insert into [dbo].[user](name, age, gender, phone) values(#{name}, #{age}, #{gender}, #{phone})") @Options(useGeneratedKeys = true, keyProperty = "id") // 返回自增id int insert(User user); // 4. 修改用户 @Update("update [dbo].[user] set name=#{name}, age=#{age}, gender=#{gender}, phone=#{phone} where id=#{id}") int update(User user); // 5. 删除用户 @Delete("delete from [dbo].[user] where id = #{id}") int delete(Integer id); }

2.实体类改成lombok来实现

(1)在pom.xml中添加 Lombok 依赖

(2)给 VS Code 装Lombok Annotations Support插件

(3)user.java代码

package com.example.mybatis01.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data // 这个注解会自动生成:getter/setter、toString、equals、hashCode @NoArgsConstructor // 生成无参构造方法 @AllArgsConstructor // 生成全参构造方法 public class User { private Integer id; private String name; private Short age; private Short gender; private String phone; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 2:51:19

深度解构PDFPatcher:.NET生态下的PDF处理技术实现内幕

深度解构PDFPatcher&#xff1a;.NET生态下的PDF处理技术实现内幕 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱&#xff0c;可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档&#xff0c;探查文档结构&#xff0c;提取图片、转成图片等等 项目地址: https://gi…

作者头像 李华
网站建设 2026/6/24 2:50:49

如何快速搭建Arduino ESP32开发环境:新手完整指南

如何快速搭建Arduino ESP32开发环境&#xff1a;新手完整指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 Arduino ESP32开发板凭借其强大的WiFi和蓝牙功能&#xff0c…

作者头像 李华
网站建设 2026/6/24 2:49:09

NVIC_SYSTEMRESET失败卡死

问题&#xff1a;最基础的软复位失败&#xff0c;执行到这个函数之后出现卡死的情况&#xff0c;后续直接触发看门狗复位解决&#xff1a;用gcc开了高级别优化之后降低优化级别相关问题描述&#xff1a;在iar调试里做软复位看着从向cpu发请求到执行初始化配置startup.s文件都正…

作者头像 李华
网站建设 2026/6/24 2:39:59

6.24线上DevCon预约:OpenVINO™开源AI朋友圈,等你来加入

OpenVINO™ DevCon 2026 系列工作坊是英特尔OpenVINO™社区专为开发者打造的全年技术研讨会&#xff0c;覆盖从端侧智能体部署到开源AI生态集成等前沿议题。三月南京首场聚焦「AI PC端侧智能」&#xff0c;五月上海第二场围绕「端云协同智能体」全流程实战。前两场活动结束后&a…

作者头像 李华
网站建设 2026/6/24 2:27:46

HarmonyOS ArkUI 自定义跑道布局:CustomMultiChildLayout 模式深度实践

HarmonyOS ArkUI 自定义跑道布局&#xff1a;CustomMultiChildLayout 模式深度实践一、前言 在移动端与鸿蒙应用的 UI 开发中&#xff0c;布局是构建界面的基石。HarmonyOS ArkUI&#xff08;方舟开发框架&#xff09;提供了丰富的内置布局容器&#xff0c;足以覆盖绝大多数常规…

作者头像 李华