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

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

时间:2024-11-20 22:15:22浏览次数:3  
标签:Mapper spring 数据库 Dao list time 信息管理系统 com public

一、目标

  因为业务中经常需要将数据储存在数据库中,所以之前所设计的从文本文件中读取数据的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 {
    @Autowired
    private DeptMapper deptMapper;
    @Override
    public 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 {
    @Autowired
    private DeptService deptService;
    @GetMapping
    public Result list() throws Exception {
        List<Dept> deptlist = deptService.list();
        return Result.success(deptlist);
    }

四、总结

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

标签:Mapper,spring,数据库,Dao,list,time,信息管理系统,com,public
From: https://blog.csdn.net/zzb1580/article/details/143925768

相关文章

  • 瑞吉外卖数据库主从复制时无法与MySQL数据库建立连接
    在Linux里边,数据库主从复制的框架已经搭建好了,在前边的测试项目rw_demo里,测试查询添加的时候没有遇到问题到在瑞吉外卖实现的时候,遇到问题:2024-11-2020:01:06.524ERROR14856---[eate-2045143855]com.alibaba.druid.pool.DruidDataSource:createconnectionSQLExceptio......
  • ssm151大学生就业信息管理系统+jsp(论文+源码)_kaic
      毕业设计(论文)题目:大学生就业信息管理系统设计与实现摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本大学生就业信息管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处......
  • AI之旅-语义搜索:初识 vector embedding 与部署向量数据库 qdrant
    AI之旅实现的第一个功能是基于大模型的vectorembedding进行语义搜索(semanticsearch)。(图片来源:kdnuggets.com)基于大模型实现的聊天机器人虽然能打字和你聊天,但大模型却大字不识一个,它只识数(向量)与只会计算,它不会玩文字游戏,只会玩数字游戏。任何一段文字,在大模型的眼里只是......
  • DataGrip 连接数据库失败
    【原文:https://www.cnblogs.com/yuanchaoyong/p/11570510.html】66000][12505]Listenerrefusedtheconnectionwiththefollowingerror:ORA-12505,TNS:listenerdoesnotcurrentlyknowofSIDgiveninconnectdescriptororacle.net.ns.NetException:Listenerrefu......
  • SQLServer数据库里的递归CTE详细说明
     SQLServer数据库里的递归CTE详细说明  用实例来说明:样例: --解释CTE递归的运算逻辑(代码不一定可用,但逻辑准确)WITHBOM_CTEAS(--基础层(B段):选择特定BOM物料编码的所有BOM条目,并设置层级为1SELECTBOMNOAS'TopBOM',COMPID,REQQTY,1AS......
  • Java操作Hbase数据库
    ```plaintext/*Hbaseapi中基础我们要做的任务:1、如何创建一张表2、如何删除一张表3、如何向hbase表中插入一列数据4、如何向hbase表中插入一批数据5、如何获取一列数据6、如何获取批量列数据7、如何创建预......
  • 深度解析MyBatis增删查改(XML方式):快速掌握数据库操作
    全文目录:开篇语前言......
  • mysql数据库约束
    数据库会自动对数据的合法性进行检查的一系列机制,目的是为了防止被插入/修改一些非法的数据提供了一下约束notnull指示某列不能存储null值unique保证某列的每行必须有唯一值default规定没有给列赋值时的默认值primarykeynotnull和unique的结合,确保某列有唯一标识forei......
  • 国产数据库oceanBbase,达梦,金仓与mysql数据库的性能对比 五、python读mysql写入金仓
    一、说明pipinstallpsycopg2==2.9.5连接金仓数据库的驱动是pg数据的驱动,金仓是从pg数据库改造来的这个驱动的版本和数据库的版本要匹配否则会报错二、源码#coding=utf-8importpsycopg2importpymysqlimporttimeimportuuid#pipinstallpsycopg2==2.9.5#连接金仓......
  • 国产数据库oceanBbase,达梦,金仓与mysql数据库的性能对比 六、python读mysql数据库
    #coding=utf-8importpymysqlimporttime#测试单表插入性能try:start_time=time.time()#记录开始时间connection1=pymysql.connect(host='192.168.0.98',user='user',password='passwd',database='mysqldb',port=3306)......