web作业七 📅 2026/6/24 2:54:58 一、三层架构1.controller:接受请求响应数据service业务逻辑层处理业务逻辑接口实现。在service中要创建dao层对象才能拿到返回数据dao数据访问层负责数据访问操作增删改查面向接口的方式三层架构请求流程前端发起请求controller接收请求后调用service进行逻辑处理service调用dao层dao调用数据将数据返回给serviceservice进行逻辑处理再将结果返回给controllercontroller响应给前端。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 ListEmp listEmp() { String file no6/third/src/main/resources/emp.xml; System.out.println(file:file); ListEmp 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接口负责与数据源进行交互获取员工信息的数据。 ListEmp listEmp(); }二、分层解耦1.内聚软件中各个功能模块内部的功能联系2.耦合衡量软件中各个层/模块之间的依赖、关联程度关联度越高耦合度越高eg、controller中创建了service类改变service就要改变controller的代码二者之间耦合低耦合高内聚3.分层解耦创建service对象放到一个容器中controller只需要在容器中查找对应的对象即可完成对象1控制反转IOC对象创建的控制权由程序自身转移到容器。在类上加上Component注解将当前类交给IOC容器管理。声明bean的注解CompoentController标注在控制器上Service标注在业务类上Respostory标注在数据访问类上。componetvalue“名字”为bean命名默认首字母小写2依赖注入DI容器为应用程序提供运行时所依赖的资源。在对象前加上Autowired注解·运行时IOC容器会提供该类型对象并赋值给对应变量3Bean是对象beanIOC容器中创建、管理的对象三、Mybatis1.对教案中的user表进行增删改查的mapper和test测试文件UserMapperTest.javapackage 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() { ListUser 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.javapackage 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]) ListUser 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; }