当前位置: 首页 > news >正文

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

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

功能需求:

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

具体流程

  1. 提示用户输入书籍ID
  2. 查询并显示书籍信息
  3. 依次提示用户修改各字段(显示当前值)
  4. 用户可以修改或保持原值
  5. 构建新的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);}}

六、运行效果

http://www.dtcms.com/a/553178.html

相关文章:

  • Golang 镜像拉取与 Docker 部署全教程
  • 纯css:一个好玩的按钮边框动态动画
  • html5网站建设基本流程图更改wordpress标签分割符合
  • 山东中讯网站建设专业外贸网站制作价格
  • harbor-从源码理解镜像清理的逻辑实现
  • 为什么安装epel-release
  • Apache Maven 项目的开发指南
  • NET系列算法
  • 基于可视化天气系统demo,基于python+ matplotlib+request爬虫,开发语言python,数据库无,10个可视化界面,需要的可以了联系。
  • 被网站开发公司坑湖北网站设计
  • 可视化视角:AI + 实时流 + 可访问性时代的 3 大改变
  • Rust `std::iter` 深度解析:`Iterator` Trait、适配器与性能
  • MacOS学习笔记
  • 搭建网站程序网站域名和服务器到期
  • 从零开发一款实用插件,掌握VSCode扩展生态核心技术
  • mapbox高阶,使用自定义图层实现雷达扫描效果
  • 上海网站空间租用WordPress渗透思路
  • 邦邦汽服x优湃能源汽车零部件绿色循环中心揭牌暨中保智修新能源技术中心授牌仪式圆满举行
  • 蓝牙钥匙 第30次 蓝牙钥匙在汽车共享与分时租赁场景中的技术创新与实践
  • 百度AI眼镜Pro预售启幕,Snap/微美全息AR眼镜技术领跑掌握市场主动权
  • 阿里通义千问推理优化上下文缓存之隐式缓存和显式缓存
  • 南宁网站建设产品介绍做效果图挣钱的网站
  • 【Linux系统编程】调试器-gdb/cgdb
  • 【JUnit实战3_20】第十一章:用 Gradle 运行 JUnit 测试实战
  • TouchDIVER Pro 触觉手套:Weart把火星岩石触感、手术操作感搬进 XR
  • 极不均匀电场的强垂直分量和弱垂直分量
  • 直播卡顿?会议割裂?视频直播点播平台EasyDSS全新升级,一平台终结音视频“老大难”!
  • Dotnet使用System.Xml.Serialization处理Xml序列化
  • 【JUnit实战3_19】第十章:用 Maven 3 运行 JUnit 测试(下)
  • wordpress 禁止过滤张家口seo