一、使用mvn+lombok+mysql+hikaricp操作数据库表的信息
功能需求:
- 书籍查询:根据用户输入的ID查询书籍
- 书籍更新 :允许用户修改书籍信息,具有以下特点:
- 显示当前值作为默认值
- 用户可以直接按回车保持原值不变
- 支持修改所有书籍属性(名称、作者、ISBN、库存、出版日期、类别)
- 包含输入验证和异常处理
具体流程:
- 提示用户输入书籍ID
- 查询并显示书籍信息
- 依次提示用户修改各字段(显示当前值)
- 用户可以修改或保持原值
- 构建新的
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);
}
}
六、运行效果
