DAO模型的进一步修改

 

                                                                                                                                   

                                                                                                    

 

 

具体实现代码:

首先看构造图:

 

domain包中的student类:

package mis.domain;

import lombok.Data;

@Data

public class Student {

     public long id;

     public String name;

     public int age;

}

 

impl下的DAO实现类以及impl接口

 

DAO实现类:

package mis.impl;

import java.util.List;

import DQL_impl.beanhandler;

import DQL_impl.beanlisthandler;

import DQL_impl.handler;

import druiddemo.druid;

import mis.domain.Student;

import mis.impl.daoimpl.impl;

import template.modle;

public class DAO implements impl {

    

    @Override

    public void add(Student stu) {

        // TODO Auto-generated method stub

        String sql="INSERT INTO t_student(name,age)VALUES(?,?)";

        modle.DMLoperator(sql, stu.getName(),stu.getAge());

    }

    @Override

    public void delete(long id) {

        // TODO Auto-generated method stub

        String sql="DELETE FROM t_student where id=?";

        modle.DMLoperator(sql, id);

    }

    @Override

    public void update(Student stu,long id) {

        // TODO Auto-generated method stub

        String sql="UPDATE t_student SET name=?,age=? where id=?";

        modle.DMLoperator(sql, stu.getName(),stu.getAge(),id);

    }

    @Override

    public Student getone(long id) {

        // TODO Auto-generated method stub

        String sql="SELECT*FROM t_student where id=?";

        

        return modle.DQLoperator(sql,new beanhandler<>(Student.class),id);

    }

    

    @Override

    public List<Student> list() {

        // TODO Auto-generated method stub

       String sql="SELECT*FROM t_student ";

        

        return modle.DQLoperator(sql,new beanlisthandler<>(Student.class));

    }

  

}

 

 

impl接口:

package mis.impl.daoimpl;

 

import java.util.List;

 

import mis.domain.Student;

 

public interface impl {

    /**

     * 插入语句

     * @param stu

     */

     public  void  add(Student stu);

     /**

      * 删除语句

      * @param id

      */

     public void delete(long id);

     /**

      * 更新语句

      * @param stu

      */

     public void update(Student stu,long id);

     /**

      * 查询单条语句

      * @param id

      * @return

      */

     public Student getone(long id);

     /**

      * 查询多条语句

      * @return

      */

     public List<Student>list();

}

 

 

 

 

 

implTest测试类

 

package mis.test;

import java.util.List;

import org.junit.Test;

import mis.domain.Student;

import mis.impl.DAO;

public class implTest {

    @Test

    public void testAdd() {

        Student stu=new Student();

        stu.setAge(5);

        stu.setName("电子豹");

        DAO dao=new DAO();

        dao.add(stu);

    }

    @Test

    public void testDelete() {

        DAO dao=new DAO();

        dao.delete(27425);

    }

    @Test

    public void testUpdate() {

        Student stu=new Student();

        stu.setAge(1);

        stu.setName("星空2号");

        DAO dao=new DAO();

        dao.update(stu, 27389);

    }

    @Test

    public void testGetone() {

        DAO dao=new DAO();

        System.out.println(dao.getone(27430));

        

    }

    @Test

    public void testList() {

        DAO dao=new DAO();

        List<Student>list=dao.list();

        for(Student ele:list)

        {

            System.out.println(ele);

        }

    }

}

 

model类(存放DML和DQL操作模板)

 

package template;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import DQL_impl.typeimpl;

import druiddemo.druid;

public class modle  {

    

    public static int DMLoperator(String sql,Object...para)

    {

     Connection conn=druid.conn();

     PreparedStatement ps = null;

        try {

            ps = conn.prepareStatement(sql);

            for(int i=0;i<para.length;i++)

         {

         ps.setObject(i+1, para[i]);

         }

     return ps.executeUpdate();

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }finally {

            druid.close(conn, ps, null);

        }

     return 0;

    }

   

    public static <T>T  DQLoperator(String sql,typeimpl<T> type,Object...para)

    {

     Connection conn=druid.conn();

     PreparedStatement ps=null;

     ResultSet re=null;

        try {

            ps = conn.prepareStatement(sql);

            

             for(int i=0;i<para.length;i++)

             {

                 ps.setObject(i+1, para[i]);

             }

            

              re=ps.executeQuery();

              return type.hanlder(re);

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }finally {

            druid.close(conn, ps, re);

        }

     

     

        return null;

    }

}

 

文件

url=jdbc:mysql://localhost:3306/productdemo

driverClassName=com.mysql.jdbc.Driver

username=root

password=123456

maxActive=5

 

druid类

package druiddemo;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSourceFactory;

public class druid {

    private static DataSource dataSource;

    public druid() {};

    static {

        Properties p=new Properties();

        ClassLoader cla=Thread.currentThread().getContextClassLoader();

        InputStream in=cla.getResourceAsStream("druid.properties");

        try {

            p.load(in);

            Class.forName(p.getProperty("driverClassName"));

             dataSource=DruidDataSourceFactory.createDataSource(p);

        } catch (Exception e) {

            // TODO Auto-generated catch block

            throw new RuntimeException("文件加载异常");

        }

    }

    public static Connection conn()

    {

        try {

            return dataSource.getConnection();

        } catch (Exception e) {

            // TODO Auto-generated catch block

            throw new RuntimeException("数据库连接异常");

        }

    }

    public static void  close(Connection conn,Statement st,ResultSet re)

    {

         try {

               if(re!=null)

                    re.close();

            } catch (Exception e2) {

                // TODO: handle exception

                e2.printStackTrace();

            }

            finally {

                try {

                    if(st!=null)

                        st.close();

                } catch (Exception e3) {

                    // TODO: handle exception

                    e3.printStackTrace();

                }finally {

                    try {

                        if(conn!=null)

                            conn.close();

                    } catch (Exception e4) {

                        // TODO: handle exception

                        e4.printStackTrace();

                    }

                }

            }

    }

    

}

 

beanhanlder类

package DQL_impl;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.sql.ResultSet;

import java.beans.BeanInfo;

public class beanhandler<T> implements typeimpl<T>{

     private Class<T>classtype;

     public beanhandler(Class<T>classtype) {

        // TODO Auto-generated constructor stub

      this.classtype=classtype;

    }

    @Override

    public T hanlder(ResultSet rs) throws Exception {

        // TODO Auto-generated method stub

    

        if(rs.next())

        {

               T obj=classtype.newInstance();

               BeanInfo beanInfo=Introspector.getBeanInfo(classtype,Object.class);

               PropertyDescriptor[] pro=beanInfo.getPropertyDescriptors();

               for(PropertyDescriptor ps:pro)

               {

                String name=ps.getName();

                Object value=rs.getObject(name);

                ps.getWriteMethod().invoke(obj, value);

               }

               return obj;

        }

        return null;

    }

      

}

beanlisthanlder类

package DQL_impl;

 

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.List;

import java.beans.BeanInfo;

 

public class beanlisthandler<T> implements typeimpl<List<T>>{

     private Class<T>classtype;

     public beanlisthandler(Class<T>classtype) {

        // TODO Auto-generated constructor stub

         this.classtype=classtype;

    }

    @Override

    public List<T> hanlder(ResultSet rs) throws Exception {

        // TODO Auto-generated method stub

        List<T>list=new ArrayList<>();

        while(rs.next())

        {

               T obj=classtype.newInstance();

               BeanInfo beanInfo=Introspector.getBeanInfo(classtype,Object.class);

               PropertyDescriptor[] pro=beanInfo.getPropertyDescriptors();

               for(PropertyDescriptor ps:pro)

               {

                   String name=ps.getName();

                   Object value=rs.getObject(name);

                   ps.getWriteMethod().invoke(obj, value);

               }

               list.add(obj) ;

        }

        return list;

    }

       

}


handler类(用了beanhandler和beanlisthandler类后,没有使用它)

package DQL_impl;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.List;

import mis.domain.Student;

public class handler implements typeimpl<List<Student>>{

    @Override

    public List<Student> hanlder(ResultSet rs) throws Exception {

        // TODO Auto-generated method stub

        List<Student>list=new ArrayList<>();

        while(rs.next())

        {

            Student stu=new Student();

            stu.setId(rs.getLong("id"));

            stu.setName(rs.getString("name"));

            stu.setAge(rs.getInt("age"));

            list.add(stu);

        }

        return list;

    }

}

 

 

typeimpl接口

package DQL_impl;

import java.sql.ResultSet;

public interface typeimpl<T> {

     T hanlder(ResultSet rs)throws Exception;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值