JDBC基础(10)_JDBC 封装 Util 和 DAO 模式


JDBC 封装 Util 和 DAO 模式

封装 Util

  1. 新建工程
    在这里插入图片描述
  2. 引入驱动包
    在这里插入图片描述
  3. 建立属性文件,用于封装
    在这里插入图片描述
  4. 设置属性文件
    在这里插入图片描述
  5. 封装(代码见文末)
    在这里插入图片描述
  6. 创建 person 类
    在这里插入图片描述
  7. 编写 person 类(代码见文末)
    在这里插入图片描述

DAO 模式

  1. DAO(Data Access Object)模式就是写一个类,把访问数据库的代码封装起来。DAO 在数据库与业务逻辑(Service)之间。
    ① 实体域(JavaBean),即操作的对象,例如我们操作的表是 user 表,那么就需要先写一个User类;
    ② DAO 模式需要先提供一个 DAO 接口;
    ③ 然后再提供一个 DAO 接口的实现类;
    ④ 再编写一个 DAO 工厂,Service通过工厂来获取 DAO 实现。

  2. 再新建一个包,新建接口
    在这里插入图片描述

  3. 编写接口 PersonDao(代码见文末)
    在这里插入图片描述

  4. 再新建一个包,新建类 PersonDaoImpl,并实现接口 PersonDao
    在这里插入图片描述

  5. 编写 PersonDaoImpl 类(代码见文末)
    在这里插入图片描述

  6. 再次建立一个包,建立测试类
    在这里插入图片描述

  7. 编写测试类(代码见文末)
    在这里插入图片描述

  8. 程序运行结果
    在这里插入图片描述

源码

  • DBUtils 类
    package cn.wyx;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class DBUtils
    {
    	/*
    	 * 获得连接
    	 */
    	public static Connection getConn()
    	{
    		// 从类加载器获得资源,以流的形式将资源引过来
    		InputStream in = DBUtils.class.getClassLoader().getResourceAsStream("db.properties");
    		// 实例化类 Properties
    		Properties prop = new Properties();
    		// 定义连接
    		Connection conn = null;
    		try
    		{
    			// 加载
    			prop.load(in);
    			// 从属性文件当中读取值
    			String driverClass = prop.getProperty("driverClass");
    			String url = prop.getProperty("url");
    			String username = prop.getProperty("username");
    			String password = prop.getProperty("password");
    			// 注册驱动
    			Class.forName(driverClass);
    			// 获得连接
    			conn = DriverManager.getConnection(url, username, password);
    		} catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    		// 返回连接
    		return conn;
    	}
    
    	/*
    	 * 获得SQL的执行对象
    	 */
    	public static PreparedStatement getPstmt(String sql)
    	{
    		Connection conn = getConn();
    		PreparedStatement pstmt = null;
    		try
    		{
    			pstmt = conn.prepareStatement(sql);
    		} catch (SQLException e)
    		{
    			e.printStackTrace();
    		}		
    		return pstmt;
    	}
    
    	/*
    	 * 资源的关闭
    	 */
    	public static void closeUpdateRes(PreparedStatement ps)
    	{
    		if (ps != null)
    		{
    			try
    			{
    				Connection conn = ps.getConnection();
    				ps.close();
    				if (conn != null)
    				{
    					conn.close();
    				}
    			} catch (SQLException e)
    			{
    				e.printStackTrace();
    			}
    		}
    	}
    
    	/*
    	 * 资源的关闭
    	 */
    	public static void closeQueryRes(ResultSet rs)
    	{
    		if (rs != null)
    		{
    			Statement pstmt;
    			try
    			{
    				pstmt = rs.getStatement();
    				if (pstmt != null)
    				{
    					Connection conn = pstmt.getConnection();
    					rs.close();
    					pstmt.close();
    					if (conn != null)
    					{
    						conn.close();
    					}
    				}
    			} catch (SQLException e)
    			{
    				e.printStackTrace();
    			}
    		}
    	}
    }
    
  • person 类
    package cn.wyx;
    
    import java.util.Date;
    
    public class Person
    {
    	private Integer id;
    
    	private String name;
    
    	private String gender;
    
    	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 String getGender()
    	{
    		return gender;
    	}
    
    	public void setGender(String gender)
    	{
    		this.gender = gender;
    	}
    
    	public Date getBirthday()
    	{
    		return birthday;
    	}
    
    	public void setBirthday(Date birthday)
    	{
    		this.birthday = birthday;
    	}
    
    	@Override
    	public String toString()
    	{
    		return "Person [id=" + id + ", name=" + name + ", gender=" + gender
    				+ ", birthday=" + birthday + "]";
    	}	
    }
    
  • 接口 PersonDao
    package cn.wyx.dao;
    
    import java.util.List;
    
    import cn.wyx.Person;
    
    public interface PersonDao
    {
    	public void savePerson(Person p);
    
    	public void updatePerson(Person p);
    
    	public Person getPersonById(Integer id);
    
    	public List<Person> listPerson();
    }
    
  • 类 PersonDaoImpl
    package cn.wyx.dao.impl;
    
    import java.sql.Date;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import cn.wyx.dao.PersonDao;
    import cn.wyx.DBUtils;
    import cn.wyx.Person;
    
    public class PersonDaoImpl implements PersonDao
    {
    	@Override
    	public Person getPersonById(Integer id)
    	{
    		String sql = "select * from person t where t.id = ?";
    		PreparedStatement pstmt = DBUtils.getPstmt(sql);
    		Person p = null;
    		ResultSet rs = null;
    		try
    		{
    			pstmt.setInt(1, id);
    			rs = pstmt.executeQuery();
    			// 游标向下移动
    			rs.next();
    			// 获得查询出来的数据
    			Integer personid = rs.getInt("id");
    			String name = rs.getString("name");
    			String gender = rs.getString("gender");
    			java.util.Date birthday = rs.getDate("birthday");
    			// 创建person对象并且赋值
    			p = new Person();
    			p.setId(personid);
    			p.setName(name);
    			p.setGender(gender);
    			p.setBirthday(birthday);
    
    		} catch (SQLException e)
    		{
    			e.printStackTrace();
    		} finally
    		{
    			DBUtils.closeQueryRes(rs);
    		}
    		return p;
    	}
    
    	@Override
    	public List<Person> listPerson()
    	{
    		String sql = "select * from person ";
    		PreparedStatement pstmt = DBUtils.getPstmt(sql);
    		List<Person> pList = new ArrayList<Person>();
    		ResultSet rs = null;
    		try
    		{
    			rs = pstmt.executeQuery();
    			// 游标向下移动
    			while (rs.next())
    			{
    				// 获得查询出来的数据
    				Integer personid = rs.getInt("id");
    				String name = rs.getString("name");
    				String gender = rs.getString("gender");
    				java.util.Date birthday = rs.getDate("birthday");
    				// 创建person对象并且赋值
    				Person p = new Person();
    				p.setId(personid);
    				p.setName(name);
    				p.setGender(gender);
    				p.setBirthday(birthday);
    				pList.add(p);
    			}
    
    		} catch (SQLException e)
    		{
    			e.printStackTrace();
    		} finally
    		{
    			DBUtils.closeQueryRes(rs);
    		}
    		return pList;
    	}
    
    	@Override
    	public void savePerson(Person p)
    	{
    		String sql = "insert into person values(personid.nextval, ?,?,?)";
    		PreparedStatement pstmt = DBUtils.getPstmt(sql);
    		try
    		{
    			pstmt.setString(1, p.getName());
    			pstmt.setString(2, p.getGender());
    			pstmt.setDate(3, new Date(p.getBirthday().getTime()));
    			pstmt.executeUpdate();
    		} catch (Exception e)
    		{
    			e.printStackTrace();
    		} finally
    		{
    			DBUtils.closeUpdateRes(pstmt);
    		}
    	}
    
    	@Override
    	public void updatePerson(Person p)
    	{
    		String sql = "update person t set t.name = ?, t.gender = ?, t.birthday = ? where t.id = ?";
    		PreparedStatement pstmt = DBUtils.getPstmt(sql);
    		try
    		{
    			pstmt.setString(1, p.getName());
    			pstmt.setString(2, p.getGender());
    			pstmt.setDate(3, new Date(p.getBirthday().getTime()));
    			pstmt.setInt(4, p.getId());
    			pstmt.executeUpdate();
    		} catch (Exception e)
    		{
    			e.printStackTrace();
    		} finally
    		{
    			DBUtils.closeUpdateRes(pstmt);
    		}
    	}
    }
    
  • 测试类 PersonTest
    package cn.wyx.test;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    
    import cn.wyx.dao.PersonDao;
    import cn.wyx.dao.impl.PersonDaoImpl;
    import cn.wyx.Person;
    
    public class PersonTest
    {
    
    	public static void main(String[] args)
    	{
    		//insert();
    		//update();
    		//query();
    		querys();	
    	}
    	
    	/**
    	 * 向数据库当中插入数据
    	 */
    	public static void insert()
    	{
    		PersonDao personDao = new PersonDaoImpl();
    		Person p = new Person(); 
    		p.setName("weiyuxuan"); 
    		p.setGender("2");
    		p.setBirthday(new Date()); 
    		personDao.savePerson(p);
    	}
    	
    	/**
    	 * 更新数据库数据
    	 * @throws ParseException
    	 */
    	public static void update() 
    	{
    		PersonDao personDao = new PersonDaoImpl();
    		Person p = new Person(); 
    		p.setId(108); // 需要与数据库保持一致
    		p.setName("wyx");
    		p.setGender("1"); 
    		try
    		{
    			p.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1985-04-22"));
    		} catch (ParseException e)
    		{
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		personDao.updatePerson(p);
    	}
    	
    	/**
    	 * 单条数据的查询
    	 */
    	public static void query()
    	{
    		PersonDao personDao = new PersonDaoImpl();
    		Person p = personDao.getPersonById(108); 
    		System.out.println(p);
    	}
    	
    	/**
    	 * 查询数据库多条数据
    	 */
    	public static void querys()
    	{
    		PersonDao personDao = new PersonDaoImpl();
    		List<Person> pList = personDao.listPerson();
    		for (Person person : pList)
    		{
    			System.out.println(person);
    		}
    	}
    }
    

如有错误,欢迎指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值