三层架构
-
Controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据
-
service:业务逻辑层,处理具体的业务逻辑
-
dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增删查改。
public Result list() {
//1.加载并解析emp.xml
//classloder:类加载器是一个负责加载类的对象,类加载器还负责定位资源
//利用classloder动态获取emp.xml文件路径
String files = this.getClass().getClassLoader().getResource("emp.xml").getFile();
String file = files.replaceAll("%20", " ");//获取文件路径中有空格应当把空格除去
System.out.println(file);
// 调用xml中的parse方法解析emp.xml文件
List<Emp> empList = XmlParserUtils.parse(file, Emp.class);
//2.对数据进行转换处理
empList.stream().forEach(emp -> {//遍历emp.xml文件
//处理gender 1:男,2:女
String gender = emp.getGender();
if ("1".equals(gender)) {
emp.setGender("男");
} else if ("2".equals(gender)) {
emp.setGender("女");
}
//处理job 1: 讲师, 2: 班主任 , 3: 就业指导
String job = emp.getJob();
if ("1".equals(job)) {
emp.setJob("讲师");
} else if ("2".equals(job)) {
emp.setJob("班主任");
} else if ("3".equals(job)) {
emp.setJob("就业指导");
}
});
//3.响应数据
return Result.success(empList);
}
在上述代码中,通过:
-
加载并解析emp.xml文件
-
对数据进行转换处理
-
响应数据
对一份数据进行输出展示
通过三层架构,我们可以将上述的三个部分分别写在三个层级中,通过层层调用做到数据的传递
-
Dao层:数据访问操作
package com.it.dao.impl; import com.it.dao.EmpDao; import com.it.pojo.Emp; import com.it.utils.XmlParserUtils; import java.util.List; public class EmpDaoA implements EmpDao {//使用快捷键Alt+Enter实现接口方法 @Override public List<Emp> listEmp() { //1.加载并解析emp.xml //classloder:类加载器是一个负责加载类的对象,类加载器还负责定位资源 //利用classloder动态获取emp.xml文件路径 String files = this.getClass().getClassLoader().getResource("emp.xml").getFile(); String file = files.replaceAll("%20", " ");//获取文件路径中有空格应当把空格除去 System.out.println(file); // 调用xml中的parse方法解析emp.xml文件 List<Emp> empList = XmlParserUtils.parse(file, Emp.class); return empList; } }
为了增加复用性,应对不同类型的数据(如:xml,mysql等),利用面向接口编程方法的思想,实现一个接口调用
-
Service层:业务逻辑处理
package com.it.service.impl; import com.it.dao.EmpDao; import com.it.dao.impl.EmpDaoA; import com.it.pojo.Emp; import com.it.service.EmpService; import java.util.List; public class EmpServiceA implements EmpService { private EmpDao empDao = new EmpDaoA();//面向接口编程 @Override public List<Emp> listEmp() { //1.调用Dao,获取数据 List<Emp> empList = empDao.listEmp();//快捷键Alt+Enter //2.对数据进行转换处理 empList.stream().forEach(emp -> {//遍历emp.xml文件 //处理gender 1:男,2:女 String gender = emp.getGender(); if ("1".equals(gender)) { emp.setGender("男"); } else if ("2".equals(gender)) { emp.setGender("女"); } //处理job 1: 讲师, 2: 班主任 , 3: 就业指导 String job = emp.getJob(); if ("1".equals(job)) { emp.setJob("讲师"); } else if ("2".equals(job)) { emp.setJob("班主任"); } else if ("3".equals(job)) { emp.setJob("就业指导"); } }); return empList; } }
在这里首先通过创建私有对象empDao引入Dao中的对象,通过创建列表对象接收数据并对其进行处理。
-
Controller层:接收请求,响应数据
package com.it.controller; import com.it.pojo.Emp; import com.it.pojo.Result; import com.it.service.EmpService; import com.it.service.impl.EmpServiceA; import com.it.utils.XmlParserUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class EmpController { private EmpService empService = new EmpServiceA();//先创建EmpService对象,再对其进行调用 @RequestMapping("/listEmp") public Result list() { //调用service层对象获取数据 List<Emp> empList = empService.listEmp(); //3.响应数据 return Result.success(empList); } }
与Service层相似的方法,先创建私有对象empService,然后获取数据放在列表中
三层架构的优点
-
复用性好
-
便于维护
-
利于拓展
-