–DAO 简介 
–DAO 实例 
• 用户登录、注册 
• 订餐系统后台JDBC实现
################Michael分割线#####################
• DAO 简介 
–DAO设计模式 
• DAO的全称是:Data Access Object,数据访问对象。 
• 使用DAO设计模式,来封装数据库持久层的所有操作(CRUD),使低级的数据逻辑和高级的业务逻辑分离,达到解耦合的目的。 
–一个典型的DAO实现有如下的组件: 
• 一个DAO 接口 
• 数据传输对象(有时称为值对象) 
• 一个实现了DAO 接口的具体类 
• 一个DAO 工厂类
 
–以维护一个客户信息为例,具体组件如下所示: 
• CustomerDao 接口 
• Customer 值对象(VO) 
• CustomerDaoImpl(接口的具体实现类) 
• CustomerFactory(工厂类,实例化用)
• DAO 实例 
–用户登录、注册 
• 使用DAO设计模式的后台JDBC实现 
–功能 
» 登录 
» 注册 
» 检查用户唯一性
UserDao.java
package com.michael.dao;    

import com.michael.vo.User;    

public  interface UserDao {    
         //login    
         public User login(String user,String password);    
         //register    
         public  void register(User u);    
         //check    
         public  boolean check(String user);    

UserDaoImpl.java
package com.michael.dao.impl;    

import java.sql.Connection;    
import java.sql.PreparedStatement;    
import java.sql.ResultSet;    
import java.sql.SQLException;    

import com.michael.dao.UserDao;    
import com.michael.jdbc.ConnectionUtil;    
import com.michael.vo.User;    

public  class UserDaoImpl  implements UserDao {    
         //检查是否己存在    
         public  boolean check(String user) {    
                Connection conn =  new ConnectionUtil().openConnection();    
                String sql =  "select id,user,password,age from UserTbl where user = ?";    
                 try {    
                        PreparedStatement pstmt = conn.prepareStatement(sql);    
                        pstmt.setString(1, user);    
                        ResultSet rs = pstmt.executeQuery();    
                         //如果结果集有,则返回true,说明己存在    
                         if(rs.next()){    
                                 return  true;    
                        }    
                }  catch (SQLException e) {    
                        e.printStackTrace();    
                } finally{    
                         try {    
                                conn.close();    
                        }  catch (SQLException e) {    
                                e.printStackTrace();    
                        }    
                }    
                 return  false;    
        }    

         //登录    
         public User login(String user, String password) {    
                Connection conn =  new ConnectionUtil().openConnection();    
                String sql =  "select id,user,password,age from UserTbl where user = ? and password = ?";    
                 try {    
                        PreparedStatement pstmt = conn.prepareStatement(sql);    
                        pstmt.setString(1, user);    
                        pstmt.setString(2, password);    
                        ResultSet rs = pstmt.executeQuery();    
                         if(rs.next()){    
                                 int id = rs.getInt(1);    
                                 int age = rs.getInt( "age");    
                                 //将数据封装到User对象中    
                                User u =  new User();    
                                u.setId(id);    
                                u.setUser(user);    
                                u.setPassword(password);    
                                u.setAge(age);    
                                 return u;    
                        }    
                }  catch (SQLException e) {    
                        e.printStackTrace();    
                } finally{    
                         try {    
                                conn.close();    
                        }  catch (SQLException e) {    
                                e.printStackTrace();    
                        }    
                }    
                 return  null;    
        }    

         //注册    
         public  void register(User u) {    
                Connection conn =  new ConnectionUtil().openConnection();    
                String sql =  "insert into UserTbl(user,password,age) values(?,?,?)";    
                 try {    
                        PreparedStatement pstmt = conn.prepareStatement(sql);    
                        pstmt.setString(1, u.getUser());    
                        pstmt.setString(2, u.getPassword());    
                        pstmt.setInt(3, u.getAge());    
                        pstmt.executeUpdate();    
                }  catch (SQLException e) {    
                        e.printStackTrace();    
                } finally{    
                         try {    
                                conn.close();    
                        }  catch (SQLException e) {    
                                e.printStackTrace();    
                        }    
                }    
        }    

ConnectionUtil.java
package com.michael.jdbc;    

import java.sql.Connection;    
import java.sql.DriverManager;    
import java.util.Properties;    

public  class ConnectionUtil {    
         //第一种方法    
         public Connection getConnection(){    
                Connection conn =  null;    
                 try {    
                         //Class.forName加载驱动    
                        Class.forName( "com.mysql.jdbc.Driver");    
                         //DriverManager获得连接    
                        conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/jdbc_db","root","mysqladmin");    
                        return conn;    
                } catch (Exception e) {    
                        e.printStackTrace();    
                }    
                return null;    
        }    
        //第二种方法    
        public Connection getConnection(String driver,String url,String user,String password){    
                Connection conn = null;    
                try {    
                        //Class.forName加载驱动    
                        Class.forName(driver);    
                        //DriverManager获得连接    
                        conn = DriverManager.getConnection(url,user,password);    
                        return conn;    
                } catch (Exception e) {    
                        e.printStackTrace();    
                }    
                return null;    
        }    
        //第三种方法    
        public Connection openConnection(){    
                String driver = "";    
                String url = "";    
                String user = "";    
                String password = "";    
                Properties prop = new Properties();    
                Connection conn = null;    
                try {    
                        //加载属性文件    
                        prop.load(this.getClass().getClassLoader().getResourceAsStream("DBConfig.properties"));    
                        driver = prop.getProperty("driver");    
                        url = prop.getProperty("url");    
                        user = prop.getProperty("user");    
                        password = prop.getProperty("password");    
                        //Class.forName加载驱动    
                        Class.forName(driver);    
                        //DriverManager获得连接    
                        conn = DriverManager.getConnection(url,user,password);    
                        return conn;    
                } catch (Exception e) {    
                        e.printStackTrace();    
                }    
                return null;    
        }    


Main.java(没有使用)
package com.michael.main;    

import com.michael.jdbc.ConnectionUtil;    

public  class Main {    

         /**    
         * @param args    
         */
    
         public  static  void main(String[] args) {    
                ConnectionUtil cu =  new ConnectionUtil();    
                 //第一种方法    
                System.out.println( "第一种方法:"+cu.getConnection());    
                 //第二种方法    
                System.out.println( "第二种方法:"+cu.getConnection( "com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/jdbc_db","root","mysqladmin"));    
                //第三种方法    
                System.out.println("第三种方法:"+cu.openConnection());    
        }    


UserDaoImplTest.java
package com.michael.test;    

import com.michael.dao.UserDao;    
import com.michael.dao.impl.UserDaoImpl;    
import com.michael.vo.User;    

import junit.framework.TestCase;    

public  class UserDaoImplTest  extends TestCase {    
         //Junit生命周期    
        UserDao dao;    
         protected  void setUp()  throws Exception {    
                dao =  new UserDaoImpl();    
        }    

         protected  void tearDown()  throws Exception {    
        }    
         public  void testRegister() {    
                User u =  new User();    
                u.setUser( "aaa");    
                u.setPassword( "bbb");    
                u.setAge(22);    
                dao.register(u);    
        }    

         public  void testCheck() {    
                 boolean b = dao.check( "aaa");    
                System.out.println(b);    
        }    

         public  void testLogin() {    
                User u = dao.login( "aaa""bbb");    
                System.out.println(u.getUser());    
        }    

Junit测试通过
image
数据库用户己增加
image   
–订餐系统后台 
• 使用DAO设计模式的后台JDBC实现 
–添加订餐信息 
–查询订餐信息
MealTypeTbl订餐类型表
  image
  MealInfoTbl订餐信息表
image
image
image
  MealDao.java
package com.michael.dao;    

import java.util.List;    

import com.michael.vo.Meal;    

public  interface MealDao {    
         // Add Meal    
         public  void add(Meal m);    
         // Query Meal    
         public List query();    

Meal.java 
package com.michael.vo;    

public  class Meal {    
         /*    
        CREATE TABLE `mealinfotbl` (    
            `id` int(11) NOT NULL auto_increment,    
            `createTime` varchar(11) default NULL,    
            `userID` int(11) default NULL,    
            `mealTypeID` int(11) default NULL,    
            `mealNum` int(11) default NULL,    
            `detail` varchar(20) default NULL,    
            PRIMARY KEY    (`id`)    
        ) ENGINE=InnoDB DEFAULT CHARSET=latin1;    
         */
    
         private  int id;    
         private String createTime;    
         private  int userID;    
         private  int mealTypeID;    
         private  int mealNum;    
         private String detail;    
         public String getCreateTime() {    
                 return createTime;    
        }    
         public  void setCreateTime(String createTime) {    
                 this.createTime = createTime;    
        }    
         public String getDetail() {    
                 return detail;    
        }    
         public  void setDetail(String detail) {    
                 this.detail = detail;    
        }    
         public  int getId() {    
                 return id;    
        }    
         public  void setId( int id) {    
                 this.id = id;    
        }    
         public  int getMealNum() {    
                 return mealNum;    
        }    
         public  void setMealNum( int mealNum) {    
                 this.mealNum = mealNum;    
        }    
         public  int getMealTypeID() {    
                 return mealTypeID;    
        }    
         public  void setMealTypeID( int mealTypeID) {    
                 this.mealTypeID = mealTypeID;    
        }    
         public  int getUserID() {    
                 return userID;    
        }    
         public  void setUserID( int userID) {    
                 this.userID = userID;    
        }    

MealBean.java
package com.michael.vo;    
//有外键,封装查询Bean    
public  class MealBean {    
         private String createTime;    
         private String user;    
         private String mealTypeName;    
         private  int price;    
         private  int mealNum;    
         private  int total;    
         private String detail;    
         public String getCreateTime() {    
                 return createTime;    
        }    
         public  void setCreateTime(String createTime) {    
                 this.createTime = createTime;    
        }    
         public String getDetal() {    
                 return detail;    
        }    
         public  void setDetal(String detal) {    
                 this.detail = detal;    
        }    
         public  int getMealNum() {    
                 return mealNum;    
        }    
         public  void setMealNum( int mealNum) {    
                 this.mealNum = mealNum;    
        }    
         public  int getPrice() {    
                 return price;    
        }    
         public  void setPrice( int price) {    
                 this.price = price;    
        }    
         public  int getTotal() {    
                 return total;    
        }    
         public  void setTotal( int total) {    
                 this.total = total;    
        }    
         public String getUser() {    
                 return user;    
        }    
         public  void setUser(String user) {    
                 this.user = user;    
        }    
         public String getDetail() {    
                 return detail;    
        }    
         public  void setDetail(String detail) {    
                 this.detail = detail;    
        }    
         public String getMealTypeName() {    
                 return mealTypeName;    
        }    
         public  void setMealTypeName(String mealTypeName) {    
                 this.mealTypeName = mealTypeName;    
        }    
}
MealDaoImpl.java
package com.michael.dao.impl;    

import java.sql.Connection;    
import java.sql.PreparedStatement;    
import java.sql.ResultSet;    
import java.sql.SQLException;    
import java.sql.Statement;    
import java.util.ArrayList;    
import java.util.List;    

import com.michael.dao.MealDao;    
import com.michael.jdbc.ConnectionUtil;    
import com.michael.vo.Meal;    
import com.michael.vo.MealBean;    

public  class MealDaoImpl  implements MealDao {    

         public  void add(Meal m) {    
                Connection conn =  new ConnectionUtil().openConnection();    
                String sql =  "insert into MealInfoTbl(createTime,userID,mealTypeID,mealNum,detail) values(?,?,?,?,?)";    
                 try {    
                        PreparedStatement pstmt = conn.prepareStatement(sql);    
                        pstmt.setString(1, m.getCreateTime());    
                        pstmt.setInt(2,m.getUserID());    
                        pstmt.setInt(3, m.getMealTypeID());    
                        pstmt.setInt(4, m.getMealNum());    
                        pstmt.setString(5, m.getDetail());    
                        pstmt.executeUpdate();    
                }  catch (SQLException e) {    
                        e.printStackTrace();    
                } finally{    
                         try {    
                                conn.close();    
                        }  catch (SQLException e) {    
                                e.printStackTrace();    
                        }    
                }    
        }    

         public List query() {    
                String sql =  " select mi.`createTime`, "+    
                                          " u.`user`, "+    
                                          " mt.`name`, "+    
                                          " mt.`price`, "+    
                                          " mi.`mealNum`, "+    
                                          " (mt.`price`*mi.`mealNum`) as total, "+    
                                          " mi.`detail` "+    
                                          " from MealInfoTbl as mi "+    
                                          " left join UserTbl as u "+    
                                          " on mi.`userID` = u.`id` "+    
                                          " left join MealTypeTbl as mt "+    
                                          " on mi.`mealTypeID` = mt.`id` ";    
                Connection conn =  new ConnectionUtil().openConnection();    
                 try {    
                        Statement stmt = conn.createStatement();    
                        ResultSet rs = stmt.executeQuery(sql);    
                         //封装结果集    
                        List list =  new ArrayList();    
                         //遍历结果集    
                         while(rs.next()){    
                                String createTime = rs.getString(1);    
                                String user = rs.getString(2);    
                                String mealTypeName = rs.getString(3);    
                                 int price = rs.getInt(4);    
                                 int mealNum = rs.getInt(5);    
                                 int total = rs.getInt(6);    
                                String detail = rs.getString(7);    
                                MealBean mb =  new MealBean();    
                                mb.setCreateTime(createTime);    
                                mb.setUser(user);    
                                mb.setMealTypeName(mealTypeName);    
                                mb.setPrice(price);    
                                mb.setMealNum(mealNum);    
                                mb.setTotal(total);    
                                mb.setDetail(detail);    
                                 //向list容器添加mb    
                                list.add(mb);    
                        }    
                         return list;    
                }  catch (SQLException e) {    
                        e.printStackTrace();    
                }    
                 return  null;    
        }    


MealDaoImplTest.java
package com.michael.test;    

import java.util.List;    

import com.michael.dao.MealDao;    
import com.michael.dao.impl.MealDaoImpl;    
import com.michael.vo.Meal;    

import junit.framework.TestCase;    

public  class MealDaoImplTest  extends TestCase {    
        MealDao dao;    
         protected  void setUp()  throws Exception {    
                 super.setUp();    
                 //实例化DAO    
                dao =  new MealDaoImpl();    
        }    

         protected  void tearDown()  throws Exception {    
                 super.tearDown();    
        }    

         public  void testAdd() {    
                Meal m =  new Meal();    
                m.setCreateTime( "2009-06-09");    
                m.setUserID(5);    
                m.setMealTypeID(2);    
                m.setMealNum(5);    
                m.setDetail( "very nice!");    
                dao.add(m);    
        }    

         public  void testQuery() {    
                List list = dao.query();    
                System.out.println(list.size());    
        }    


image
数据库己增加到数据,显示有四条记录
image 
################Michael分割线#####################