发表于: 2018-01-31 23:20:00

2 509


今天完成的事情:1.对DAO设计模式的学习;


DAO就是Data access object,也就是数据访问接口。数据访问接口就是夹在业务访问和数据库中间,与数据库打交道的。

DAO模式实际上是两个模式的组合,即Data Accessor (数据访问者)模式Active Domain Object(领域对象)模式。Data Accessor 模式实现了数据访问和业务逻辑的分离;Active Domain Object 模式实现了业务数据的对象化封装。


一个典型的DAO实现有下列几个组件:

  • 一个DAO接口;
  • 一个实现DAO接口的具体类; 
  • 数据传递对象(DTO):有些时候叫做值对象(VO)或领域模型(domain)

  • 使用 DAO模式 来对数据库做增删改查操作

     

    这种模式可以大概分为三个层:1.DAO层  2.服务层  3.表现层

    1)表现层 :相当于客户端用来查看,提交信息的角色

    2)服务层 :是表现层和DAO层的纽带,其实也没干什么事就是通知消息的角色

    3)DAO   :真正要做事的角色(对数据库的某些操作)

     

    举个生活中的例子:

    就好比你去餐厅吃饭,你充当一个 (表现层)的角色,然后有美女服务员(服务层),问你需要吃什么东西,给你下一张订单,让你填。之后服务员把订单传到 厨师(DAO层)那里,具体操作厨师会搞定,一段时间后厨师把做好的食物传给服务员,服务员把食物在传给客户,这些操作就算基本完成了。


执行顺序: 表现层-->服务层-->DAO层-->返回服务层-->返回表现层

 


代码设计:

项目结构图


DBUtils.java


package com.util.db;

 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ResourceBundle;

    public class DBUtils {
        
        //数据库连接地址
        public static String URL;
        //用户名
        public static String USERNAME;
        //密码
        public static String PASSWORD;
        //mysql的驱动类
        public static String DRIVER;
        
        private static ResourceBundle rb = ResourceBundle.getBundle("com.util.db.db-config");
        
        private DBUtils(){}
        
        //使用静态块加载驱动程序
        static{
            URL = rb.getString("jdbc.url");
            USERNAME = rb.getString("jdbc.username");
            PASSWORD = rb.getString("jdbc.password");
            DRIVER = rb.getString("jdbc.driver");
            try {
                Class.forName(DRIVER);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        //定义一个获取数据库连接的方法
        public static Connection getConnection(){
            Connection conn = null;
            try {
                conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            } catch (SQLException e) {
                e.printStackTrace();
                System.out.println("获取连接失败");
            }
            return conn;
        }
        
        /**
         * 关闭数据库连接
         * @param rs
         * @param stat
         * @param conn
         */
        public static void close(ResultSet rs,Statement stat,Connection conn){
                try {
                    if(rs!=null)rs.close();
                    if(stat!=null)stat.close();
                    if(conn!=null)conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
        }
        
    }

PersonDao.java


package com.vae.dao;
import java.sql.SQLException;
import java.util.List;

import com.vae.domain.Person;
public interface PersonDao {
    //添加方法
    public void add(Person p)throws SQLException;
    
    //更新方法
    public void update(Person p)throws SQLException;
    
    //删除方法
    public void delete(int id)throws SQLException;
    
    //查找方法
    public Person findById(int id)throws SQLException;
    
    //查找所有
    public List<Person> findAll()throws SQLException;
    
}


PersonDaoImpl.java

package com.vae.dao;
import java.sql.SQLException;
import java.util.List;

import com.vae.domain.Person;
public interface PersonDao {
    //添加方法
    public void add(Person p)throws SQLException;
    
    //更新方法
    public void update(Person p)throws SQLException;
    
    //删除方法
    public void delete(int id)throws SQLException;
    
    //查找方法
    public Person findById(int id)throws SQLException;
    
    //查找所有
    public List<Person> findAll()throws SQLException;
    
}

Person.java


package com.vae.domain;
    
public class Person {
      private int id;
      private String name;
      private int age;
      private String description;
      public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
        public Person(int id, String name, int age, String description) {
            super();
            this.id = id;
            this.name = name;
            this.age = age;
            this.description = description;
        }
        public Person(String name, int age, String description) {
            super();
            this.name = name;
            this.age = age;
            this.description = description;
        }
        public Person() {
            super();
            // TODO Auto-generated constructor stub
        }
        
        public String toString() {
            return "Person [id=" + id + ", name=" + name + ", age=" + age
                    + ", description=" + description + "]";
        }
        
        
    }


db-config.properties


jdbc.url=jdbc:mysql://localhost:3306/jdbcdb
jdbc.username=root
jdbc.password=628081
jdbc.driver=com.mysql.jdbc.Driver


数据库的设计:


create database jdbcdb;

use jdbcdb;

create table Person(
id int(10) primary key,
name varchar(8),
age int(3),
description varchar(20)
);
insert into person VALUES(2,'王育奕',20,'');

use test;
create table product_(
id int(11) not null auto_increment,
name varchar(30),
price float,
primary key(id)
);


2.Debug的学习


在控制台显示所有日志




debug.java

package com.yuyi.dubug;

public class dubug {
  public static void main(String[] args) {
      int i=0;
      for(;i<10;i++);{
          System.out.println(i);
      }
  }
}






明天计划的事情:1.框架的学习;


2.复习之前的知识;



遇到的问题:天气很冷,很想偷懒,单还是坚持下来了,因为看到大家都在努力,我也不能偷懒。



返回列表 返回列表
评论

    分享到