<Spring Boot>开发基于三层架构设计:Dao层、Service层、Controller层及案例一

这篇具有很好参考价值的文章主要介绍了<Spring Boot>开发基于三层架构设计:Dao层、Service层、Controller层及案例一。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

三层架构设计:基于Spring Boot开发要使用三层架构:

数据访问层(Dao)、业务逻辑层(Service)、控制层(Control-ler)

(1)数据访问层(Dao):Dao层是最底层的设计,用户操作数据库。通过MyBatis持久化实现接口开发,XML文件。Dao层的设计步骤:1、在数据库中生成数据库表 2通过XML文件实现数据库的映射和操作。

(2)业务逻辑层(Service):Service层是中间层,在Dao层和Controller层之间进行逻辑处理工作。考虑到程序 的耦合度问题,为了降低各个模块的关联,每个接口都封装有各自的业务处理方法。

(3)控制层(Controller):Controller是第三层,通过调用Service层,与前端页面交互。

CRUD案例如下:

Controller层:


@Slf4j
@RestController
@RequestMapping("/xxxList")
public class XxxListController {

    @Autowired
    private XxxListService xxxListService;
	
	/**
     * 查询:配置
     * 权限-管理员
     *
     * @param param
     * @return
     */
    @PostMapping(value = "/selectXxxConfig")
    @AuthInterceptor("mg:getXxx:selectXxxConfig")
    public Result selectXxxConfig(@RequestBody String param) {
        try {
            Map<String, Object> paramMap = JsonUtils.readValue(param, Map.class);
            return Result.success().result(xxxListService.selectXxxConfig(paramMap));
        } catch (Exception e) {
            log.error("XxxListController selectXxxConfig is error===:" + e.getMessage(), e);
            return Result.failure("查询失败");
        }
    }
	
	/**
     * 新增/修改:配置
     * 权限-管理员
     *
     * @param param
     * @return
     */
    @PostMapping(value = "/addOrModifyXxxConfig")
    @AuthInterceptor("mg:getXxx:addOrModifyXxxConfig")
    public Result addOrModifyXxxConfig(@RequestBody String param) {
        try {
            Map<String, Object> paramMap = JsonUtils.readValue(param, Map.class);
            xxxListService.addOrModifyXxxConfig(paramMap);
        } catch (Exception e) {
            log.error("XxxListController addOrModifyXxxConfig is error===:" + e.getMessage(), e);
            return Result.failure("更新失败");
        }
        return Result.success().result(null);
    }
	
	/**
     * 删除:表单数据
     * 权限-管理员
     *
     * @param param
     * @return
     */
    @PostMapping(value = "/deleteData")
    @AuthInterceptor("mg:getXxx:deleteData")
    public Result deleteFormData(@RequestBody String param) {
        try {
            Map<String, Object> paramMap = JsonUtils.readValue(param, Map.class);
            xxxListService.deleteData(paramMap);
        } catch (Exception e) {
            log.error("XxxListController deleteData is error===:" + e.getMessage(), e);
            return Result.failure("数据删除失败");
        }
        return Result.success().result(null);
    }
    
}	

Servicer层:

	
public interface XxxListService {

    //查询:配置
    PageInfo<Map<String, Object>> selectXxxConfig(Map<String, Object> paramMap);
	
    //新增/修改:配置
    Result addOrModifyXxxConfig(Map<String, Object> paramMap);
	
	//删除:表单数据
    void deleteData(Map<String, Object> paramMap);

}

ServicerImpl层:

	
@Slf4j
@Service
public class XxxListServiceImpl implements XxxListService {

	@Autowired
    private XxxListMapper xxxListMapper;
	
	/*
     * 查询:配置
     *
     */
    @Override
    public PageInfo<Map<String, Object>> selectXxxConfig(Map<String, Object> paramMap) {CommonUtil.getPageHelper(paramMap);
        List<Map<String, Object>> list = xxxListMapper.selectXxxConfig(paramMap);
        PageInfo<Map<String, Object>> result = new PageInfo<>(list);
        return result;
    }	
	
	/*
     * 新增/修改:配置
     *
     */
    @Override
    public Result addOrModifyXxxConfig(Map<String, Object> paramMap) {
        String addOrModify = String.valueOf(paramMap.get("addOrModify"));
        if(addOrModify.equals("add")){
            paramMap.remove("addOrModify");
            List<Map<String,String>> reg = getRegionList();  // 获取地域信息
            List<Map<String,String>> list = xxxListMapper.selectXxxRegAll();  // 查询本数据库地域信息
            Iterator<Map<String, String>> iterator = reg.iterator();
            while (iterator.hasNext()){
                Map<String, String> next = iterator.next();
                String name = String.valueOf(next.get("name"));
                String code = String.valueOf(next.get("code"));
                next.put("isEnable","1");
                Iterator<Map<String, String>> iterator2 = list.iterator();
                while (iterator2.hasNext()){
                    Map<String, String> next2 = iterator2.next();
                    String regionName = String.valueOf(next2.get("name"));
                    String RegionCode = String.valueOf(next2.get("code"));
                    if(name.equals(regionName) && code.equals(RegionCode)){
                        iterator.remove();
                    }
                }
            }
            if(reg.size() > 0){
                xxxListMapper.addXxxConfig(reg);
            }
        }
        else if(addOrModify.equals("modify")){  // "isEnableVal",1:"使用",2:"停用"
            String sortId = String.valueOf(paramMap.get("sortId"));
            String isEnable = String.valueOf(paramMap.get("isEnable"));
            if(!sortId.equals("null") && !sortId.equals("") || !isEnable.equals("null") && !isEnable.equals("")){
                xxxListMapper.modifyXxxConfig(paramMap);
            }
        }
        return Result.success().result(null);
    }
	
	/*
     * 删除:表单数据
     *
     */
    @Override
    public void deleteData(Map<String, Object> paramMap) {
        xxxListMapper.deleteData(paramMap);
    }
    
}

Mapper层(又称Dao层):

	
@Mapper
public interface XxxListMapper {

	//查询:所有配置(先查所有配置)
    List<Map<String, String>> selectXxxRegAll();

    //查询:配置
    List<Map<String, Object>> selectXxxConfig(Map<String, Object> paramMap);
	
	//新增:配置
    void addXxxConfig(List<Map<String, String>> paramList);
	
	//修改:配置
    void modifyXxxConfig(Map<String, Object> paramMap);
	
	//删除:表单数据
    void deleteData(Map<String, Object> paramMap);
	
}

Mapper.xml层(MyBatis层):文章来源地址https://www.toymoban.com/news/detail-612904.html

	
<?xml version="1.0" encoding="UTF-8"?>
<!--约束条件-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--命名空间:找到所在的XxxListMapper接口的位置-->
<mapper namespace="com.itheima.service.mapper.XxxListMapper">

<!--sql语句代码-->
	
	<!-- 查询:所有配置(先查所有配置) -->
    <select id="selectXxxRegAll" resultType="map">
        SELECT *
        FROM xxx_region_list_dic where 1 = 1
    </select>
	
	<!-- 查询:配置 -->
    <select id="selectXxxConfig" parameterType="map" resultType="map">
        SELECT *
        FROM xxx_region_list_dic where 1 = 1
        <!-- 分页字段 -->
        <if test="null != processResult">
            and processResult = #{processResult}
        </if>
        <if test="null != name and '' != name">
            and name = #{name}
        </if>
        <if test="null != code and '' != code">
            and code = #{code}
        </if>
        <if test="null != isEnable and '' != isEnable">
            and isEnable = #{isEnable}
        </if>
        order by sortId
    </select>
	
	<!-- 新增:配置 -->
    <insert id="addXxxConfig" parameterType="java.util.List">
        <foreach collection="list" item="region" index="index" separator=";">
            INSERT IGNORE INTO xxx_region_list_dic
            <foreach collection="region.entrySet()" index="key" separator="," open="(" close=")">
                ${key}
            </foreach>
            VALUES
            <foreach collection="region.entrySet()" item="value" separator="," open="(" close=")">
                #{value}
            </foreach>
        </foreach>
    </insert>

	<!-- 修改:配置 -->
    <update id="modifyXxxConfig" parameterType="map">
        update xxx_region_list_dic
        <set>
            <if test = "null != sortId and '' != sortId">
                sortId = #{sortId},
            </if>
            <if test = "null != isEnable and '' != isEnable">
                isEnable = #{isEnable}
            </if>
        </set>
        where
        <if test = "null != seqId and '' != seqId">
            seqId = #{seqId}
        </if>
    </update>
	
	
	<!-- 删除:表单数据 -->
    <delete id="deleteData">
        delete from xxx_form_data_list
        where
        <if test = "null != No and '' != No">
            No = #{No}
        </if>
    </delete>
	
</mapper>

到了这里,关于<Spring Boot>开发基于三层架构设计:Dao层、Service层、Controller层及案例一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring boot入门与理解MVC三层架构

    分层是为了实现“高内聚,低耦合”,把问题划分开来,各个解决,易于控制,延展和分配资源,最重要有利于后期维护项目; MVC指的是model,view,controller; 在SpringMVC编程中一般分为四层: 1.表示层:(jsp、html 主要就是界面的展示),负责前后端交互,接收前端发送的请求,

    2024年02月05日
    浏览(36)
  • MVC设计模式、JSP开发模式、三层架构&MVC练习学生信息管理系统

    本文将介绍MVC设计模式、JSP开发模式、三层架构和MVC练习的基本概念,并演示如何使用这些技术来构建一个学生信息管理系统。该系统将包括数据库准备、查询、增加、删除、更新和分页功能。 MVC是一种软件架构模式,将应用程序分为三个部分:模型(Model)、视图(View)和

    2023年04月25日
    浏览(31)
  • springboot三层架构解决报错信息:o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet

    报错信息: postman测试返回的报错信息: controller层代码: 解决办法是将注释@Controller改成@RestController,就可以成功运行,原因我也不知道,刚学这个没多久,记录下来,如果有人能告诉我·原因的话,我会非常感激的。

    2024年02月07日
    浏览(40)
  • 后端开发基础概念 Entity,DAO,DO,DTO,VO, Service,Controller

    Entity主要用于ORM(对象关系映射)框架中,如Hibernate、MyBatis等,以便将数据库中的数据映射为对象,方便进行业务操作。 Entity通常与数据库表一一对应,代表 业务数据 的基本单元。 通常放在项目的model或entity包下。   DAO(数据访问对象): DAO是连接业务逻辑和数据库的桥

    2024年04月08日
    浏览(31)
  • Java基础(项目1)——项目设计分层 & dao + service + test +ui + exception + log + util

    1.为什么建那么多层,dao,service… 2.项目设计分层初步; 3.本文以养老院老人信息管理、招聘应聘控制台项目为例; git仓库地址 IO流及其项目应用初步 (1)类需要实现Serializable序列化接口 (2)dao层的接口和实现分离 接口: 实现: 参考下面文章: java连接SQL数据库 单例封

    2024年02月09日
    浏览(31)
  • EasyCode代码生成插件-模板分享(基于数据表生成MyBatisPlus格式的dao,service,controller和vue组件)

    目录 概述 使用演示 模板代码    实体类pojo   表现层controller 业务层service接口  业务层serviceImpl实现类 持久层dao Vue组件    本片博客用于分享EasyCode的自定义模板(模板在篇末),用于简化开发,免去重复性的工作。 作用: 1.根据数据库表,后端生成基于MyBatisPlus结构下的

    2024年02月10日
    浏览(47)
  • Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单

       一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点:对草稿进行编辑,驳回的立项编辑,在途流程查看。 二、项目管

    2024年02月17日
    浏览(36)
  • Spring Boot中的service层

    spring Boot中的service层是业务逻辑层,负责处理业务需求,封装业务方法,调用dao层的数据操作1。service层一般是一个接口和一个实现类,用@Service注解标注实现类2。service层的接口可以在controller层中调用,实现数据的传递和处理。 一个service层的示例代码如下: 首先,需要定义

    2024年02月12日
    浏览(33)
  • 【Spring MVC】快速学习使用Spring MVC的注解及三层架构

    💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【Spring MVC】快速学习使用Spring MVC的注解及三层架构 🎉欢迎大家点赞👍评论📝收藏⭐文章 SpringWebMVC是基于ServletAPI构建的原始Web框架,从⼀开始就包含在Spring框架中。它的正式名称“SpringWebMVC”来⾃其源模块的名称(Spri

    2024年04月17日
    浏览(32)
  • 基于 Spring Boot 博客系统开发(三)

    本系统是简易的个人博客系统开发,为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。🌿🌿🌿 基于 Spring Boot 博客系统开发(二)👈👈 在Thymeleaf中,如果你想要抽取公共页面(例如,头部、底部、导航栏等),可以通过定义和使用片段(fragments)和包含(includes)来

    2024年04月28日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包