MySQL中的DAO编程(c mysql dao)
MySQL中的DAO编程
DAO是Data Access Object的缩写,是一种设计模式,用于将业务逻辑与数据访问逻辑分离,提高代码的可维护性和可测试性。在MySQL数据库中,DAO编程可以将数据存储和检索操作封装到一个独立的类中,使得代码更加清晰简洁。
1. 创建DAO类
我们可以创建一个DAO类,用于定义所有数据存储和检索操作的接口。以下是一个简单的例子:
public interface UserDao {
public User getUserById(int id); public List getAllUsers();
public void addUser(User user); public void updateUser(User user);
public void deleteUser(int id);}
在上面的代码中,我们定义了以下接口方法:
– getUserById():按照给定的ID返回一个用户;
– getAllUsers():返回所有用户的列表;
– addUser():添加一个新用户;
– updateUser():更新一个现有用户;
– deleteUser():删除一个用户。
2. 实现DAO类
现在我们需要创建一个实现UserDao接口的DAO类。以下是一个MySQL UserDao实现的例子。
首先我们需要在MySQL中创建一个用户表:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL,
`eml` varchar(50) NOT NULL, PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后我们创建MySQLUserDao类:
public class MySQLUserDao implements UserDao {
// MySQL连接相关变量 private String driver = "com.mysql.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/test"; // 数据库名 private String username = "root"; // 数据库用户名
private String password = "root"; // 数据库密码
// 实现UserDao中的方法 public User getUserById(int id) {
// 获取数据库连接 Connection conn = getConnection();
PreparedStatement ps = null; ResultSet rs = null;
User user = null; try {
// 调用存储过程 ps = conn.prepareStatement("CALL get_user_by_id(?)");
ps.setInt(1, id); rs = ps.executeQuery();
while (rs.next()) { user = new User();
user.setId(rs.getInt("id")); user.setName(rs.getString("name"));
user.setEml(rs.getString("eml")); }
} catch (SQLException e) { e.printStackTrace();
} finally { // 释放资源
closeConnection(conn, ps, rs); }
return user; }
// 其他方法的实现 // ...
// 获取数据库连接 private Connection getConnection() throws SQLException {
Connection conn = null; try {
Class.forName(driver); conn = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) { e.printStackTrace();
} return conn;
}
// 释放数据库连接等资源 private void closeConnection(Connection conn, PreparedStatement ps, ResultSet rs) {
if (rs != null) { try {
rs.close(); } catch (SQLException e) {
e.printStackTrace(); }
} if (ps != null) {
try { ps.close();
} catch (SQLException e) { e.printStackTrace();
} }
if (conn != null) { try {
conn.close(); } catch (SQLException e) {
e.printStackTrace(); }
} }
}
在上面的代码中,我们实现了UserDao接口中的getUserById()方法,该方法通过调用MySQL存储过程来检索用户。我们还实现了一个私有的getConnection()方法来获取数据库连接,并实现一个私有的closeConnection()方法来释放数据库连接等资源。
3. 测试DAO类
现在我们已经实现了一个DAO类,我们可以使用它来存储和检索用户数据。以下是一个简单的测试MySQLUserDao类的例子。
public static void mn(String[] args) {
UserDao userDao = new MySQLUserDao(); // 创建MySQLUserDao实例 User user = userDao.getUserById(1); // 获取一个用户
System.out.println(user.toString()); // 打印用户信息}
在上面的代码中,我们创建了一个MySQLUserDao实例并使用它来获取ID为1的用户,并打印其信息。