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;
}