使用easyUI实现后台管理(CRUD)的全过程

前言:避免遗忘,附上所有代码

1、效果图

2、该JaveWeb项目的目录结构

util包下都是对jdbc的一些封装,与本篇博文主旨关系不大,感兴趣可移步:

https://blog.csdn.net/Carl_changxin/article/details/82112563

3、userList.html的代码:

页面中的css和js下载地址:http://www.jeasyui.net/download/

页面中的难点解释:

(1)url="getUserList"  method="post" :    这里表示向后台发出servlet请求,要求返回json数据

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
	<title>Insert title here</title>
	<link rel="stylesheet" type="text/css" href="css/themes/default/easyui.css">
	<link rel="stylesheet" type="text/css" href="css/themes/icon.css">
	<link rel="stylesheet" type="text/css" href="css/demo.css">
	<script type="text/javascript" src="js/jquery.min.js"></script>
	<script type="text/javascript" src="js/jquery.easyui.min.js"></script>
</head>
<body>
		<!--url的作用是提交一个请求,要求返回json数据,rows参数一定要有,在getUserList的servlet中有对此说明  -->
       <table id="dg" title="My Users" class="easyui-datagrid" style="width:650px;height:250px"
				url="getUserList"
				method="post"
				toolbar="#toolbar"
				rownumbers="true" fitColumns="true" singleSelect="true">
			<thead>
				<tr>
					<!-- 将id列隐藏起来;更新或删除某条数据都需要用到id -->
					<th field="id" hidden='true'></th>
					<th field="firstname" width="50">First Name</th>
					<th field="lastname" width="50">Last Name</th>
					<th field="phone" width="50">Phone</th>
					<th field="email" width="50">Email</th>
				</tr>
			</thead>
		</table>
		
		<!-- 下面是我们页面上的三个编辑按钮,我们要将3个方法实现出来 -->
		<div id="toolbar">
			<a href="#" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newUser()">New User</a>
			<a href="#" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editUser()">Edit User</a>
			<a href="#" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="destroyUser()">Remove User</a>
		</div>
		
		<!-- 这是一个对话框,默认是关闭的;我们要做的就是在点击New User或Edit USer时,将属性closed="false" 这需要js来完成-->
		<div id="dlg" class="easyui-dialog" style="width:400px;height:280px;padding:10px 20px"
				closed="true" buttons="#dlg-buttons">
				
			<div class="ftitle">User Information</div>
			<form id="fm">
				<div class="fitem">
					<input name="id" class="easyui-validatebox" hidden="true">
				</div>
				<div class="fitem">
					<label>First Name:</label>
					<input name="firstname" class="easyui-validatebox" required="true">
				</div>
				<div class="fitem">
					<label>Last Name:</label>
					<input name="lastname" class="easyui-validatebox" required="true">
				</div>
				<div class="fitem">
					<label>Phone:</label>
					<input name="phone">
				</div>
				<div class="fitem">
					<label>Email:</label>
					<input name="email" class="easyui-validatebox" validType="email">
				</div>
			</form>
		</div>
		<!-- 下面的保存和取消按钮,已经和上面的对话框绑定了 ;记得实现saceUser()方法-->
		<div id="dlg-buttons">
			<a href="#" class="easyui-linkbutton" iconCls="icon-ok" onclick="saveUser()">Save</a>
			<a href="#" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')">Cancel</a>
		</div>
</body>
</html>

页面的js代码

SaveUser方法的解释:

(1)点击New User选择某条记录后点击Edit User 都会弹出对话框id=dlg

(2)对话框中有Save按钮,在点击Save之前要判断当前是新增还是更新,再做相应的后台处理

<script type="text/javascript">
	/* 点击New User会打开对话框,清空form表单内容 */
	function newUser(){
		$('#dlg').dialog('open').dialog('setTitle','New User');
		$('#fm').form('clear');
	}
	
	/* 编辑/更新数据 */
	function editUser(){
		/* 数据网格(datagrid)组件包含两种方法来检索选中行数据:
		getSelected:取得第一个选中行数据,如果没有选中行,则返回 null,否则返回记录。
		getSelections:取得所有选中行数据,返回元素记录的数组数据。 */
		var row = $('#dg').datagrid('getSelected');
		if (row){
			$('#dlg').dialog('open').dialog('setTitle','Edit User');
			//将对话框中的文本框用当前选中行数据填满,待修改
			$('#fm').form('load',row);
		}else{
			alert("请先选择一条数据");
		}
	}
	
	/* 保存一条新数据,先获取各个输入框中的值,再通过ajax传输到后台进行保存 */
	function saveUser(){
		var id = $("[name='id']").val();
		var firstname = $("[name='firstname']").val();
		var lastname = $("[name='lastname']").val();
		var phone = $("[name='phone']").val();
		var email = $("[name='email']").val();
		/* 要判断这里是添加新数据还是更新数据,因为执行的sql语句不同,所以要求后台不一样 */
        //获取对话框的title属性,根据这个来判断
		var title = $('#dlg').panel('options').title
		if(title=='New User'){
			
			$.ajax({
				url:"saveUser",
				type:"post",
			   data:{firstname:firstname,lastname:lastname,phone:phone,email:email},
				dataType:"json",
				success:function(result){
					if(result.code ==200){
						//alert("保存成功")
						//保存成功,就刷新列表数据;两种方法
						/* window.location.href = "userList.html"; */
						
							$('#dlg').dialog('close');
						$('#dg').datagrid('reload');
					}else{
						$.messager.show({
							title: 'Error',
							msg: result.errorMsg
						});
					}
				}
			})
			
		}else{

			$.ajax({
				url:"updateUser",
				type:"post",
			   data:{id:id,firstname:firstname,lastname:lastname,phone:phone,email:email},
				dataType:"json",
				success:function(result){
					if(result.code ==200){
						//alert("保存成功")
						//保存成功,就刷新列表数据;两种方法
						/*window.location.href = "userList.html"; */
						
						$('#dlg').dialog('close');
						$('#dg').datagrid('reload');
					}else{
						$.messager.show({
							title: 'Error',
							msg: result.errorMsg
						});
					}
				}
			})
			
		}
		
	}

	function destroyUser(){
		var row = $('#dg').datagrid('getSelected');
		if (row){
			$.messager.confirm('Confirm','Are you sure you want to destroy this user?',function(r){
				if (r){
					//下面是ajax的简化写法
					/* $.post()格式    $.post(url,data,success(data, textStatus, jqXHR),dataType) */ 
					//可查看:https://blog.csdn.net/vsiryxm/article/details/46391765
					$.post('deleteUser',{id:row.id},function(result){
						if (result.code==200){
							$('#dg').datagrid('reload');	// reload the user data
						} else {
							$.messager.show({	// show error message
								title: 'Error',
								msg: result.errorMsg
							});
						}
					},'json');
				}
			});
		}else{
			alert("请先选择一条数据");
		}
	}
</script>

4、servlet包下的所有类

注意:我都是用注解的方式配置本应在web.xml中配置的servlet-mapping

GetUserListServlet.java:

package servlet;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSONObject;

import entity.User;

@WebServlet(name = "getUserListServlet", urlPatterns = { "/getUserList" })
public class GetUserListServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		User user = new User();
        //在这个findUser方法中rows是key(必须是rows,才能被easyui识别),查出来的user数据是一个list作为值
		Map<String,Object> map = user.findUser();
		response.setCharacterEncoding("utf-8");
		response.getWriter().print(JSONObject.toJSON(map));
	
	}

}

SaveUserServlet.java:

package servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSONObject;

import entity.User;
import util.GetParams;

/**
 * Servlet implementation class AddBlogServlet
 */
@WebServlet(name = "saveUserServlet", urlPatterns = { "/saveUser" })
public class SaveUserServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获得参数,构造对象,接收参数,保存对象到数据库
		Map<String,String[]> params = request.getParameterMap();
				
		@SuppressWarnings("unchecked")
		User user = (User) GetParams.getInstance().formatBean(params, User.class);
		int res = user.save();
		Map<String,Object> map = new HashMap<String,Object>();
		//save方法的返回值是int,成功则设置个标志code=200
		if(res == 1) {
			map.put("code", 200);
		}else{
			map.put("code", 500);
		}
		response.getWriter().print(JSONObject.toJSON(map));
	}
}

UpdateUserServlet.java:

package servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSONObject;

import entity.User;
import util.GetParams;

/**
 * Servlet implementation class UpdateBlogServlet
 */
@WebServlet(name = "updateUserServlet", urlPatterns = { "/updateUser" })
public class UpdateUserServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获得参数,构造对象,接收参数,保存对象到数据库
		Map<String,String[]> params = request.getParameterMap();
		User user = (User) GetParams.getInstance().formatBean(params, User.class);
		int res = user.alertById();
		Map<String,Object> map = new HashMap<String,Object>();
		if(res == 1) {
			map.put("code", 200);
		}else{
			map.put("code", 500);
		}
		response.getWriter().print(JSONObject.toJSON(map));
	}

	
}

DeleteUserServlet.java:

package servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSONObject;

import entity.User;

@WebServlet(name = "deleteUserServlet", urlPatterns = { "/deleteUser" })
public class DeleteUserServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");
		User user = new User();
		user.setId(Integer.valueOf(id));
		int res = user.remove();
		Map<String,Object> map = new HashMap<String,Object>();
		if(res == 1) {
			map.put("code", 200);
		}else{
			map.put("code", 500);
		}
		response.getWriter().print(JSONObject.toJSON(map));
	}

}

5、entity包

User.java

package entity;

import util.BaseDao;

public class User extends BaseDao<User>{
	
	public User() {
		super("t_user");
	}
	private Integer id;
	private String firstname;
	private String lastname;
	private String phone;
	private String email;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getFirstname() {
		return firstname;
	}
	public void setFirstname(String firstname) {
		this.firstname = firstname;
	}
	public String getLastname() {
		return lastname;
	}
	public void setLastname(String lastname) {
		this.lastname = lastname;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	
}

数据库:

6、util包

BaseDao.java

package util;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *1、实体类去继承该类,该类会提供增删改查的方法,让实体对象去调用
 *2、 实体类对应数据库中的一张表,一个实体对象对应表中的一条数据
 *3、该类中提供的增删改查方法,只是拼接了sql语句,再交给JDBC去做
 *4、sql语句的可变部分可以看做是对象的属性和属性值,因此可以通过反射去获取实体对象的属性和属性值,拼接sql语句
 * @param <T>
 */
public class BaseDao<T> {
	private JDBC jdbc = JDBC.getInstance();
	
	@SuppressWarnings("rawtypes")
	private Class cls = this.getClass();
	private String tableName;
	
	public BaseDao(String tableName){
		this.tableName = tableName;
	}
	/**
	 * 保存对象到数据库
	 * insert into 表名(列名/属性名...) value (属性值);
	 * @return 影响的行数
	 */
	public int save(){
		/**拼接插入语句*/
		StringBuffer insertSql = new StringBuffer("insert into "+tableName+" (");
		StringBuffer fieldsSql = new StringBuffer();
		StringBuffer fieldsValSql = new StringBuffer();
		Field[] fields = cls.getDeclaredFields();
		try {
			for(Field f : fields){
				f.setAccessible(true);
				//当属性名不是id并且属性值不为空时,把该属性当作插入条件之一
				if(!"id".equals(f.getName()) && f.get(this) != null ){
						fieldsSql.append("`"+f.getName()+"`"+",");
						fieldsValSql.append("'"+f.get(this)+"'"+",");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		if(fieldsSql.length()!=0) {
			fieldsSql.replace(fieldsSql.length()-1, fieldsSql.length(), "");
			fieldsValSql.replace(fieldsValSql.length()-1, fieldsValSql.length(), "");
		}
		insertSql.append(fieldsSql+") value ("+fieldsValSql+");");
		System.out.println(insertSql);
		return jdbc.insert(insertSql.toString());
		
	}
	
	/**
	 * 根据当前对象的属性进行删除,以不为空的属性作为删除的过滤添加
	 * delete from tableName where 属性1名=属性1值 and 属性2名=属性2值 ...
	 * @return 影响的行数
	 */
	public int remove(){
		StringBuffer deleteSql = new StringBuffer();
		StringBuffer attrVal = new StringBuffer();
		/**获得类中所有的属性*/
		Field[] fields = cls.getDeclaredFields();
		for(Field f : fields){
			f.setAccessible(true);
			try {
				if(f.get(this) != null){
					attrVal.append("`"+f.getName()+"`='"+f.get(this)+"' and ");
				}
			} catch (IllegalArgumentException | IllegalAccessException e) {
				e.printStackTrace();
			}
		}
		attrVal.replace(attrVal.length()-4, attrVal.length(), "");
		deleteSql.append("delete from `"+tableName+"` where "+attrVal+";");
		System.out.println(deleteSql);
		return jdbc.delete(deleteSql.toString());
	}
	
	/**
	 * 修改对象对应数据库中的列
	 * //update t_user set name='',age='' where id=''
	 * @return 影响的行数
	 */
	public int alertById(){
		StringBuffer updateSql = new StringBuffer();
		StringBuffer attrVal = new StringBuffer();
		Integer idVal = null;
		/**获得类中所有的属性*/
		Field[] fields = cls.getDeclaredFields();
		for(Field f : fields){
			f.setAccessible(true);
			try {
				if(!"id".equals(f.getName())){
					if(f.get(this) != null){
						attrVal.append("`"+f.getName()+"`='"+f.get(this)+"',");
					}
					
				}else{
					if(f.get(this) == null){
						System.out.println("id没有值");
					}else{
						idVal = (Integer) f.get(this);
					}
				}
				
			} catch (IllegalArgumentException | IllegalAccessException e) {
				e.printStackTrace();
			}
		}
		attrVal.replace(attrVal.length()-1, attrVal.length(), "");
		updateSql.append("update `"+tableName+"` set "+attrVal+" where "+"`id`='"+idVal+"';");
		System.out.println(updateSql);
		return jdbc.update(updateSql.toString());
	}
	
	/**
	 * 查找符合条件的数据
	 * select * from tableName where ...
	 * @return 查找到的结果,转化成对象
	 */
	public List<T> find(){
		
		StringBuffer querySql = new StringBuffer("select * from "+tableName);
		StringBuffer attrVal = new StringBuffer();
		Field[] fields = cls.getDeclaredFields();
		for(Field f : fields){
			f.setAccessible(true);
			try {
				if(f.get(this) !=null){
					attrVal.append("`"+f.getName()+"`='"+f.get(this)+"' and ");
				}
			} catch (IllegalArgumentException | IllegalAccessException e) {
				e.printStackTrace();
			}
		}
		if(attrVal.length() != 0){
			attrVal.replace(attrVal.length()-4, attrVal.length(), "");
			querySql.append(" where "+attrVal+";");
		}else{
			querySql.append(";");
		}
		System.out.println(querySql);
		
		//查询出来的结果开始是结果集,然后转化成List<Map<String,Object>>集合,再转化成对象
		List<Map<String,Object>> lists = jdbc.query(querySql.toString());
//		System.out.println(lists.size());
		//遍历lists集合
		try {
			List<T> list = new ArrayList<T>();//用来存放对象
			for(Map<String,Object> m : lists){
				
				@SuppressWarnings("unchecked")
				T t = (T)cls.newInstance();
				//遍历Map集合,一个Map集合对应一个对象
				for( Map.Entry<String,Object> entry: m.entrySet() ){
					//根据列名称,获取当前对象的对应该列的属性
					Field f = cls.getDeclaredField(entry.getKey());
					//设置对象的属性值
					f.setAccessible(true);
					f.set(t, entry.getValue());
				}
				list.add(t);
			}
			return list;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 封装分页
	 * @param page
	 * @param rows
	 * @return
	 */
	public Map<String,Object> find(Integer page,Integer rows){
		//一个map集合用来存放查询出来的一条数据,按照<列名,列值>保存
		Map<String,Object> map = new HashMap<String,Object>();
		//T设置成Map<String,Object>就可以存放多条查询出来的数据
		List<T> list = new ArrayList<T>();
		//获得对象所有的属性(包括私有属性)
		Field[] fields = cls.getDeclaredFields();
		StringBuffer selectSqlBuf = new StringBuffer("select * from "+tableName+" where 1=1");
		try {
			for(Field f : fields) {
				String proName = f.getName();//age
				f.setAccessible(true);
				Object value = f.get(this);//获得当前属性的值
					if(value!=null) {
						selectSqlBuf.append(" and "+proName+"='"+value+"'");
					}
			}
		} catch (IllegalArgumentException | IllegalAccessException e) {
			e.printStackTrace();
		}
		selectSqlBuf.append(" limit "+(page-1)*rows+","+rows+";");
		System.out.println(selectSqlBuf);
		List<Map<String,Object>> mapList = jdbc.query(selectSqlBuf.toString());
		try {
			for(Map<String,Object> m :mapList) {
				//一个对象对应数据库中的一条数据,m对应当前的一条数据,即也对应一个对象
				//通过反射实例化一个对象,去封装循环出来的每一条数据
				T t = (T) cls.newInstance();
				for (Map.Entry<String, Object> entry : m.entrySet()) {
				   String key = entry.getKey().toString();
				   Object value = entry.getValue();
				   Field f = cls.getDeclaredField(key);//根据属性名称,获取当前对象的属性
				   f.setAccessible(true);
				   f.set(t, value);
				 }
				list.add(t);
			}
		} catch (InstantiationException | IllegalAccessException | NoSuchFieldException | SecurityException
				| IllegalArgumentException e) {
			e.printStackTrace();
		}
		//计算总共有多少页
		Long total = Long.valueOf(jdbc.query("select count(1) as total  from "+tableName).get(0).get("total")+"");
		Long pages = (total+rows-1)/rows;
		map.put("data", list);
		map.put("page",page);
		map.put("rows",rows);
		map.put("pages", pages);
		//map中保存了当前页面要显示的数据list,页码page,条数rows,总页数pages
		return map;
	}
	
	public Map<String,Object> findUser(){
		//一个map集合用来存放查询出来的一条数据,按照<列名,列值>保存
		Map<String,Object> map = new HashMap<String,Object>();
		//T设置成Map<String,Object>就可以存放多条查询出来的数据
		List<T> list = new ArrayList<T>();
		//获得对象所有的属性(包括私有属性)
		Field[] fields = cls.getDeclaredFields();
		StringBuffer selectSqlBuf = new StringBuffer("select * from "+tableName+" where 1=1");
		try {
			for(Field f : fields) {
				String proName = f.getName();//age
				f.setAccessible(true);
				Object value = f.get(this);//获得当前属性的值
					if(value!=null) {
						selectSqlBuf.append(" and "+proName+"='"+value+"'");
					}
			}
		} catch (IllegalArgumentException | IllegalAccessException e) {
			e.printStackTrace();
		}
		System.out.println(selectSqlBuf);
		List<Map<String,Object>> mapList = jdbc.query(selectSqlBuf.toString());
		try {
			for(Map<String,Object> m :mapList) {
				//一个对象对应数据库中的一条数据,m对应当前的一条数据,即也对应一个对象
				//通过反射实例化一个对象,去封装循环出来的每一条数据
				T t = (T) cls.newInstance();
				for (Map.Entry<String, Object> entry : m.entrySet()) {
				   String key = entry.getKey().toString();
				   Object value = entry.getValue();
				   Field f = cls.getDeclaredField(key);//根据属性名称,获取当前对象的属性
				   f.setAccessible(true);
				   f.set(t, value);
				 }
				list.add(t);
			}
		} catch (InstantiationException | IllegalAccessException | NoSuchFieldException | SecurityException
				| IllegalArgumentException e) {
			e.printStackTrace();
		}
		map.put("rows", list);
		return map;
	}
}

JDBC.java

package util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

/**
 * 1、和数据库建立连接
 * 2、处理DB_Dao传送过来的sql语句,包括增删改查
 */
public class JDBC {
	//饿汉模式
	private static JDBC jdbc = new JDBC();
	private String driver;
	private String url;
	private String name;
	private String password;
	private Connection conn;
	
	public static void main(String[] args) {
		JDBC jdbc = new JDBC();
	}
	/**
	 * 单例模式,私有化构造方法
	 */
	private JDBC(){
		readProperties();
	}
	
	//获得JDBC对象的公开方法
	public static JDBC getInstance(){
		return jdbc;
	}
	
	//读取配置文件
	private void readProperties(){
		try {
			Properties p = new Properties();
			InputStream is = JDBC.class.getResourceAsStream("mysql.properties");
			p.load(is);
			is.close();
			driver = p.getProperty("driver");
			url = p.getProperty("url");
			name = p.getProperty("name");
			password = p.getProperty("password");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//连接数据库
	private Connection conn(){
		try {
			Class.forName(driver);
			return DriverManager.getConnection(url,name,password);
			
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 增删改操作
	 * @return 返回受影响的行数
	 */
	private int DML(String sql,Object...paras){
		PreparedStatement ps = null;
		try {
			conn = conn();
			ps = conn.prepareStatement(sql);
			/**
			 * 设置参数
			 */
			int i=1;
			for(Object o : paras){
				ps.setObject(i++, o);
			}
			
			return ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(ps != null){
				try {
					ps.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		
		return 0;
	}
	
	
	public int insert(String sql,Object...paras){
		
		return DML(sql,paras);
	}
	
	public int update(String sql,Object...paras){
		
		return DML(sql,paras);
	}
	
	public int delete(String sql,Object...paras){
		
		return DML(sql,paras);
	}
	
	private List<Map<String,Object>> DQL(String sql,Object...paras){
		List<Map<String,Object>> lists = new ArrayList<Map<String,Object>>();
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			conn = conn();
			ps = conn.prepareStatement(sql);
			
			int i = 1;
			for(Object o : paras){
				ps.setObject(i++, o);
			}
			rs = ps.executeQuery();
			//对结果集进行操作
			ResultSetMetaData rsmd = rs.getMetaData();
			int columnCount = rsmd.getColumnCount();
			while(rs.next()){
				Map<String,Object> map = new HashMap<String,Object>();
				for(int j=1;j<=columnCount;j++){
					map.put(rsmd.getColumnName(j), rs.getObject(j));
				}
				lists.add(map);
			}
			return lists;
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null){
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(ps != null){
				try {
					ps.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		
		return null;
	}
	
	public List<Map<String,Object>> query(String sql,Object...paras){
		return DQL(sql,paras);
	}
	
	
}

GetParams.java:

package util;

import java.lang.reflect.Field;
import java.util.Iterator;
import java.util.Map;


public class GetParams<T> {
	
	private static GetParams param = new GetParams();
	/**
	 * 私有化构造方法,实现单例模式
	 */
	private GetParams(){
		
	};
	
	public static GetParams getInstance() {
		
		return param;
	}
	
	
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public  T formatBean(Map<String,String[]> params,Class  cls){
		try {
			//通过反射将传过来的值,赋值给对象的属性
			Iterator iterator = params.keySet().iterator();
			T t = (T) cls.newInstance();
			while(iterator.hasNext()){
				String key = iterator.next().toString();
				Field field;
				try {
					field = cls.getDeclaredField(key);
					String[] values = params.get(key);//取得当前参数的值
					if(values!=null&&values.length!=0){
						field.setAccessible(true);
						String type = field.getType().getName();//取得当前的key所对应属性的类型
						if("java.lang.String".equals(type)){
							field.set(t, values[0]);
						}else if("java.lang.Integer".equals(type)){
							field.set(t, Integer.valueOf(values[0]));
						}
					}
				} catch (Exception e) {
					System.out.println(key+"这个属性在对象里没有");
				}
			}
			return t;
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return null;
	}
}

mysql.properties:

driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/easyui
name=root
password=1

猜你喜欢

转载自blog.csdn.net/Carl_changxin/article/details/82142181