BaseDAO抽取
一、BaseDAO代码
代码语言:javascript
复制package com.lanson.dao;
import com.lanson.pojo.Emp;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: Lansonli
* @Description: MircoMessage:Mark_7001
*/
public abstract class BaseDao {
private static String driver ="com.mysql.cj.jdbc.Driver";
private static String url="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
private static String user="root";
private static String password="root";
public int baseUpdate(String sql,Object ... args){
// 向 Emp表中增加一条数据
Connection connection = null;
PreparedStatement preparedStatement=null;
int rows=0;
try{
Class.forName(driver);
connection = DriverManager.getConnection(url, user,password);
preparedStatement = connection.prepareStatement(sql);
//设置参数
for (int i = 0; i <args.length ; i ) {
preparedStatement.setObject(i 1, args[i]);
}
//执行CURD
rows =preparedStatement.executeUpdate();// 这里不需要再传入SQL语句
}catch (Exception e){
e.printStackTrace();
}finally {
if(null != preparedStatement){
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(null != connection){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return rows;
}
public List baseQuery(Class clazz,String sql,Object ... args) {
// 查询名字中包含字母A的员工信息
Connection connection = null;
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
List list =null;
try{
Class.forName(driver);
connection = DriverManager.getConnection(url, user,password);
preparedStatement = connection.prepareStatement(sql);//这里已经传入SQL语句
//设置参数
for (int i = 0; i <args.length ; i ) {
preparedStatement.setObject(i 1, args[i]);
}
//执行CURD
resultSet = preparedStatement.executeQuery();// 这里不需要再传入SQL语句
list=new ArrayList() ;
// 根据字节码获取所有 的属性
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);// 设置属性可以 访问
}
while(resultSet.next()){
// 通过反射创建对象
Object obj = clazz.newInstance();//默认在通过反射调用对象的空参构造方法
for (Field field : fields) {// 临时用Field设置属性
String fieldName = field.getName();// empno ename job .... ...
Object data = resultSet.getObject(fieldName);
field.set(obj,data);
}
list.add(obj);
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(null != resultSet){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(null != preparedStatement){
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(null != connection){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return list;
}
}
二、实现类代码
代码语言:javascript
复制package com.lanson.dao.impl;
import com.lanson.dao.BaseDao;
import com.lanson.dao.EmpDao;
import com.lanson.pojo.Emp;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: Lansonli
* @Description: MircoMessage:Mark_7001
*/
public class EmpDaoImpl extends BaseDao implements EmpDao {
@Override
public int addEmp(Emp emp) {
String sql="insert into emp values(DEFAULT ,?,?,?,?,?,?,?)";
return baseUpdate(sql, emp.getEname(),emp.getJob(),emp.getMgr(),emp.getHiredate(),emp.getSal(),emp.getComm(),emp.getDeptno());
}
@Override
public int deleteByEmpno(int empno) {
String sql="delete from emp where empno =?";
return baseUpdate(sql, empno);
}
@Override
public List<Emp> findAll() {
String sql ="select * from emp";
return baseQuery(Emp.class, sql );
}
@Override
public int updateEmp(Emp emp) {
String sql="update emp set ename =? ,job=?, mgr =?,hiredate =?,sal=?,comm=?,deptno=? where empno =?";
return baseUpdate(sql, emp.getEname(),emp.getJob(),emp.getMgr(),emp.getHiredate(),emp.getSal(),emp.getComm(),emp.getDeptno(),emp.getEmpno());
}
}
代码语言:javascript
复制package com.lanson.dao.impl;
import com.lanson.dao.BaseDao;
import com.lanson.dao.DeptDao;
import com.lanson.pojo.Dept;
import com.lanson.pojo.Emp;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: Lansonli
* @Description: MircoMessage:Mark_7001
*/
public class DeptDaoImpl extends BaseDao implements DeptDao {
@Override
public List<Dept> findAll() {
String sql="select * from dept";
return baseQuery(Dept.class, sql);
}
@Override
public int addDept(Dept dept) {
String sql="insert into dept values(?,?,?)";
return baseUpdate(sql, dept.getDeptno(),dept.getDname(),dept.getLoc());
}
}