DAO结构编程理解:
我们不妨想想jdbc结构,jdbc作为sun公司定义的一套接口规范,旗下很多公司都实现 了jdbc接口,即jdbc的实现类 ==数据库。我们知道数据库很多种。由于是这种定义接口规范的方式,可以让编程人员操作jdbc的时候方便的实现数据库的切换。
DAO结构层次如下:
1.dao接口。这里定义了要实现的功能
2.daoImp 接口的实现类
3.daoBeanFactory 用来动态获取daoImp
4.daoConfig.properties 配置文件
案例代码:完成一个用户的crud编程
- import java.util.List;
- import cn.jdbc.entity.DaoUser;
- public interface UserDao {
- public abstract void add(DaoUser user);
- public abstract void deleteById(int id);
- public abstract void update(String sql);
- public abstract DaoUser findById(int id);
- public abstract List<DaoUser> findAll();
- }
- package cn.jdbc.daoImp;
- import java.sql.Connection;
- import java.sql.Date;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.List;
- import cn.jdbc.dao.UserDao;
- import cn.jdbc.entity.DaoUser;
- import cn.utils.JdbcUtil;
- public class UserDaoImp implements UserDao {
- //测试用的 规范是要建立测试类的
- public static void main(String[] args) throws ParseException{
- /**复习知识点date的用法
- * 1.Date和String类型的转换
- * a.构建simpleDateFormat对象sdf(即格式)
- * b.通过sdf.parse(String) 来将一个字符串转换成date对象
- * c.通过sdf.format(Date)将Date转成一个字符串
- * 2.java.util.Date和java.sql.Date的转换
- * a.sql.Date date=new sql.Date(new util.Date().getTime() )
- * 结合1,2就可以将一个字符串按某种要求的格式,通过Util.Date插入到数据库中的sql.Date字段*/
- UserDaoImp udi=new UserDaoImp();
- /*DateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
- //sdf.parse("1988-02-23") 这是java.util.Date 类型在。getTime() 变成long
- Date s=new Date(sdf.parse("1990-12-06").getTime());
- DaoUser user=new DaoUser(2,"zhansan",s);
- udi.add(user);*/
- //udi.deleteById(1);
- //DaoUser user=udi.findById(2);
- //System.out.println(user.getName());
-
- udi.update("update daoUser set birthday=to_date('1991-06-18','yyyy-MM-dd')" +
- " where id=1");
-
- }
- @Override
- public void add(DaoUser user) {
- Connection conn=JdbcUtil.getConnection();
- PreparedStatement ps=null;
- String sql="insert into daoUser values(?,?,?)";
- try {
- ps=conn.prepareStatement(sql);
- ps.setInt(1, user.getId());
- ps.setString(2,user.getName());
- ps.setDate(3,user.getDate());
- ps.executeUpdate();
- } catch (SQLException e) {
- e.printStackTrace();
- throw new RuntimeException(e);
- }finally{
- JdbcUtil.freeSource(null, ps, conn);
- }
- }
- @Override
- public void deleteById(int id) {
- Connection conn=JdbcUtil.getConnection();
- Statement st=null;
- String sql="delete daoUser where id="+id;
- try {
- st=conn.createStatement();
- st.execute(sql);
- } catch (SQLException e) {
- e.printStackTrace();
- throw new RuntimeException(e);
- }finally{
- JdbcUtil.freeSource(null, st, conn);
- }
-
- }
- @Override
- public List<DaoUser> findAll() {
- return null;
- }
- @Override
- public DaoUser findById(int id) {
- Connection conn=JdbcUtil.getConnection();
- Statement st=null;
- ResultSet rs=null;
- String sql="select * from daoUser where id="+id;
- try {
- st=conn.createStatement();
- rs=st.executeQuery(sql);
- if(rs.next()){
- DaoUser user=new DaoUser();
- user.setId(rs.getInt("id"));
- user.setName(rs.getString("name"));
- user.setDate(rs.getDate("birthday"));
- return user;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- throw new RuntimeException(e);
- }finally{
- JdbcUtil.freeSource(null, st, conn);
- }
-
- return null;
- }
- @Override
- public void update(String sql) {
- Connection conn=JdbcUtil.getConnection();
- Statement st=null;
- try {
- st=conn.createStatement();
- st.executeUpdate(sql);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }finally{
- JdbcUtil.freeSource(null, st, conn);
- }
- }
- }
- package cn.jdbc.daoBeanFactory;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Properties;
- import cn.jdbc.dao.UserDao;
- public class UserDaoBeanFactory {
- //从配置文件中动态的选择dao的实现类。实现类dao和某个imp绑定
- public static UserDao getInstance(){
- InputStream ins=UserDaoBeanFactory.class.getClassLoader().
- getResourceAsStream("daoConfig.properties");
- Properties prop=new Properties();
- UserDao userDao=null;
- try {
- prop.load(ins);
- userDao=(UserDao) Class.forName(prop.getProperty("daoImp")).newInstance();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- return userDao;
- }
- }
- package cn.jdbc;
- import java.sql.Date;
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import cn.jdbc.dao.UserDao;
- import cn.jdbc.daoBeanFactory.UserDaoBeanFactory;
- import cn.jdbc.entity.DaoUser;
- public class DaoTest {
- /**
- * @param args
- * @throws ParseException
- */
- public static void main(String[] args) throws ParseException {
- //这里通过factory实现了接口和实现类的解耦,
- //当我们由于需求需要变更dao的实现类时候,只需在配置文件修改即可
- UserDao userDao=UserDaoBeanFactory.getInstance();
- DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
- Date date=new Date(df.parse("1993-06-18").getTime());
- userDao.add(new DaoUser(3,"zhaoliu",date));
- }
- }
复制代码 |
|