以水果库存管理系统为例,实现通用的JDBC增删改查方法。
1、实体类和表
ORM(Object/Relation Mapping,对象/关系数据库映射)是一种描述对象与关系数据库之间映射的规范。
a、bean
创建fruit类。
package com.lucky.fruit01.pojo;
public class Fruit {
private Integer fid;
private String name;
private Integer price;
private Integer fcount;
private String remark;
public Fruit() {
}
public Integer getFid() {
return fid;
}
public void setFid(Integer fid) {
this.fid = fid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public Integer getFcount() {
return fcount;
}
public void setFcount(Integer fcount) {
this.fcount = fcount;
}
public Fruit(Integer fid, String name, Integer price, Integer fcount, String remark) {
this.fid = fid;
this.name = name;
this.price = price;
this.fcount = fcount;
this.remark = remark;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public String toString() {
return fid + "\t\t" + name + "\t\t" + price + "\t\t" + fcount + "\t\t" + remark;
}
}
b、表结构和属性
数据库中创建t_fruit表格,表格每个列和bean中每个属性一一对应,表里面每条数据代表了fruit bean的一个实例。
2、连接数据库
获取数据库连接,对数据库中数据进行操作,因为不管增删改查中的哪个操作,都首先需要连接数据库。操作完成之后,需要释放资源,因此将数据库连接和释放资源部分代码放到工具类JDBCUtils中。
package com.lucky.fruit01.utils.jdbc;
import java.lang.reflect.ParameterizedType;
import java.sql.*;
import java.util.Objects;
/**
* 数据库连接工具
*/
public class JDBCUtils {
/**
* 获取数据库连接对象
*
* @param driver driver
* @param user user
* @param pwd pwd
* @return 数据库连接对象
*/
public static Connection getConnection(String driver, String url, String user, String pwd) {
try {
Class.forName(driver);
return DriverManager.getConnection(url, user, pwd);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 关闭连接
*
* @param resultSet resultSet
* @param preparedStatement preparedStatement
* @param connection connection
*/
public static void close(ResultSet resultSet, PreparedStatement preparedStatement, Connection connection) {
try {
if (Objects.nonNull(resultSet)) {
resultSet.close();
}
if (Objects.nonNull(preparedStatement)) {
preparedStatement.close();
}
if (Objects.nonNull(connection)) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3、通用DAO层代码
a、增删改通用代码
对于增删改操作,其操作流程可以总结为
提取函数:
输入参数:
1、sql
2、需要填充的参数,因为不知道需要填充参数的类型和数量,所以这个参数设置为object类型的可变参数。
输出参数:
更新和删除操作为影响行数;
增加操作为数据库主键。
/**
* 提取公共方法,执行更新,删除,和增加
*/
protected int executeUpdate(String sql, Object ..