Java Maven+lombok+MySql+HikariCP 操作数据库

一、使用mvn+lombok+mysql+hikaricp操作数据库表的信息

功能需求:

  • 书籍查询:根据用户输入的ID查询书籍
  • 书籍更新 :允许用户修改书籍信息,具有以下特点:
    • 显示当前值作为默认值
    • 用户可以直接按回车保持原值不变
    • 支持修改所有书籍属性(名称、作者、ISBN、库存、出版日期、类别)
    • 包含输入验证和异常处理

具体流程

  1. 提示用户输入书籍ID
  2. 查询并显示书籍信息
  3. 依次提示用户修改各字段(显示当前值)
  4. 用户可以修改或保持原值
  5. 构建新的Book对象并调用bookBiz.update()更新

二、搭建Manven工程

1、pom.xml文件

XML 复制代码
 <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.jupiter.version>5.10.0</junit.jupiter.version>

    </properties>

    <dependencies>
        <!-- JUnit Jupiter API and Engine -->
            <dependency>
                    <groupId>org.junit.jupiter</groupId>
                    <artifactId>junit-jupiter</artifactId>
                    <version>${junit.jupiter.version}</version>
                    <scope>test</scope>
            </dependency>

        <!-- MySQL JDBC Driver -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

        <!-- HikariCP  -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>5.1.0</version>
        </dependency>

        <!-- Lombok -->
        <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.32</version>
                <scope>provided</scope>
        </dependency>

        <!-- druid -->
        <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.2.16</version>
        </dependency>


    </dependencies>

2、资源文件hc.properties

XML 复制代码
driverClassName=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql:///library
username=root
password=123456
minimumIdle=5
maximumPoolSize=20
idleTimeout=300000
connectionTimeout=60000
validationTimeout=3000
leakDetectionThreshold=60000
connectionTestQuery=SELECT 1

3、mvn1架构

四、相关类的封装

1、实体类Book

java 复制代码
package org.hlx;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.sql.Date;


@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Book {
    //私有字段
    private int id;
    private String title;
    private String author;
    private String isbn;
    private int stock = 1;  //默认值1
    private Date publishDate;   //publish_date
    private String category;

    @Override
    public String toString(){
        return  id +
                "\t" + title +
                "\t" + author +
                "\t" + isbn +
                "\t" + stock +
                "\t" + publishDate +
                "\t" + category;
    }
}

2、业务类BookBiz

java 复制代码
package org.hlx;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class BookBiz {

    /**
     * 获取数据库连接
     * @return
     * @throws IOException
     * @throws SQLException
     */
    public Connection getConnection() throws IOException, SQLException {
        //创建配置对象
        Properties properties = new Properties();

        //读取配置文件
        InputStream inputStream = this.getClass().getResourceAsStream("/hc.properties");
        properties.load(inputStream);

        //连接池配置对象
        HikariConfig config=new HikariConfig(properties);

        //创建数据源对象
        HikariDataSource dataSource = new HikariDataSource(config);

        //获取连接
        Connection conn = dataSource.getConnection();
        return conn;
    }

    /**
     * 1.查询书籍列表
     * @return
     */
    public List<Book> listBooks() throws SQLException, IOException {
        List<Book> lists = new ArrayList<>();
        Connection conn = getConnection();
        String sql = "select * from books";
        PreparedStatement ps = conn.prepareStatement(sql);
        //执行查询
        ResultSet rs = ps.executeQuery();
        while (rs.next()){
            //获取数据
            //封装书籍对象
            Book book=new Book(rs.getInt("id"),rs.getString("title"),
                    rs.getString("author"),rs.getString("isbn"),
                    rs.getInt("stock"),rs.getDate("publish_date"),
                    rs.getString("category"));
            lists.add(book);
        }

        //关闭连接
        rs.close();
        ps.close();
        conn.close();
        return lists;
    }

....其他代码.................

五、测试类

java 复制代码
private static void tt3() {
        Scanner scanner = new Scanner(System.in);
        BookBiz bookBiz = new BookBiz();
        try {
            //查找书籍
            System.out.print("请输入书籍id:");
            int id = scanner.nextInt();
            Book book = bookBiz.getBookById(id);
            if (book != null) {
                System.out.println("找到的书籍信息为:" + book);
                scanner.nextLine(); // 清除换行符

                //获取当前值作为默认值
                String defaultTitle = book.getTitle();
                String defaultAuthor = book.getAuthor();
                String defaultIsbn = book.getIsbn();
                int defaultStock = book.getStock();
                java.sql.Date defaultDate = book.getPublishDate();
                String defaultCategory = book.getCategory();

                //更新书籍信息
                System.out.print("请输入名称(直接回车保持原值:" + defaultTitle + "):");
                String titleInput = scanner.nextLine();
                String title = titleInput.isEmpty() ? defaultTitle : titleInput;

                System.out.print("请输入作者(直接回车保持原值:" + defaultAuthor + "):");
                String authorInput = scanner.nextLine();
                String author = authorInput.isEmpty() ? defaultAuthor : authorInput;

                System.out.print("请输入ISBN(直接回车保持原值:" + defaultIsbn + "):");
                String isbnInput = scanner.nextLine();
                String isbn = isbnInput.isEmpty() ? defaultIsbn : isbnInput;

                System.out.print("请输入库存(直接回车保持原值:" + defaultStock + "):");
                String stockInput = scanner.nextLine();
                int stock = stockInput.isEmpty() ? defaultStock : Integer.parseInt(stockInput);

                System.out.print("请输入出版日期(格式:yyyy-MM-dd,直接回车保持原值:" + defaultDate + "):");
                String dateInput = scanner.nextLine();
                java.sql.Date publishDate = dateInput.isEmpty() ? defaultDate : Date.valueOf(dateInput);

                System.out.print("请输入类别(直接回车保持原值:" + defaultCategory + "):");
                String categoryInput = scanner.nextLine();
                String category = categoryInput.isEmpty() ? defaultCategory : categoryInput;

                //创建新的书籍对象
                Book newBook = Book.builder()
                        .id(id)
                        .title(title)
                        .author(author)
                        .isbn(isbn)
                        .stock(stock)
                        .publishDate(publishDate)
                        .category(category)
                        .build();
                //更新书籍信息
                bookBiz.update(newBook);
            } else {
                System.out.println("没有找到对应的书籍");
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

六、运行效果

相关推荐
折哥的程序人生 · 物流技术专研3 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
AOwhisky3 小时前
Redis 学习笔记(第三期):持久化与主从复制
运维·数据库·redis·笔记·学习·云计算
李白的天不白4 小时前
数据库连接报错问题
数据库
一条泥憨鱼4 小时前
【Redis】数据类型和常用命令
java·数据库·redis·后端·缓存
云烟成雨TD4 小时前
Spring AI Alibaba 1.x 系列【78】沙箱(Sandbox)
java·人工智能·spring
程序员二叉4 小时前
【Java】 异常高频面试题精讲 | 易错点+对比总结
java·开发语言·面试
爱喝水的鱼丶4 小时前
SAP-ABAP:SAP视图开发入门:四类标准视图的适用场景与创建步骤详解
服务器·数据库·性能优化·sap·abap
周航宇JoeZhou4 小时前
JB3-9-SpringAI(二)
java·ai·agent·多智能体·调度·智能体·观察
好家伙VCC5 小时前
Web Components主题热切换方案揭秘
java·前端
慕木沐5 小时前
Google ADK Java 1.0版本 核心机制与实战 Demo
java·开发语言·python