1. DAO简介
DAO设计模式是属于J2EE数据库层的操作,使用DAO设计模式可以简化大量代码,
增强程序的可移植性。
2. DAO各部分详解
DAO设计模式包括5个重要的部分,分别为数据库连接类,VO类,DAO接口,
DAO实现类以及DAO工厂类。
2-1 数据库连接类:
数据库连接类的主要功能就是连接数据库并获得连接对象,
以及关闭数据库。通过数据库连接类可以大大地简化开发,在需要进行数据库连接时,
只需要创建该类的实例,并调用其中的方法就可以获得数据库连接对象和关闭数据库而不必进行重复操作。
2-2 VO类
VO类是一个包含属性和表中字段完全对应的类。并在该类中提供setter和getter方法
来设置并获取该类中的属性。
2-3 DAO接口
DAO接口中定义了所有的用户操作,如添加记录,删除记录以及查询记录等。不过因为是接口
所以仅仅是定义,还需要子类来实现。
2-4 DAO实现类
DAO实现类实现了DAO接口,并实现了DAO接口中定义的所有方法。在DAO实现中
通过连接数据库进行数据库操作。
2-5 DAO工厂类
在没有DAO工厂类的情况下,必须通过创建DAO实现类的实例才能完成数据库的操作。
这是就必须知道具体的子类,对于后期的修改非常不方便。如后期需要创建一个操作Oracle
的DAO实现类,这是就必须修改所有使用DAO实现类的代码。
使用DAO工厂类可以比较方便地对代码进行管理,而且可以很好滴解决后期修改的问题,。
通过DAO工厂类的一个静态方法来获得DAO实现类的实例。这是如果需要替换DAO实现类,
只需要修改DAO工厂类中的方法代码,而不必修改所有的操作数据库代码。
3.示例:构建一个用户数据操作的DAO,要求如下:
1)数据库连接类:DatabaseConnection.java,用于连接mysql中javaweb数据库。
2)VO类:User.java,其中的属性名对应于user表中的字段名
3)DAO接口类: UserDAO.java,实现对user表的添加、修改、删除、查询等操作。
4)DAO实现类:UserDAOImpl.java
5)DAO工厂类:DAOFactory.java ;
并根据这个DAO实现添加记录的数据库操作:
DataBaseConnection.java
1 package com.mhb; 2 import java.sql.*; 3 4 //主要功能就是连接数据库,关闭数据库 5 public class DataBaseConnection { 6 //定义数据库驱动类 7 private final String DBDRIVER = "com.mysql.jdbc.Driver"; 8 //定义数据库连接URL 9 private final String DBURL = "jdbc:mysql://localhost/bbs"; 10 //定义数据库连接用户名 11 private final String DBUSER = "root"; 12 //定义数据库连接密码 13 private final String DBPASSWORD = "123456"; 14 //定义数据库连接对象 15 private Connection conn = null; 16 //构造方法,加载驱动 17 public DataBaseConnection(){ 18 try{ 19 Class.forName(DBDRIVER); 20 this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); 21 System.out.println("数据库连接成功!"); 22 }catch(Exception e){ 23 System.out.println("加载驱动失败!"); 24 } 25 } 26 27 //取得数据库连接 28 public Connection getConnection(){ 29 return conn; 30 } 31 32 //关闭数据库 33 public void close(){ 34 35 try { 36 conn.close(); 37 } catch (SQLException e) { 38 System.out.println("数据库连接关闭失败!"); 39 } 40 } 41 }
User.java
1 package com.mhb; 2 3 public class User { 4 //用户ID 5 private int userid; 6 //用户姓名 7 private String username; 8 //用户密码 9 private String password; 10 11 public int getUserid() { 12 return userid; 13 } 14 public void setUserid(int userid) { 15 this.userid = userid; 16 } 17 public String getUsername() { 18 return username; 19 } 20 public void setUsername(String username) { 21 this.username = username; 22 } 23 public String getPassword() { 24 return password; 25 } 26 public void setPassword(String password) { 27 this.password = password; 28 } 29 }
UserDAO.java
1 package com.mhb; 2 import java.util.*; 3 4 //定义数据库操作方法 5 public interface UserDAO { 6 //增加操作 7 public void insert (User user) throws Exception; 8 //修改操作 9 public void update (User user) throws Exception; 10 //删除操作 11 public void delete (int userid) throws Exception; 12 //按ID查询 13 public User queryById(int userid) throws Exception; 14 //查询全部 15 public List queryAll() throws Exception; 16 17 }
UserDAOImpl.java
1 package com.mhb; 2 3 import java.sql.PreparedStatement; 4 import java.util.List; 5 6 public class UserDAOImpl implements UserDAO { 7 8 //添加操作 9 public void insert(User user) throws Exception { 10 String sql = "INSERT INTO user(username,password) VALUES (?,?)"; 11 PreparedStatement pstmt = null; 12 DataBaseConnection dbc = null; 13 //下面是针对数据库的具体操作 14 try{ 15 dbc= new DataBaseConnection(); 16 pstmt = dbc.getConnection().prepareStatement(sql); 17 pstmt.setString(1, user.getUsername()); 18 pstmt.setString(2, user.getPassword()); 19 //进行数据库更新 20 pstmt.executeUpdate(); 21 pstmt.close(); 22 }catch(Exception e){ 23 throw new Exception ("操作出现异常"); 24 }finally{ 25 //关闭数据库 26 dbc.close(); 27 } 28 } 29 30 public void delete(int userid) throws Exception { 31 32 } 33 34 35 36 public List queryAll() throws Exception { 37 return null; 38 }
DAOFactory.java
1 package com.mhb; 2 3 public class DAOFactory { 4 public static UserDAO getUserDAOInstance(){ 5 return new UserDAOImpl(); 6 } 7 }
MySql数据库中user表语句
1 CREATE TABLE `user` ( 2 `userid` int(11) NOT NULL AUTO_INCREMENT, 3 `username` varchar(20) DEFAULT NULL, 4 `password` varchar(20) DEFAULT NULL, 5 PRIMARY KEY (`userid`) 6 ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8
至此,DAO的5个部分就以全部结束,接下来通过DAO工厂获得DAO实现类实例。
通过DAO实现类中的方法就可以完成添加记录的数据库操作了。
添加记录AddUserDemo.jsp
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ page import="com.mhb.*" %> 3 4 <html> 5 <head><title>添加用户</title></head> 6 7 <body> 8 <form action="" method="post"> 9 <table> 10 <tr> 11 <td colspan="2">添加用户</td> 12 </tr> 13 <tr> 14 <td>用户姓名:</td> 15 <td><input type="text" name="username"></td> 16 </tr> 17 <tr> 18 <td>用户密码</td> 19 <td><input type="password" name="password"></td> 20 </tr> 21 <tr> 22 <td colspan="2"> 23 <input type="submit" value="添加"> 24 <input type="reset" value="重置"> 25 </td> 26 </tr> 27 </table> 28 </form> 29 30 <% 31 //获取表单中输入的用户名以及密码 32 String userName = (String)request.getParameter("username"); 33 String password = (String)request.getParameter("password"); 34 //通过DAO工厂获得DAO实现类的实例 35 UserDAO userDAO = DAOFactory.getUserDAOInstance(); 36 //设置需要添加的用户 37 User user = new User(); 38 user.setUsername(userName); 39 user.setPassword(password); 40 //如果用户名密码不为空则添加入数据库 41 if(userName != null && userName != ""){ 42 if(password != null && password != ""){ 43 userDAO.insert(user); 44 } 45 }else{ 46 out.print("用户名或密码不能为空!"); 47 } 48 %> 49 </body> 50 </html>
浏览器显示
username:admin,password:123456
数据库显示