发表于: 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.复习之前的知识;
遇到的问题:天气很冷,很想偷懒,单还是坚持下来了,因为看到大家都在努力,我也不能偷懒。
评论