dao:数据访问对象,主要用来封装对数据库的访问。
实体类:只有成员变量、成员变量的get、set方法、构造函数。(不能包含业务逻辑)
1.创建Entity包:定义一个所有实体类父类,这是一个抽象类。这个类只有一个属性,就是id:
public abstract class idEntity {
protected Long id;//因为每个表(数据库)都包含了一个与业务逻辑无关的标志id
public Long getId(){
return id;}
public void setId(Long id){
this.id=id;
}}
2.接着就是创建编写跟数据库相关的类:编写一个实体类(继承自上面的实体类父类)应包含:定义与数据库相关属性的变量,以及相关的get、set方法、toString方法。
(get、set方法在eclipse中可以自动生成:在定义玩成员变量后,在代码编写区域右键-> Source -> Generate Getters and Setters… -> 选择要定义相关的get、set方法的成员变量之后应用即可。
toString方法在eclipse中可以自动生成:(生成get、set方法之后)在代码编写区域右键-> Source -> Generate toString()… -> 展开Inherit fields -> 选择 id ->点击ok)
3.新建一个接口:创建一个包dao,在这个dao包下新建一个接口(与数据库相关,如果数据库的表的名称为User,则名称为UserDao)。例子:
import jike.entity.User;//导入前面编写的Entity包中与数据库相关的对应的类
public interface UserDao {
public void save(Connection c,User user)throws SQLException;
public void update(Connection c,Long id,User user)throws SQLException;
public void delete(Connection c,User user)throws SQLException;
}
4.接着需要编写接口相应的实现(这是典型的面向接口编程的模式):在dao包下新建一个impl包,编写相对应的实现类。例子:
(直接在新建类的时候选择实现哪一个接口)
@Override
public void save(Connection c, User user) throws SQLException {
PreparedStatement ps=c.prepareCall("insert into user(name,password,mail) value (?,?,?)");//PreparedStatement是jdbc用来执行sql查询的api之一,用于执行参数化的查询,问号是占位符,用来代表具体的参数
//接下来是相应的参数设置代码
ps.setString(1,user.getName());
ps.setString(2,user.getPassword());
ps.setString(3, user.getMail());
ps.execute();
}
5.这样dao类就编写完毕了,接着就创建一个测试类测试。