大家在JAVA的学习过程中都知道DAO是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露数据库实现细节的前提下提供了各种数据操作,然后在impl类中实现对DAO的具体操作。
放一个经典的DAO练习:
实现对一个用户表的数据进行增删改查以及分页功能
user类:
public class User {
private String username;
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 String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
private String password;
private String phone;
}
UserDao类:
import java.util.List;
public interface UserDao {
/**
* 增删改查方法
*/
public void register(String username,String password,String phone);
public void delete(String username);
public void update(String username,String password,String phone);
public List<User> ChaKan(String username);
public List<User> FenYe(int star,int end);
}
UserDaoImpl类:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserDaoImpl implements UserDao {
Connection conn=null;
PreparedStatement ps=null;
@Override
/**
* 删除方法
*/
public void delete(String username) {
// TODO Auto-generated method stub
JdbcUtils.forName();
conn =JdbcUtils.getConn();
String sql="DELETE FROM USER WHERE USERNAME=?";
try {
ps=conn.prepareStatement(sql);
ps.setString(1,username);
ps.executeUpdate();
JdbcUtils.close(ps, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
/**
* 更新方法
*/
public void update(String password, String phone,String username) {
// TODO Auto-generated method stub
JdbcUtils.forName();
conn =JdbcUtils.getConn();
String sql="UPDATE USER SET PASSWORD=?,PHONE=? WHERE USERNAME=?";
try {
ps=conn.prepareStatement(sql);
ps.setString(1,password);
ps.setString(2, phone);
ps.setString(3, username);
ps.executeUpdate();
JdbcUtils.close(ps, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
/**
* 查询方法
* return list
*/
public List<User> ChaKan(String username) {
// TODO Auto-generated method stub
JdbcUtils.forName();
conn =JdbcUtils.getConn();
List<User> list=new ArrayList<>();
String sql="SELECT *FROM USER WHERE USERNAME=?";
try {
User ur=new User();
ps=conn.prepareStatement(sql);
ps.setString(1,username);
// ps.setString(2, phone);
// ps.setString(3, username);
ResultSet rs=ps.executeQuery();
while(rs.next()){
ur.setUsername(rs.getString(1));
ur.setPhone(rs.getString(2));
ur.setPassword(rs.getString(3));
list.add(ur);
}
JdbcUtils.close(ps, conn);
} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
@Override
/**
* 分页功能
*/
public List<User> FenYe(int star,int end) {
// TODO Auto-generated method stub
JdbcUtils.forName();
conn =JdbcUtils.getConn();
List<User> list=new ArrayList<>();
String sql="SELECT *FROM USER limit ?,?";
try {
ps=conn.prepareStatement(sql);
ps.setInt(1, star);
ps.setInt(2,end );
ResultSet rs=ps.executeQuery();
while(rs.next()){
User ur=new User();
ur.setUsername(rs.getString(1));
ur.setPhone(rs.getString(3));
ur.setPassword(rs.getString(2));
list.add(ur);
}
JdbcUtils.close(ps, conn);
} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
@Override
public void register(String username, String password, String phone) {
// TODO Auto-generated method stub
JdbcUtils.forName();
conn =JdbcUtils.getConn();
String sql="INSERT INTO USER VALUES(?,?,?)";
try {
ps=conn.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
ps.setString(3, phone);
ps.executeUpdate();
JdbcUtils.close(ps, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
测试类:
import java.util.List;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
UserDao ur=new UserDaoImpl();
// ur.register("管理员D", "12345678", "10086");//注册功能测试完成
// ur.delete("管理员A");//删除功能测试完成
// ur.update("0000", "121313131","管理员B");//删除功能测试完成
//查询功能测试完成
// List<User> list=ur.ChaKan("管理员B");
// for(User s:list){
// System.out.print(s.getUsername()+" ");
// System.out.print(s.getPassword()+" ");
// System.out.print(s.getPhone()+" ");
// System.out.println();
// }
// 分页功能测试完成
List<User> list=ur.FenYe(0, 3);
for(User l:list){
System.out.print(l.getUsername()+" ");
System.out.print(l.getPassword()+" ");
System.out.print(l.getPhone()+" ");
System.out.println();
}
System.out.println("success");
}
}
直接用的话缺少一个JdbcUtils类,里面封装了加载数据库驱动和连接以及关闭数据库的方法。
运行效果截图:
分页功能:
查询功能: