在不使用Spring、Hibernate等框架的情况下,可以使用纯Java来创建一个简单的CRUD(创建、读取、更新、删除)仓库。以下是一个基本的实现示例,包括实体类、数据访问对象(DAO)和简单的数据库连接。
首先,定义一个简单的实体类,例如User
。
public class User {
private int id;
private String name;
private String email;
// 构造函数、getter和setter方法
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Getters and Setters
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
定义一个DAO接口,包含基本的CRUD操作。
import java.util.List;
public interface UserDao {
void createUser(User user);
User getUserById(int id);
List<User> getAllUsers();
void updateUser(User user);
void deleteUser(int id);
}
实现上述接口,使用JDBC进行数据库操作。
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class UserDaoImpl implements UserDao {
private Connection getConnection() throws SQLException {
// 这里应该使用连接池,为了简单起见直接使用DriverManager
return DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
}
@Override
public void createUser(User user) {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
try (Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, user.getName());
stmt.setString(2, user.getEmail());
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public User getUserById(int id) {
String sql = "SELECT * FROM users WHERE id = ?";
try (Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, id);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
return new User(rs.getInt("id"), rs.getString("name"), rs.getString("email"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<User> getAllUsers() {
List<User> users = new ArrayList<>();
String sql = "SELECT * FROM users";
try (Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) {
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
users.add(new User(rs.getInt("id"), rs.getString("name"), rs.getString("email")));
}
} catch (SQLException e) {
e.printStackTrace();
}
return users;
}
@Override
public void updateUser(User user) {
String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
try (Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, user.getName());
stmt.setString(2, user.getEmail());
stmt.setInt(3, user.getId());
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void deleteUser(int id) {
String sql = "DELETE FROM users WHERE id = ?";
try (Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, id);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
这种纯Java实现的CRUD仓库适用于小型项目或者学习目的,特别是在不需要复杂事务管理和高级ORM功能的情况下。它也可以用于嵌入式系统或者对性能有极端要求的场景。
PreparedStatement
可以有效防止SQL注入。通过这种方式,即使不依赖外部框架,也可以实现基本的数据库操作。
领取专属 10元无门槛券
手把手带您无忧上云