在JavaWeb这们专业课中我们初次学习了Java与MySql数据库的连接,当让这不是我第一次接触到数据库连接,但是Dao模式却是第一次接触。
Dao模式究竟是个啥
Dao模式的全称是Data Access Object:数据访问对象模型,即将数据库中的数据变成对象。
如下图所示:
Dao包含4个部分:
Dao接口
Dao实现类
数据库工具类
实体类
1.baseDao(数据库工具类)
BaseDao主要包含对数据库的操作方法
//获得连接
public Connection getConnection() throws Exception {
//1:加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2:获得连接对象conn(连接桥)
return DriverManager.getConnection("jdbc:mysql://localhost:3306/studentgrade", "root", "root");
}
//关闭连接
public void closeAll(PreparedStatement pstmt, Connection conn, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
//alt+shift+z
pstmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
执行sql语句
public int update(String sql, Object... args) throws Exception {
PreparedStatement pstmt = null;
Connection conn = null;
int result = 0;
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);
if (args.length > 0) {
for (int i = 0; i < args.length; i++) {
pstmt.setObject(i + 1, args[i]);
}
}
result = pstmt.executeUpdate();
} finally {
closeAll(pstmt, conn, null);
}
return result;
}
2.Dao接口
Dao接口主要包含对数据库增删改查的抽象方法,可提供多种实现。
public interface CourseDao {
//增加
int save(Course course) throws Exception;
//删除
int del(int cno) throws Exception;
//查询
ArrayList<Course> getAll() throws Exception;
//修改
int change(Course course) throws Exception;
}
3.Dao实现类
实现了Dao接口的实现类重写了数据库增删改查方法。
//增加
@Override
public int save(Course course) throws Exception {
String sql = "insert into course(cname, classhour) values(?, ?)";
return this.update(sql, course.getCname(), course.getClassHour());
}
//查找
@Override
public ArrayList<Course> getAll() throws Exception {
ArrayList<Course> list;
ResultSet query = null;
Connection conn = null;
PreparedStatement pstmt = null;
try {
//1.创建链接
conn = super.getConnection();
//2.创建执行语句对象
String sql = "select * from course";
pstmt = conn.prepareStatement(sql);
//3.给参数赋值
//4.执行
query = pstmt.executeQuery();
list = new ArrayList<>();
while(query.next()){
Course c = new Course();
c.setCno(query.getInt("Cno"));
c.setCname(query.getString("Cname"));
c.setClassHour(query.getInt("ClassHour"));
list.add(c);
}
} finally {
this.closeAll(pstmt, conn, query);
}
return list;
}
4.实体类
用于存放或传输数据对象。
我感觉Dao模式是对开-闭原则一个很好的体现,对新的实现类开放增加,对已有实现类避免修改
初次学习Dao模式收获颇丰,第二堂课讲的JDBC template的运用,下一篇文章我会继续分享。