Java Maven+lombok+MySql+HikariCP 操作数据库
一、使用mvn+lombok+mysql+hikaricp操作数据库表的信息
功能需求:
- 书籍查询:根据用户输入的ID查询书籍
- 书籍更新:允许用户修改书籍信息,具有以下特点:
- 显示当前值作为默认值
- 用户可以直接按回车保持原值不变
- 支持修改所有书籍属性(名称、作者、ISBN、库存、出版日期、类别)
- 包含输入验证和异常处理
具体流程:
- 提示用户输入书籍ID
- 查询并显示书籍信息
- 依次提示用户修改各字段(显示当前值)
- 用户可以修改或保持原值
- 构建新的
Book对象并调用bookBiz.update()更新
二、搭建Manven工程
1、pom.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
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
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; //默认值1private Date publishDate; //publish_dateprivate String category;@Overridepublic String toString(){return id +"\t" + title +"\t" + author +"\t" + isbn +"\t" + stock +"\t" + publishDate +"\t" + category;}
}
2、业务类BookBiz
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;}....其他代码.................五、测试类
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);}}六、运行效果

