**
javaEE-体系结构
**
在实际开发中,java编程语言设计程序会使用javaEE三层架构这种方式。
三层架构:表示层(web层)、业务逻辑层(service)、数据访问层(date access object)。
**
Dao模式
DAO(Data Access Object)是javaEE三层中持久层的设计模式。是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。
DAO模式解决的问题: 在持久层将数据源以及数据源的操作封装起来。并提供通过对象操作数据源接口,提供给业务层使用。
- 数据源(数据库)
- Business Object 业务层代码,调用DAO,完成对数据源的操作
- Date Access Object 数据访问对象,持久层DAO程序,封装对数据源CRUD,提供方法参数都是java对象。
- TransferObject 传输对象,业务层通过向数据层传递TO对象,完成数据源的CRUD。
注意:DAO设计模式是javaEE持久层的设计模式,跟通用的设计模式是不同的,比如说通用的设计模式有:单例模式,装饰者模式,迭代器模式,适配器模式等待,是用来解决软件中常见的问题。
DAO(Data Access Object)模式就是写一个类,把访问数据库的代码封装起来。DAO在数据库与业务逻辑(Service)之间。
- 实体域,即操作的对象,例如我们操作的表是user表,那么就需要先写一个User类;
- DAO模式需要先提供一个DAO接口;
- 然后再提供一个DAO接口的实现类;
- 再编写一个DAO工厂,Service通过工厂来获取DAO实现。DAO模式,进行三层结构搭建,java工程添加如下级别的包:src
1、JavaBean:User.java
import java.sql.Date;
//实体类
public class User_ {
private Integer id; //私有属性对应表格字段 类型以包装类Integer对应int 名称设置相同
private String name;
private Integer age;
private String adress;
private Date birthday;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public User_() { //无参构造方法,创建对象
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", adress='" + adress + '\'' +
", birthday=" + birthday +
'}';
}
}
2、UserDao
public interface UserDao {
//增加
public void addUser(User_ user) throws SQLException;
//修改
public void updateUser(User_ User) throws SQLException;
//删除
public void deleteUserByid(Integer id) throws SQLException;
//查询
public List<User_> queryUserAll() throws SQLException;
//查询一条数据
public User_ queryUserbyid(Integer id) throws SQLException;
}
3、UserDaoImpl
public class UserDaoImpl implements UserDao {
//获取配置文件设置
/获取C3p0程序池连接
private QueryRunner queryRunner=new QueryRunner(new DriverManagerDataSource());
@Override
//实现添加数据
public void addUser(User_ user) throws SQLException {
//new DriverManagerDataSource() 创建C3P0 配置文件数据
//通过C3P0 连接池 获取连接池对象连接
String sql=" insert into user (name,age,adress,birthday) values (?,?,?,?) ";
//执行update方法
queryRunner.update(sql,user.getName(),user.getAge(),user.getAdress(),user.getBirthday());
// PreparedStatement pst = conn.prepareStatement(sql);
}
//实现更新数据
@Override
public void updateUser(User_ user) throws SQLException {
//创建C3p0连接池
//创建工具类对象
QueryRunner queryruner=new QueryRunner(new DriverManagerDataSource());
String sql=" update user set name=?,age=?,adress=?,birthday=? where id=? ";
queryruner.update(sql,user.getName(),user.getAge(),user.getAdress(),user.getBirthday(),user.getId());
}
//实现修改数据
@Override
public void deleteUserByid(Integer id) throws SQLException {
String sql=" delete from user where id=? ";
queryRunner.update(sql,id);
}
//实现查询全部数据
@Override
public List<User_> queryUserAll() throws SQLException {
List<User_> listuser= new ArrayList<User_>();
String sql=" select * from user ";
listuser = queryRunner.query(sql, new BeanListHandler<User_>(User_.class));
return listuser;
}
//查询一行数据
@Override
public User_ queryUserbyid(Integer id) throws SQLException {
List<User_> listuser= new ArrayList<>();
String sql="select*from user where id=?";
User_ query = queryRunner.query(sql, new BeanHandler<User_>(User_.class), id);
if(query==null)return null;
return query;
}
}