springboot极简教程007-工程建议

SpringBoot笔记汇总【动力节点SpringBoot全套教程完整版】 前言 动力节点的springboot笔记汇总,公开免费。 Spring Boot教程 学习地址 动力节点springboot视频教程-专为springboot初学者打造的教程_哔哩哔哩_bilibili你的三连就是录制视频的动力!一定不要忘记收藏、点赞、投币哦~本套视频基于SpringBoot2.4版本讲解。教程从细节入手,每个事例先讲解pom.xml中的重要依赖,其次application配置文件,最后是代码实现。让你知其所以,逐步让掌握SpringBoot框架的自动配置,starter起步依赖等 阅读详情

组织结构

实体类

建议把实体类统一放在某个包下,包名建议取名:

  • model(模型,也就是MCV模式中的M,Django也是取的该值)
  • entity(Java有些封装的函数参数就是用的这个,也比较推荐)
  • bean(java中的bean就是模型层的类,意即model)
  • pojo(Plain Ordinary Java Object的缩写;不含业务逻辑的java简单对象;完全POJO的系统也称为轻量级系统(lightweight);是相对于EJB而提出的概念。)

实体操作类

用来提供数据库操作接口:

  • JPA中带Repository后缀,如UserRepository
  • MyBatis中带Mapper后缀,如UserMapper

对于通用的操作接口,也可以让实体操作类统一继承一个自己封装的中间层(封装一些常用的接口函数):

  • JPA的做法是继承JpaRepository
  • MyBatis的做法是Mapper、MySqlMapper

例如使用MyBatis时,可以提供一个封装后的通用类CommonMapper:

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

import java.util.List;
import java.util.Map;

//FIXME 特别注意,该接口不能被扫描到,否则会出错
public interface CommonMapper<T> extends Mapper<T>, MySqlMapper<T> {
    List<T> queryList(Map<String, Object> map);
}
 
public interface CourseMapper extends CommonMapper<Course> {
}

意味着实体操作类承诺提供一个queryList的接口

服务接口

一开始很不理解这种模式,原本业务逻辑层可以直接使用实体操作类就完成的事情,硬是弄出许多个类(算上实体类,实体操作类,服务接口,服务实现一共四个了),但是后来发现这种方式还是有好处的,慢慢习惯就好。

服务接口相当于是提供了一个缓冲地带,隔离了业务逻辑层直接与实体操作类的接触,使得后期调整操作接口或者优化会比较方便。

graph LR
A(实体类)-->B(实体操作类)
B-->C(服务接口 缓冲隔离)
C-->D(业务控制层)

服务接口主要用于暴露给逻辑控制层的,等于告诉逻辑控制层:**我有这些接口可以使用,可以在业务中尽情使用。**实际应用发现,业务层需要的接口可能无非就是那几个,如果每次创建服务都去写一遍接口,有点重复,那么怎么办呢?

好办,把重复使用的那些接口封装出去,提到一个基类接口中管理,我们把这个基类服务接口叫做BaseService,例如最基本的增删改查这几个接口很多业务都需要,就把这些接口复用起来,让基类来统一实现和管理,接口如下:

import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 通用接口
 */
@Service
public interface BaseService<T> {

    T selectByKey(Object key);

    int save(T entity);

    int delete(Object key);

    int update(T entity);

    //TODO 其他...
}
import com.example.dao.model.Course;
import com.example.util.Page;

import java.util.List;
import java.util.Map;


public interface CourseService extends BaseService<Course> {
    int deleteByIds(String[] ids);
    int deleteByIds(Long[] ids);
    List<Course> queryList(Map<String, Object> params);
    List<Course> queryList(Page<?> page);
}

其实现代码BaseServiceImpl如下:


import org.springframework.beans.factory.annotation.Autowired;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

/**
 * 通用Service
 *
 * @param <T>
 */
public abstract class BaseServiceImpl<T> implements BaseService<T> {

    @Autowired
    protected Mapper<T> mapper;

    public Mapper<T> getMapper() {
        return mapper;
    }

    @Override
    public T selectByKey(Object key) {
        //说明:根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
        return mapper.selectByPrimaryKey(key);
    }

    @Override
    public int save(T entity) {
        //说明:保存一个实体,null的属性也会保存,不会使用数据库默认值
        return mapper.insert(entity);
    }

    @Override
    public int delete(Object key) {
        //说明:根据主键字段进行删除,方法参数必须包含完整的主键属性
        return mapper.deleteByPrimaryKey(key);
    }

    @Override
    public int update(T entity) {
        //根据主键更新属性不为null的值
        return mapper.updateByPrimaryKeySelective(entity);
    }
}

以后再为实体操作类封装服务接口时,可以这么做:继承BaseService,例如CourseService:

import com.example.dao.model.Course;
import com.example.util.Page;

import java.util.List;
import java.util.Map;


public interface CourseService extends BaseService<Course> {
    int deleteByIds(String[] ids);
    int deleteByIds(Long[] ids);
    List<Course> queryList(Map<String, Object> params);
    List<Course> queryList(Page<?> page);
}

该服务承诺:**除了提供增删改查基础接口功能之外,还提供了批量删除、分页查询的接口,**而且是多种参数形式的接口,比较灵活。

然后再创建一个服务接口的实现类CourseServiceImpl:


import com.example.dao.mapper.CourseMapper;
import com.example.dao.model.Course;
import com.example.util.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 */
@Service
public class CourseServiceImpl extends BaseServiceImpl<Course> implements CourseService {

    @Autowired
    CourseMapper courseMapper;

    @Override
    public int deleteByIds(String[] ids) {
        return this.courseMapper.deleteByIds(ids);
    }

    @Override
    public int deleteByIds(Long[] ids) {
        String[] string_ids = new String[ids.length];

        for (int i = 0; i < ids.length; i++) {
            string_ids[i] = String.valueOf(ids[i]);
        }
        return this.courseMapper.deleteByIds(string_ids);
    }

    @Override
    public List<Course> queryList(Map<String,Object> params) {
        PageHelper.startPage(Integer.parseInt(params.get("page").toString()), Integer.parseInt(params.get("rows").toString()));
        return this.courseMapper.queryList(params);
    }

    @Override
    public List<Course> queryList(Page<?> page) {
        return courseMapper.queryList(page.getCondition());
    }
}

可以发现,CourseServiceImpl无非是代理了CourseMapper(该类是实体操作类),CourseMapper可能只是实现了一些基本的功能,更灵活和多变的功能只不过是由服务层包装了一层而已。

控制层

建议把所有的Controller的类统一放到名为controller的包名下,建议路由映射采用模块化的方式来注册映射,具体可以参考:springboot极简教程005-URL映射

其他推荐

  • 配置文件建议使用application.yml,这也是官方的推荐做法
  • MyBatis的注解与XML方式,推荐使用注解方式
  • 推荐使用gradle编译而不是Maven,即使Maven占据了主流
保姆级教程:2025新版JavPlayer 3.01整合修复版安装配置全流程(N卡/A卡/CPU通用) 本文提供2025新版JavPlayer 3.01整合修复版的保姆级安装配置教程,涵盖N卡、A卡和CPU环境。详细讲解硬件要求、分步安装流程、显卡优化配置及超分辨率模型选择,帮助用户高效完成视频修复任务。 阅读详情

相关推荐

用Python对CAPM和Fama French Three Factor model的初步学习

用Python对CAPM和Fama French Three Factor model的初步学习概述介绍建模与分析CAPMFama French Three-Factor Model总结 概述 本文主要使用CAPM(资本资产定价模型)和Fama French Three Factor model来评估中国股票市场的股票价格。 使用CAPM来选择投资组合,然后建立Fama法国三因素模型来评估投资组合...

weixin_43168138的博客 5452

简单地聊一聊Spring Boot的构架

Spring Boot还提供了很多有用的工具和插件,例如Spring Boot CLI(命令行界面),可以帮助开发人员更加便捷地创建、运行和测试Spring Boot应用程序。在SpringBoot中,Controller层是MVC(Model-View-Controller)模式中的控制器部分,负责处理来自用户发起的HTTP请求,并返回相应的响应结果。它可以用于处理表单提交、客户端数据上传等操作。通过在方法上添加@PostMapping,我们可以定义一个处理该请求的方法,并在方法中编写相应的业务逻辑。

葡萄城技术团队博客 608

基于51单片机的多功能智能路灯控制系统(仿真+代码+原理图)

智能路灯控制系统主要由51单片机最小系统+1602显示模块+DS1302时钟模块+光强检测模块+按键输入模块+声光报警模块+LED照明模块+状态检测电路+人体车辆红外检测模块组成。能实现以下功能: 1.能够按键设定系统时间、工作时间、光照阈值 2.工作时间内路灯点亮,凌晨12点后路灯关闭,有人或车通过是,路灯点亮10s 3.非工作时间光照强度低于阈值,路灯点亮 4.能够检测系统工作状态,路灯应亮未亮,声光报警 5.具备手动控制,能够切换自动/手动控制功能

u012759563的博客 8175

Mybatis简易项目--<多对多查询>学生选课信息的查询

简单的mybatis多对多查询实例详解!

大三软件工程在读,喜爱编程,分享。 1278

CRC校验查表法详解

CRC校验的查表法理解算法原理基础计算查表法原理及计算查表法中的表CRC校验中数据逆序CRC校验中的其它参数 算法原理 CRC(Cyclic Redundance Check)循环冗余校验,是基于某个多项式计算出一组校验码,用于核对数据传输过程中是否被更改或传输错误 基础计算 假设需要检验的数据 g :10100111,这串二进制码可以表示为代数多项式g(x) = x^7 + x^5 + x^2 + x +1, 而作为除数的多项式 h(x) 可以自由选择或者按照国际标准选择,一般h(x)的阶数如果是m

boom的博客 1万+

手势控制 Python !Leap Motion Python 开发教程 (二)

手势控制 Python !Leap Motion Python 开发教程 (二) 现在进入正题,我来给大家总结一下我在使用 Leap Motion 开发过程中的经验以及学到的东西,其中我会概括以及翻译官方给出的注释,为了让这些注释更加通俗易懂,让大家更好理解。 回顾 在上一篇文章中我们讲了如何配置 Leap Motion 的 Python 2.7 的开发环境,如果您还没有配置好您的开发环境,可以参...

成畅的博客 3191

手写SpringBoot,包含ASM获取Controller参数名

背景 读了一些SpringBoot的源码,为了加深理解,准备手写一个简易版SpringBoot框架。一期功能包括了基础的SpringBoot的功能和ASM获取Controller参数名的功能。 git地址在此。 配置 首先是pom.xml,只需引入3个依赖,servlet-api,tomcat-embed,fastjson。 <dependency> <gro...

milugloomy的博客 955

ANSYS 2022R2 安装教程:系统准备、许可证配置与故障排查

ANSYS 是面向工程仿真的多物理场商业软件平台,其安装远非普通应用软件的图形化向导流程,而涉及操作系统版本、运行库精确版本、硬件虚拟化支持、许可证服务架构等系统级配置。理解 ANSYS License Manager 的服务机制与端口依赖、掌握 Visual C++ 和 .NET Framework 的启用逻辑,是保障 Fluent、Mechanical、HFSS 等求解器稳定调用的基础。该技术栈广泛应用于高校教学、航空航天结构分析、电子设备电磁兼容仿真等场景。本指南聚焦 ANSYS 2022R2 版本在

weixin_28559803的博客 595

SpringBoot原理讲述

一、springBoot是如何选择使用Tomcat还是Jetty

sxl123sxl的博客 501

5.1 rocr-runtime libhsakmt event 机制全景—从 Doorbell 到 Signal

本文介绍了ROCm/KFD中的Event机制架构,主要解决GPU异步计算中的反馈问题。Event机制分为三层:硬件层触发事件,内核层管理事件通知,用户态接收处理。事件类型分为三大类:同步类事件(如SIGNAL、QUEUE_EVENT)用于任务完成通知,异常类事件(如MEMORY、HW_EXCEPTION)报告错误,拓扑类事件(如NODECHANGE)处理设备变更。该机制通过共享内存和中断实现高效通信,避免CPU轮询开销。后续文章将深入内核实现、Thunk层封装和多队列完成检测实战。

图形/计算GPU的驱动与虚拟化技术分享园地 1295

自抗扰控制(ADRC)理论与工程实践:6.1 离散时间ADRC的推导

本文系统阐述了自抗扰控制(ADRC)的离散化方法,重点对比了前向欧拉法和基于零阶保持器(ZOH)的精确离散化两种方法。前向欧拉法计算简单但精度较低,稳定性受采样周期约束;ZOH法精度高但对大采样周期更鲁棒。文章详细推导了跟踪微分器、扩张状态观测器和控制律的离散形式,分析了采样周期选择的关键因素,为ADRC的数字实现提供了理论指导。

技术工作者 194

SpringBoot Maven 插件开发-ASM字节码插桩技术修改代码

SpringBoot Maven 插件开发-动态修改代码需求背景maven 插件开发新建插件项目使用插件 需求背景 因业务需要,公司将某项目改造,故需要将业务逻辑层service实现类中所有的私有private方法改为public,以便在项目打包成jar包后,供子类复用父类的私有方法。考虑到业务类比较多,手动改比较麻烦,现采用ASM字节码操作技术编写maven插件,利用插件在项目编译compile阶段进行修改。 maven 插件开发 新建插件项目 1、将项目的pom文件打包方式配置为如下: <pack

ll535299的博客 1155

桌面实施远程光电体积描记法:使用面部视频测量心率的C++详细指南

在现代医疗和健康监测领域,心率是一个非常重要的生理参数,它可以为我们提供关于身体健康状况的重要信息。但是,随着技术的进步,现在我们有了一种新的方法,称为远程光电体积描记法(rPPG),它可以无需与皮肤接触就测量心率。然后,我们从面部颜色的信号序列中提取绿色通道的值,因为绿色通道对于心率的变化最为敏感。在上述代码中,我们使用了OpenCV库,它是一个开源的计算机视觉库,非常适合这种应用。这种变化是由于血液流动引起的,当心脏跳动时,血液流经面部,导致肤色的轻微变化。要实现rPPG,首先需要检测并跟踪人脸。

qq_38334677的博客 608

springboot极简教程014-数据库之MyBatis

MyBatis介绍 Mybatis是sql-mapping框架而不是orm框架,Mybatis是OXM设计不是对象关系映射。 添加依赖 &lt;!--MyBatis--&gt; &lt;dependency&gt; &lt;groupId&gt;org.mybatis.spring.boot&lt;/groupId&gt; &lt;artifactId&gt;mybatis-s...

大星星的专栏 221

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

MyBatis Plus 极简入门

MyBatis Plus 极简入门 MyBatis Plus 是一款基于 MyBatis 数据持久化的国产开源框架,其核心功能就是简化 MyBatis 的开发,提高效率。 MyBatis-Plus (opens new window)(简称MP)是一个MyBatis (opens new window)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。 1.快速上手 MyBatis Plus SpringBoot 2.3.7 + MyBatis Plus 3.4.2(国产

qq_41775769的博客 667

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

操作007:整合SpringBoot

操作007:整合SpringBoot

程序员码小跳 4647

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【亲测免费】 SpringBoot-Learn项目教程

SpringBoot-Learn项目教程 一、项目介绍 SpringBoot-Learn 是一个全面覆盖Spring Boot学习与实践的开源项目,由@shusheng007维护。本项目旨在提供一个从入门到进阶的一站式学习资源,涵盖了Spring Boot的基础配置、自动配置原理、集成MyBatis、Redis、RabbitMQ等多种中间件,还包括但不限于RESTful API开发、Spring ...

gitblog_00351的博客 482

【黑马】JavaWeb开发教程(涵盖Spring+MyBatis+SpringMVC+SpringBoot等)目录合集

黑马程序员2023新版JavaWeb开发教程目录合集,实现javaweb企业开发全流程(涵盖Spring+MyBatis+SpringMVC+SpringBoot等)。

汤姆lazy的优快云博客 4万+

007SpringBoot整合Druid

Druid简介 配置数据源 1、添加上 Druid 数据源依赖。 2. 配置数据源 3.测试 4.自己的配置 5.导入Log4j 的依赖 6、为 DruidDataSource 绑定全局配置文件中的参数,再添加到容器中,而不再使用 Spring Boot 的自动生成了;我们需要 自己添加 DruidDataSource 组件到容器中,并绑定属性; 7、去测试类中测试一下;看是否成功! SpringBoot-servlet 配置Druid数据源监控 DruidConfig 监控 filter 过滤

gh_xiaohe的博客 884

SpringBoot入门必备教程,轻松使用springboot

Spring Boot 去除了大量的 xml 配置文件,简化了复杂的依赖管理,配合各种 starter 使用,基本上可以做到自动化配置。Spring 可以做的事情,现在用 Spring boot 都可以做。 动力节点的Spring Boot 框架快速入门教程以大量示例讲解了 Spring Boot 在各类情境中的应用,让大家可以跟着老师的思维和代码快速理解并掌握。适用于 Java 开发人员,尤其是初学 Spring Boot 的人员和需要从传统 Spring 转向 Spring Boot 开发的技术人员.

Javanewspaper的博客 279

SpringBoot系统集成教程

Lison。

苍云烟 582

007 SpringBoot的@EnableAutoConfiguration注解

一:原理 1.   首先Spring Boot项目中都会如下启动类: @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args)...

weixin_30821731的博客 115

SpringBoot3超详细教程,springboot实战通俗易懂版本

181-项目-首页文章功能的VO-PO-Mapper-Service-Controller。145-Web-WebMvcConfigurer-自定义Formatter。148-Web-WebMvcConfigurer-多拦截器和order。075-MyBatis-查询@Select-@Results。144-Web-WebMvcConfigurer-页面控制器。147-Web-WebMvcConfigurer-权限拦截器。146-Web-WebMvcConfigurer-拦截介绍。

rita_0567的博客 927

SpringBoot 2.0 系列007 --WEB容器详解

SpringBoot 2.0 系列007 --WEB容器详解我们知道java常用的两大容器tomcat和jetty,其中SB默认内嵌了tomcat容器。那么SB都支持什么属性呢?参阅ServerProperties.java基本是通用的服务器配置,以及error、Compression、Http2、Servlet、Tomcat、Jetty、Undertow等配置。可用配置1. 通用服务配置port...

前往JAVA架构的路上 4668

SpringBoot初学入门教程,带你快速学会使用springboot

Spring Boot 去除了大量的 xml 配置文件,简化了复杂的依赖管理,配合各种 starter 使用,基本上可以做到自动化配置。Spring 可以做的事情,现在用 Spring boot 都可以做。 这套 Spring Boot 框架快速入门教程以大量示例讲解了 Spring Boot 在各类情境中的应用,让大家可以跟着老师的思维和代码快速理解并掌握。适用于 Java 开发人员,尤其是初学 Spring Boot 的人员和需要从传统 Spring 转向 Spring Boot 开发的技术人员。 .

Java_Leo12的博客 413

SpringBoot教程,初学者用7天学完springboot直接去面试

如果你跟我一样,刚巧也是springboot小白,正要学springboot,建议看完下一段话: Spring Boot 是由 Pivotal 团队提供用来简化 Spring 的搭建和开发过程的全新框架。随着近些年来微服务技术的流行,Spring Boot 也成了时下炙手可热的热点技术。 课程是基于SpringBoot2.4版本讲解。教程从细节入手,每个事例先讲解pom.xml中的重要依赖,其次application配置文件,最后是代码实现。让你知其所以,逐步让掌握SpringBoot框架的自动配置,.

Java_Leo12的博客 1127
上一篇: springboot极简教程006-使用JSP
下一篇: springboot极简教程008-使用thymeleaf
asmcvc
博客等级 码龄19年 724粉丝 326原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

asmcvc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值