dao模式--基础

一共有23种设计模式
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
单例模式:为了解决只创建唯一一个类
解决办法:不能创建公共的方法,创建一个静态的方法,在多线程的环境下有问题,可以有一系列的解决办法

dao全称是data access object,数据访问对象
主要的功能就是用于进行数据操作的,在程序的标准开发架构中属于数据层的操作
一个典型的dao模式应该包括的部分有
vo:值对象 value object
dao接口:封装所有的数据的操作
面向接口编程的主要优点就是:1.高内聚,低耦合;2.易于程序扩展和维护;
对扩展开放,对修改关闭
dao实现类
将定义和实现分开,这么做最大的优点就是解耦,降低程序的耦合性
dao工厂:用来创建dao对象
把对数据的各种操作封装

例:对图书表进行操作的dao
vo:book//映射
bookid,bookname,price
dao:bookdao//操作
void insert();
void delete();
void update();
void select();
1.定义一个Sys_user 类(vo);
含有数据库表中的字段

package vo;

public class Sys {
         Integer userid;
         String username;
         Integer remain;
		public Sys(String username, Integer remain) {
			super();
			this.username = username;
			this.remain = remain;
		}
		public Sys() {
			super();
		}
		public Integer getUserid() {
			return userid;
		}
		public void setUserid(Integer userid) {
			this.userid = userid;
		}
		public String getUsername() {
			return username;
		}
		public void setUsername(String username) {
			this.username = username;
		}
		public Integer getRemain() {
			return remain;
		}
		public void setRemain(Integer remain) {
			this.remain = remain;
		}
		@Override
		public String toString() {
			return "Sys [userid=" + userid + ", username=" + username + ", remain=" + remain + "]";
		}
		
		
         
         
}

定义一个dao接口

package dao;

import java.util.List;

import vo.Sys;


/*
 * 对Sys_user对象各种操作的封装
 */
public interface SysDao {
	void delete(Integer userid);
	
	
	List<Sys> getAll();
	void insert(Sys s);
	boolean update(Sys s);
	Sys getSysById(Integer userid);
}


定义实现类

package dao;

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

import util.JdbcUtil;
import vo.Sys;

public class Sys_userDaoImpl implements SysDao {

	@Override
	public void insert(Sys s) {
		// TODO Auto-generated method stub
         //
		String sql = "insert into Sys_user values(null,?,?)";
         try(Connection conn = JdbcUtil.getConnections();
        		 PreparedStatement ps= conn.prepareStatement(sql))
         {
        	 ps.setString(1, s.getUsername());
        	 ps.setInt(2, s.getRemain());
        	 
        	 ps.execute();
        	 System.out.println("插入一个账户:"+s);
        	 
        	 
         } catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void delete(Integer userid) {
		// TODO Auto-generated method stub
        String sql="delete from Sys_user where userid = ?";
        try(Connection conn = JdbcUtil.getConnections();
       		 PreparedStatement ps= conn.prepareStatement(sql))
        {
               ps.setInt(1, userid);
               ps.execute();
        } catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        System.out.println("删除成功");
	}

	@Override
	public boolean update(Sys s) {
		// TODO Auto-generated method stub
		int b=0;
		String sql = "update Sys_user set userName=?,remain=? where userid = ?";
		try(Connection conn = JdbcUtil.getConnections();
       		 PreparedStatement ps= conn.prepareStatement(sql))
        {
			
			ps.setString(1, s.getUsername());
			ps.setInt(2, s.getRemain());
			ps.setInt(3, s.getUserid());
			
			b= ps.executeUpdate();
			} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("更新成功!");
		return b>0?true:false;
	}
           
}

重复的代码过多:
对方法进行重构;改变方法里边的内容,不影响用户使用
不重复的地方只有sql语句
1.5版本的新特性 可变参数
优化后:

package util;

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

public class JdbcUtil {
	
	static String url="jdbc:mysql://localhost:3306/java1114";
	static String user="root";
	static String password="root";
	static 
	{
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static Connection getConnections()
	{
		try {
			return DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 执行一个sql
	 * @param sql
	 * @param args;sql语句需要绑定的参数值  
	 * @return
	 */
	 
	public static int executeSql(String sql,Object...args) {
		int count = 0;
		try(Connection conn = JdbcUtil.getConnections();
				PreparedStatement ps = conn.prepareStatement(sql)){
			
			for(int i=0;i<args.length;i++) {
				ps.setObject(i+1, args[i]);
			}
			count = ps.executeUpdate();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return count;
	}
}

package dao;

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

import util.JdbcUtil;
import vo.Sys;

public class SysDaoImpl implements SysDao {

	String sql_insert = "insert into Sys_user values(null,?,?)";
	  String sql_delete="delete from Sys_user where userid = ?";
	  String sql_update = "update Sys_user set userName=?,remain=? where userid = ?";
	@Override
	public void insert(Sys s) {
		// TODO Auto-generated method stub
        JdbcUtil.executeSql(sql_insert, s.getUsername(),s.getRemain());
        System.out.println("插入成功!"+s);
        
	}

	@Override
	public void delete(Integer userid) {
		// TODO Auto-generated method stub
      JdbcUtil.executeSql(sql_delete, userid);
        System.out.println("删除成功!"+userid);
	}

	@Override
	public boolean update(Sys s) {
		// TODO Auto-generated method stub
		if(JdbcUtil.executeSql(sql_update, s.getUsername(),s.getRemain(),s.getUserid())!=0)
			return true;
		return false;
		       
	}
           
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值