Dao编程模型

Dao编程模型 (未完善)

Dao编程模型

DAO:Data Access Object-即数据访问对象
我们现在使用的数据库都是关系型的,讲究的数据与数据之间的关联(RelationShip)
我们所使用的编程语言(Java)是面向对象的编程语言,讲究的是万事万物皆对象(Object)
JDBC处理数据库连接的实现方式是:在Java程序中编写SQL并执行,以实现与数据库进行对象并操作数据的目

问题就来了:SQL并不是以对象的角度在看待问题的
所以就产生了一种理念冲突,我们也将这种思想理念上的冲突称为阻抗不匹配,如果想解决这种模型不匹纺
ORM相关的编程模型来处理
ORM:Object-Relation-Mapping
类----表
属性----字段
对象----记录
Dao编程模型可以让你以操作对象的方式去完成对数据库中数据操作
Dao编程模型中有几个要素需要我们实现

  1. 一个DAO工厂类;
  2. 一个DAO接口;
  3. 一个实现DAO接口的具体类;
  4. 数据传递对象(有些时候叫做值对象即VO ).

数据传递对象又有几种分类
PO:持久化的对象,与数据表对应比较完整一种数据对象抽象
VO:值对象,与页面显示所有的值对应的一种数据对象抽象
DTO:数据传输对象,负责在程序内部的各层之间进行数据传递的数据对象抽象
POJO:简单数据对象,可以比较灵活的定义,一个POJO持久化以后就是PO;直接用它传递、传递过程中就是
DTO;直接用来对应表示层就是VO;

代码展示

这篇文章用到了上一篇文章:JDBC封装思想中的代码(jdbcSqlFactory),由于篇幅过长,不在本文展示

执行前数据库表内容
注:表名为country
在这里插入图片描述
创建country类(象征数据库中的表)

package jdbc.pojo;

public class country {
    private int cid;
    private String cname;
    private String location;

    public int getCid() {
        return cid;
    }

    public void setCid(int cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    @Override
    public String toString() {
        return "cid:"+this.cid+", cname:"+cname+",location"+location;
    }
}

定义Dao接口

package jdbc.dao;

import java.util.List;

public interface IDao <T,PK>{
    //增加
    public void save(T pojo);
    //删除
    public void cancel(PK pk);
    //修改
    public void modify(T pojo);
    //按条件查询
    public List<T> queryBycondition(T pojo);
    //查询一个
    public T queryOne(PK pk);
}

定义用于country操作的接口(继承Dao接口)

package jdbc.dao;
import jdbc.pojo.country;
public interface ICountryDao extends IDao<country,Integer>{

}

country的Dao的实现

package jdbc.impl;

import jdbc.dao.ICountryDao;
import jdbc.pojo.country;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import jdbc.util.jdbcSqlFactory;
public class CountryDaoImpl implements ICountryDao {
    private jdbcSqlFactory sqlFactory=new jdbcSqlFactory();
    @Override
    public void save(country pojo) {
        String insertSql="insert into country values (null,?,?)";
        sqlFactory.prepareUpdate(insertSql,pojo.getCname(),pojo.getLocation());
    }

    @Override
    public void cancel(Integer integer) {

    }

    @Override
    public void modify(country pojo) {

    }

    @Override
    public List<country> queryBycondition(country pojo) {
        List<country> countries=new ArrayList<>();

        String querySql="select * from country where 1=1 ";
        if (pojo!=null){
            if (pojo.getCid()!=0){
                querySql+="and cid="+pojo.getCid();
            }
            if (pojo.getCname()!=null&&!"".equals(pojo.getCname())){
                querySql+="and cname like '%"+pojo.getCname()+"%'";
            }
            if (pojo.getLocation()!=null&&!"".equals(pojo.getLocation())){
                querySql+="and location like '%"+pojo.getLocation()+"%'";
            }
        }
        List<Map<String,Object>> table=sqlFactory.executeQuery(querySql);

        for (Map<String,Object> row: table){
            country cou=new country();
            cou.setCid(Integer.valueOf(row.get("cid")+""));
            cou.setCname(String.valueOf(row.get("cname")));
            cou.setLocation(String.valueOf(row.get("location")));

            countries.add(cou);
        }

        return countries;
    }

    @Override
    public country queryOne(Integer integer) {
        return null;
    }
}

测试功能

import jdbc.util.jdbcSqlFactory;
import jdbc.pool.ConnectionPool;
import jdbc.pojo.country;
import jdbc.impl.CountryDaoImpl;
import jdbc.dao.ICountryDao;


public class daotest {
    public static void main(String[] args){
        country coun=new country();
        coun.setCname("song");
        coun.setLocation("do not konw");
        CountryDaoImpl countryDao=new CountryDaoImpl();
        countryDao.save(coun);
    }
}

执行后数据库表内容:
在这里插入图片描述
最后,本文中country的Dao实现代码只实现了两个方法(增加、按条件查询),后续代码,下一篇文章更新。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的大男子主义

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值