JavaWeb最全JDBC实现增删改查——重构(一)
JavaWeb最全JDBC实现(CRUD)增删改查——重构,之所以用重构其实就是对重复使用的代码抽取为相关工具类和方法实现复用,也是高内聚低耦合的思想,这也使得代码更好维护和增加可读性。
包与类关系图
目录结构图
需要jar包都在下面,
如果你的数据库版本是5的话就用mysql5的jar,如果是8.0的话就用对应版本jar
关注微信关注公众号"一颗剽悍的种子"回复:“编程资源”——会有百度云链接提供下载,几个m大小下载非常快哦φ(* ̄0 ̄)
记得要建一个resource包放数据库资源文件的配置db.properties
配置db.properties这里要注意啦
- 第一个driverClassName的com.mysql.cj.jdbc.Driver里面有还有一个cj看到了吗,
这个是连接8.0数据库的驱动的,如果是5.0的com.mysql.jdbc.Driver直接这样就好了。 - url连接的是mysql数据库和mysql的端口一般是3306后面是连接你mysql的库
- username和password要用自己连接数据库库的名和密码。
代码示例:
pojo包里的User实体类
package pojo;
import java.util.Date;
public class User {
private int id;
private String username;
private String password;
private Date newdate;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getNewdate() {
return newdate;
}
public void setNewdate(Date newdate) {
this.newdate = newdate;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", newdate=" + newdate +
'}';
}
}
dao包里的UserDao接口
package dao;
import pojo.User;
import java.util.Date;
import java.util.List;
public interface UserDao {
//添加用户
int addUser (String username,String password,Date newdate);
//根据id用户
int deleteUser (int id);
//根据id修改用户
int updateUser (String username,String password,int id);
//根据id查找用户
User queryUser (int id);
//查询所有用户
List<User> queryAllUser();
}
dao包UserDaoImpl类继承UserDao接口
package dao.impl;
import dao.UserDao;
import pojo.User;
import util.CrudUtil;
import java.util.Date;
import java.util.List;
public class UserDaoImpl implements UserDao{
@Override
public int addUser(String username,String password,Date newdate) {
String sql = "insert into user(username,password,newdate) value(?,?,?)";
return CrudUtil.executeDML(sql,username,password,newdate);
}
@Override
public int deleteUser(int id) {
String sql = "delete from user where id = ?";
return CrudUtil.executeDML(sql,id);
}
@Override
public int updateUser(String username,String password,int id) {
//update多个参数用逗号隔开而不是用and
String sql = "update user set username = ? , password = ? where id = ?";
return CrudUtil.executeDML(sql,username,password,id);
}
@Override
public User queryUser(int id) {
String sql = "select * from user where = ?";
List<User> list = CrudUtil.executeDQL(sql,id);
return list.size() != 1 ? null : list.get(0);
}
@Override
public List<User> queryAllUser() {
String sql = "select * from user";
return CrudUtil.executeDQL(sql);
}
}
util包JdbcUtil类
package util;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JdbcUtil {
private static DataSource ds = null;
static {
try {
//1.加载配置文件
Properties p = new Properties();
//这里我把properties文件放在resource里
FileInputStream in = new FileInputStream("resource/db.properties");
p.load(in);
//这里我用的是DBCP,如果你想换成Druid的也可以,
//换一下注释就好了
//但是要注意导包
//ds = DruidDataSourceFactory.createDataSource(p);
ds = BasicDataSourceFactory.createDataSource(p);
}catch(Exception e) {
e.printStackTrace();
}
}
public static Connection getConn() {
try {
//2.连接数据库
return ds.getConnection();
}catch(Exception e) {
e.printStackTrace();
}
return null;
}
//3.关闭资源
public static void close(Connection conn,Statement st,ResultSet rs) {
if(rs != null) {
try {
rs.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
if(st != null) {
try {
st.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
util包CrudUtil类
package util;
import pojo.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class CrudUtil {
private static Connection conn = JdbcUtil.getConn();
private static PreparedStatement ps = null;
public static int executeDML(String sql,Object...Params){
try {
//1.加载驱动
//2.连接数据库
//3.创建语句
ps = conn.prepareStatement(sql);
for(int i = 0;i<Params.length;i++) {
ps.setObject(i+1,Params[i]);
}
// 4.执行语句
return ps.executeUpdate();
}catch (Exception e) {
e.printStackTrace();
}finally {
//5.释放资源
JdbcUtil.close(conn,ps,null);
}
return 1;
}
public static List<User> executeDQL(String sql,Object...Params){
ResultSet rs = null;
List list = new ArrayList<User>();
try {
// 1.加载驱动
// 2.连接数据库
ps = conn.prepareStatement(sql);
for(int i = 0; i < Params.length;i++) {
ps.setObject(i + 1, Params[i]);
}
// 4.执行语句
rs = ps.executeQuery();
while(rs.next()) {
User user = new User();
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setNewdate(rs.getDate("newdate"));
list.add(user);
}
}catch(Exception e) {
e.printStackTrace();
}finally {
//5.释放资源
JdbcUtil.close(conn, ps, rs);
}
return list;
}
}
JDBC增删改查运行效果图:
我这里用的是@Test是junit4的单元测试(要用junt4的话直接敲入@Test导入包就好了,在eclipse还是在IDEA都一样),这里用junit只不过更好的对每一个模块进行测试而已,当然你也可以在main来运行看效果。
添加操作
删除操作
修改操作
根据id查找操作
查询所有用户操作
如果以上还有不懂的话,可以关注微信关注公众号"一颗剽悍的种子"里面加杨shu提问或探讨关于编程技术,一起学习,如果顺便帮到了你,那我也是会很开心的,哈哈哈…