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);
        }

    }

六、运行效果

相关推荐
武子康14 小时前
Java-165 Neo4j 图论详解 欧拉路径与欧拉回路 10 分钟跑通:Python NetworkX 判定实战
java·数据库·性能优化·系统架构·nosql·neo4j·图论
岳麓丹枫00115 小时前
pg_stat 视图介绍
数据库·postgresql
弗朗凌戈15 小时前
影院票务管理系统oracle
数据库·oracle·vr
代码不停15 小时前
Java二分算法题目练习
java·算法
.格子衫.15 小时前
023数据结构之线段树——算法备赛
java·数据结构·算法
Justin_1915 小时前
LVS负载均衡集群理论
java·负载均衡·lvs
·云扬·15 小时前
MySQL主从数据一致性校验工具:pt-table-checksum 详解
数据库·sql·mysql
虾说羊15 小时前
ssm面试题梳理
java·开发语言·rpc
nbsaas-boot15 小时前
什么语言最适合开发 SaaS 系统:从架构视角的全面分析
java·架构