由于在搭建编写万能DAO时,已经写了大量的代码
在此只给出部分的测试源码
如有需要完整项目或者有任何建议联系973639421
package com.oman.bean;
public class Person {
private int id;
private String name;
private int age;
private int type;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
package com.oman.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import com.oman.bean.Person;
import com.oman.util.BaseConnection;
public class PersonDao {
//编写普通查询方法
public ArrayList getList(){
ArrayList list = new ArrayList();
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "select * from Person";
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
Person person = new Person();
person.setId(rs.getInt("id"));
person.setName(rs.getString("name"));
person.setAge(rs.getInt("age"));
person.setType(rs.getInt("type"));
list.add(person);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRec(conn, ps, rs);
}
return list;
}
//编写普通插入方法
public boolean insert(Person person){
boolean flag = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
String sql = "insert into Person(name,age,type) values(?,?,?)";
try {
ps = conn.prepareStatement(sql);
ps.setString(1, person.getName());
ps.setInt(2, person.getAge());
ps.setInt(3, person.getType());
int a = ps.executeUpdate();
if(a > 0){
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRec(conn, ps);
}
return flag;
}
//编写普通修改方法
public boolean update(Person person){
boolean flag = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
String sql = "update person set name = ?,age = ?,type = ? where id = ?";
try {
ps = conn.prepareStatement(sql);
ps.setString(1, person.getName());
ps.setInt(2, person.getAge());
ps.setInt(3, person.getType());
ps.setInt(4, person.getId());
int a = ps.executeUpdate();
if(a>0){
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRec(conn, ps);
}
return flag;
}
}
package com.oman.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class BaseConnection {
//首先编写一个获取Connection的方法
public static Connection getConnection (){
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","root");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
//其次编写关闭资源的方法
public static void closeRec(Connection conn,PreparedStatement ps){
try {
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void closeRec(Connection conn,PreparedStatement ps,ResultSet rs){
try {
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
if(rs!=null){
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.oman.util;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import com.oman.bean.Person;
//编写万能DAO类
public class BaseDao {
//查询所有
public ArrayList getList(Class cl){
ArrayList list = new ArrayList();
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
//由于数据库中的表名对应的是实体类的类名,所以可以通过传入的类得到表名cl.getSimpleName()
String sql = "select * from " + cl.getSimpleName();
//获取类对象的所有属性
Field[] fi = cl.getDeclaredFields();
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
Object object = cl.newInstance();//实例化类对象
for(Field ff:fi){
ff.setAccessible(true);//打开控制访问权限
ff.set(object, rs.getObject(ff.getName()));
}
list.add(object);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRec(conn, ps, rs);
}
return list;
}
//根据表的主键查询表的对象
public Object getObjectById(Class cl,int id){
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
Field[] fi = cl.getDeclaredFields();
//由于类中不一定用id表示编号,但是通常类中的第一个属性为编号id
String sql = "select * from " + cl.getSimpleName() + " where " + fi[0].getName() + " = " + id;
Object object = null;
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
object = cl.newInstance();
for(Field ff:fi){
ff.setAccessible(true);
ff.set(object, rs.getObject(ff.getName()));
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRec(conn, ps, rs);
}
return object;
}
//根据特定条件查询
public ArrayList getListByCondition(Class cl,String name,Object value){
ArrayList list = new ArrayList();
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "select * from " + cl.getSimpleName() + " where " + name + " = '" + value+"'";
Field[] fi = cl.getDeclaredFields();
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
Object object = cl.newInstance();//实例化类对象
for(Field ff:fi){
ff.setAccessible(true);//打开控制访问权限
ff.set(object, rs.getObject(ff.getName()));
}
list.add(object);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRec(conn, ps, rs);
}
return list;
}
//插入对象
public boolean insert(Object object){
boolean flag = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
//获取对象的类
Class cl = object.getClass();
Field[] fi = cl.getDeclaredFields();
//insert into Person(name) values(?,?,?)
//以下开始拼接sql语句
//两个String对象的连接是很耗费资源的,以下方法可以通过StringBuffer优化,
//可以减少资源利用,使用apand对StringBuffer进行拼接
String sql = "insert into " + cl.getSimpleName() + " (";
for (int i = 1; i < fi.length; i++) {
sql = sql + fi[i].getName();
if (i < fi.length-1) {
sql = sql + ",";
}
}
sql = sql + ") values(";
for (int i = 1; i < fi.length; i++) {
sql = sql + "?";
if (i < fi.length-1) {
sql = sql + ",";
}
}
sql = sql + ")";
try {
ps = conn.prepareStatement(sql);
for(int i = 1;i 0){
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRec(conn, ps);
}
return flag;
}
//优化插入
public boolean insert1(Object object){
boolean flag = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Class cl = object.getClass();
Field[] fi = cl.getDeclaredFields();
StringBuffer sb = new StringBuffer();
sb.append("insert into ");
sb.append(cl.getSimpleName());
sb.append(" (");
for(int i = 1;i0){
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRec(conn, ps);
}
return flag;
}
//更新
public boolean update(Object object){
boolean flag = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Class cl = object.getClass();
Field[] fi = cl.getDeclaredFields();
StringBuffer sb = new StringBuffer();
//update person set name = ?,age = ?,type = ? where id = ?
sb.append(" update ");
sb.append(cl.getSimpleName());
sb.append(" set ");
for(int i = 1;i0){
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRec(conn, ps);
}
return flag;
}
//根据id删除
public boolean delete(Class cl , int id){
boolean flag = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Field[] fi = cl.getDeclaredFields();
String sql = "delete from "+cl.getSimpleName()+" where "+fi[0].getName()+" = ?";
try {
ps = conn.prepareStatement(sql);
ps.setObject(1, id);
int a = ps.executeUpdate();
if(a>0){
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRec(conn, ps);
}
return flag ;
}
//根据特定条件删除
public boolean deleteByCondition(Class cl , String name,Object value){
boolean flag = false;
Connection conn = BaseConnection.getConnection();
PreparedStatement ps = null;
Field[] fi = cl.getDeclaredFields();
String sql = "delete from "+cl.getSimpleName()+" where "+name+" = ?";
try {
ps = conn.prepareStatement(sql);
ps.setObject(1, value);
int a = ps.executeUpdate();
if(a>0){
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
BaseConnection.closeRec(conn, ps);
}
return flag ;
}
public static void main(String[] args) {
//测试getList()
BaseDao baseDao = new BaseDao();
// ArrayList plist = baseDao.getList(Person.class);
// for(Person p:plist){
// System.out.println("编号:"+p.getId()+" 姓名:"+p.getName()+" 年龄:"+p.getAge());
// }
/*测试效果
编号:1 姓名:小明 年龄:21
编号:2 姓名:小华 年龄:22
编号:3 姓名:李四 年龄:34
*/
//测试getObjectById()
// Person person = (Person) baseDao.getObjectById(Person.class, 1);
// System.out.println("编号:"+person.getId()+" 姓名:"+person.getName());
/*测试效果
编号:1 姓名:小明
*/
//测试getListByCondition()
// ArrayList plist = baseDao.getListByCondition(Person.class,"name","李四");
// for(Person p:plist){
// System.out.println("编号:"+p.getId()+" 姓名:"+p.getName()+" 年龄:"+p.getAge());
// }
/*测试效果
编号:3 姓名:李四 年龄:34
*/
//测试insert()
// Person person = new Person();
// person.setName("王五");
// person.setAge(44);
// person.setType(2);
// boolean flag = baseDao.insert(person);
// if(flag == true){
// System.out.println("插入成功");
// }
/*测试效果
插入成功
*/
//测试update()
// Person person = new Person();
// person.setName("王五五");
// person.setAge(444);
// person.setType(2);
// person.setId(4);
// boolean flag = baseDao.update(person);
// if(flag == true){
// System.out.println("修改成功");
// }
/*测试效果
修改成功
*/
//测试delete()与deleteBySome()
boolean flag = baseDao.deleteByCondition(Person.class, "name","王五五");
if(flag == true){
System.out.println("删除成功");
}
/*测试效果
删除成功
*/
//baseDao.delete(Person.class, 3);
}
}
package com.oman.main;
import java.util.ArrayList;
import com.oman.bean.Person;
import com.oman.bean.Person_type;
import com.oman.dao.PersonDao;
import com.oman.dao.Person_typeDao;
public class TestMain {
public static void main(String[] args) {
PersonDao personDao = new PersonDao();
ArrayList plist = personDao.getList();
for(Person person : plist){
System.out.println(person.getName());
}
System.out.println("------");
Person_typeDao person_typeDao = new Person_typeDao();
ArrayList ptlist = person_typeDao.getList();
for(Person_type person_type : ptlist){
System.out.println(person_type.getName());
}
}
}