部门信息管理系统Dao层优化(数据库)

一、目标

  因为业务中经常需要将数据储存在数据库中,所以之前所设计的从文本文件中读取数据的Dao层已经不能再用,现在需求为:查询数据库表中的所有部门数据,展示在页面上。

准备工作:

  1. 准备数据库表 `dept`(部门表),以及实体类 `Dept`。
  2. 在项目中引入 MyBatis 的起步依赖和 MySQL 的驱动包。
  3. 在项目的 `application.properties` 中引入 MyBatis 的配置信息(包括数据库连接和日志输出)。

代码实现:
  1. 定义 `mapper` 包,并在其中定义 `DeptMapper` 接口,同时声明接口方法。
  2. 改造之前编写的 `dao` 和 `service` 的代码,在 `service` 实现类中注入 `mapper` 接口。

 

二、准备工作

相关依赖配置:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.19</version></dependency></dependencies>

application.properties设置:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
//数据库驱动类设置为 MySQL 的最新驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
spring.datasource.username=root
spring.datasource.password=1234
//启用 MyBatis 的 SQL 日志输出到控制台,便于调试和监控 SQL 执行情况。
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
/*启用了 下划线转驼峰 功能,MyBatis 在将数据库列映射为 Java 对象时,
会将数据库中的下划线字段名(如 user_name)
自动映射为 Java 属性名(如 userName)。*/
mybatis.configuration.map-underscore-to-camel-case=true

dept类:

package com.zhang.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {//项目中推荐使用包装类型,因为基本类型有默认值private Integer id;private String name;private LocalDateTime createTime;private LocalDateTime updateTime;
}

三、代码实现

Mapper层实现:

package com.zhang.Mapper;
@Mapper
public interface DeptMapper {@Select("select id, name, create_time, update_time from dept")public List<Dept> findAll();
  • 功能:定义了部门数据的查询接口,与数据库直接交互。
  • 注解@Mapper 用于标记这是一个 MyBatis 的 Mapper 接口。
  • 方法findAll() 方法通过注解 @Select,直接执行 SQL 查询语句,从 dept 表中获取所有部门记录。
  • 返回值:返回包含所有部门信息的 List<Dept> 对象。

拓展:

因为在配置application.properties开启了驼峰开关,所以可以直接select create_time, update_time

因为dept中的命名是 createTime和updateTime。

给出另外两种的写法(如果没有开启驼峰命名):

手动结果映射:通过 @Results@Result 进行手动结果映射

@Results({@Result(column = "create_time", property = "createTime"),@Result(column = "update_time", property = "updateTime")
})
@Select("select * from dept")
public List<Dept> list();

起别名SQL语句中,对不一样的列名起别名,别名和实体类属性名一样。

@Select("select id, name, create_time createTime, update_time updateTime from dept")
public List<Dept> list();

DeptServiceimpl层实现:

package com.zhang.Service.impl;
@Service
public class DeptServiceimpl implements DeptService {@Autowiredprivate DeptMapper deptMapper;@Overridepublic List<Dept> list() throws Exception {return deptMapper.findAll();}
  • 功能:实现业务逻辑层接口,封装和处理数据访问的细节。
  • 注解@Service 标记这是一个服务类,供 Spring 管理 Bean 的生命周期,交给IOC容器管理
  • 方法list():调用 Mapper 层的 findAll() 方法,获取部门数据,负责业务逻辑处理(本例中没有复杂逻辑,直接返回数据)。
  • 依赖注入:通过 @Autowired 注入 DeptMapper,实现对数据层的调用。

DeptController层实现:

  • 功能:作为 Web 层的入口,处理与客户端的 HTTP 请求和响应。
  • 注解
    • @RestController:标记为一个控制器,返回 JSON 格式数据。
    • @RequestMapping("/depts"):定义基础路径 /depts,映射客户端的请求。
    • @Slf4j:启用日志功能,方便记录调试信息。
  • 方法
    • list():处理客户端的 GET 请求,调用 Service 层的 list() 方法,获取部门列表,包装为标准响应格式 Result.success() 并返回。
package com.zhang.Controller;
@Slf4j
@RequestMapping("/depts")
@RestController
public class DeptController {@Autowiredprivate DeptService deptService;@GetMappingpublic Result list() throws Exception {List<Dept> deptlist = deptService.list();return Result.success(deptlist);}

四、总结

 上述改造的三层分别定义了数据访问层(Mapper)、业务逻辑层(Service)和控制层(Controller),实现了一个完整的 查询所有部门信息 功能的流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/475270.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter:photo_view图片预览功能

导入SDK photo_view: ^0.15.0单张图片预览&#xff0c;支持放大缩小 import package:flutter/material.dart; import package:photo_view/photo_view.dart;... ...class _MyHomePageState extends State<MyHomePage>{overrideWidget build(BuildContext context) {return…

React面试宝典

React Diff 在 React 中,diff 算法需要与虚拟 DOM 配合才能发挥出真正的威力。react 会使用 diff 算法计算出虚拟 DOM 中真正发生变化的部分&#xff0c;并且只会针对该部分进行 dom 操作&#xff0c;从而避免了对页面进行大面积的更新渲染&#xff0c;减少性能的开销。 Reac…

脚手架vue-cli,webpack模板

先安装node.js&#xff0c;它是服务器端&#xff0c;用于给页面提供服务。前端学习不需要会node.js&#xff0c;只需要学会node.js衍生出来的npm命令即可。 npm 是node.js的一个工具&#xff0c;作用是进行包管理&#xff0c;npm是node.js的包管理器。 接着安装脚手架&#xff…

二叉搜索数(二叉排序树、二叉查找树)-----详解

C系列—二叉搜索树 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 前言 一、二叉搜索树 1.1、二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&…

SPSS统计学:全距

概念 全距&#xff0c;也被称为极差&#xff0c;是统计学中衡量数据变异程度的一项指标。它代表了一组数据中最大值和最小值之间的差距&#xff0c;计算方式为最大值减去最小值。 用途 全距直观地揭示了总体内数值变化的幅度&#xff0c;或者说是标志值差异的范围&#xff0…

飞米仕智能门锁:以科技之名,重塑未来家居安全新篇章

在智能科技日新月异的今天&#xff0c;家居安全已悄然迈入了一个全新的智能化时代。近日&#xff0c;飞米仕智能门锁在杭州未来科技城举办了一场盛大的新品发布会&#xff0c;正式推出了其高端旗舰产品——飞米仕智能门锁K10系列。K10系列分为尊享版和旗舰版&#xff0c;售价分…

基于Java Springboot旅游民宿信息管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

SpringBoot - spring.profiles.active最佳实践

文章目录 Pre概述为什么需要多环境配置多环境配置实现步骤1. 配置文件准备2. 激活特定环境方法1&#xff1a;命令行参数方法2&#xff1a;环境变量方法3&#xff1a;IDE 配置方法4&#xff1a;全局配置文件默认设置 3. 配置文件加载顺序配置生效的原理 4. 常见问题多个配置文件…

详细描述一下Elasticsearch索引文档的过程?

大家好&#xff0c;我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 详细描述一下Elasticsearch索引文档的过程&#xff1f; Elasticsearch的索引文档过程是其核心功能之一&#xff0c;涉及将数据存储到…

03 —— Webpack 自动生成 html 文件

HtmlWebpackPlugin | webpack 中文文档 | webpack中文文档 | webpack中文网 安装 npm install --save-dev html-webpack-plugin 下载html-webpack-plugin本地软件包 npm i html-webpack-plugin --save-dev 配置webpack.config.js让webpack拥有插件功能 const HtmlWebpack…

如何控制自己玩手机的时间?两台苹果手机帮助自律

对一些人来说&#xff0c;被智能手机“绑架”是一件心甘情愿的事&#xff0c;和它相处的一天中&#xff0c;不必面对现实的压力&#xff0c;它就像个“舒适区”。这是因为在使用手机的过程中&#xff0c;应用程序&#xff08;尤其是游戏和社交媒体应用&#xff09;会不断刺激大…

解决“400 Bad RequestThe plain HTTP request was sent to HTTPS portnginx/1.23.1”

目录 一、问题描述 二、问题解决 三、问题原因 &#xff08;1&#xff09;问题成因 &#xff08;2&#xff09;那为什么访问其他网站的时候&#xff0c;其不会出错呢&#xff1f;而且自己会用https协议&#xff1f; 一、问题描述 在浏览器直接输入&#xff1a;“xxx.xxx.x…

有趣的跳马问题与最优路径

献给皮鞋&#x1f45e;经理 有一个无限大的棋盘&#xff0c;在某个点有一个只能走日的马&#xff0c;计算马到达棋盘上任意一个点 P(x, y) 最小步数。 “走日” 规则下&#xff0c;任意坐标的 “马” 是否可达任意其它坐标需要证明。按照递归原则&#xff0c;只需证明 “马” …

IDEA自定义文件打开格式

介绍在IDEA中自定义文件打开格式的方法&#xff0c;比如一个文件&#xff0c;可以选择用txt格式打开&#xff0c;也可以选择用xml格式打开&#xff0c;也可以用java格式打开等等&#xff0c;通过这个方法可以方便的用任意格式在idea中打开想要打开的文件。 下面分别讨论三种不…

百度智能云千帆大模型平台引领企业创新增长

本文整理自百度世界大会 2024——「智能跃迁 产业加速」论坛的同名演讲。 更多大会演讲内容&#xff0c;请访问&#xff1a; https://baiduworld.baidu.com 首先&#xff0c;跟大家分享一张图&#xff0c;这个是我们目前大模型应用落地的场景分布。可以看到&#xff0c;大模型…

【蓝桥杯C/C++】翻转游戏:多种实现与解法解析

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: 蓝桥杯C/C 文章目录 &#x1f4af;题目&#x1f4af;问题分析解法一&#xff1a;减法法解法二&#xff1a;位运算解法解法三&#xff1a;逻辑非解法解法四&#xff1a;条件运算符解法解法五&#xff1a;数组映射法不同解法的比较…

第二十一章 Spring之假如让你来写AOP——Weaver(织入器)篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

04 - Clickhouse-21.7.3.14-2单机版安装

目录 一、准备工作 1、确定防火墙处于关闭状态 2、CentOS 取消打开文件数限制 3、安装依赖 4、CentOS取消SELINUX 二、单机安装 2.1、下载安装 2.2、安装这4个rpm包 2.3、修改配置文件 2.4、启动服务 2.5、关闭开机自启 2.6、使用Client连接server 一、准备工作 1…

Python脚本-linux远程安装某个服务

需求&#xff1a; 某公司因为网站服务经常出现异常&#xff0c;需要你开发一个脚本对服务器上的服务进行监控&#xff1b;检测目标服务器上是否存在nginx软件(提供web服务的软件)&#xff0c;如果不存在则安装(服务器可能的操作系统Ubuntu24/RedHat9)&#xff1b;如果nginx软件…

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号)

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号) 本期是平台君和您分享的第113期内容 前一段时间,高通公司(Qualcomm)发布安全警告称,提供的60多款芯片潜在严重的“零日漏洞”,芯片安全再一次暴露在大众视野。 那什么是“零日漏洞”?平台君从网上找了一段…