Java web新增的封装工具类方法

在web项目开发中,增删查改这几个方法用的是最多的了,但难免写多了就会想到,每次都是写的差不多的代码,就不能用写一次之后就不用写了吗?所以就有了封装。

其实封装简单来说就是把相同的代码写成一个工具类里面的方法,这样就能减少servlet中或者实现类里面(dao层)的大量代码。

先来看看servlet层的新增代码

public void Insert(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
        //创建BodyCheckComboImpl 实现类的对象,用来调用实现类里面的新增方法
        BodyCheckComboImpl comboImpl = new BodyCheckComboImpl();
        //获取表单提交过来的值,用实po体类对象接收
        //RequestHelper这个工具类在之前的文章有发过
		BodyCheckDetail combo = RequestHelper.getSingleRequest(request, BodyCheckDetail.class);
        //定义一个int来接收新增成功后返回的id
		int flag = comboImpl.inset(combo,"SYS_BodyCheckDetail");
        if(flog > 0){
				System.out.println("新增成功");
		}else{
				System.out.println("新增失败");
		}
}

实现类的新增代码

public class BodyCheckComboImpl {
	/**
	 * 新增
	 * @param obj    po实体类对象
	 * @param table     新增对象的表名
	 * @return
	 */
	public int inset(Object obj,String table){
		int flag;
        //调用工具类的新增方法
		flag = DBUtil.Insert(obj, table);
		return flag;
	}

}

下面是工具类的新增方法,简单说下这个方法思路,通过反射获取到这个类对象,再用这个类对象去获取字段名称,再通过反射获取到po实体类的getter方法,把值拿到,放到字符串中,再把字符串拼接成sql语句

public static int Insert(Object obj,String table) {
		int flag = 0;
		
		try {
            //获取类
			Class<?> class1 = obj.getClass();
            //获取类中声明的所有字段
			Field[] fields = class1.getDeclaredFields();
			//声明两个变量,用来存放字段和值
			String line="";
			String val="";
			for (int i=0; i < fields.length; i++) {
                //获取字段的名字
				String name = fields[i].getName();
				//获取字段类型
				Class<?> type = class1.getDeclaredField(name).getType();
				// ---获取getter方法
				// 首字母大写
				String replace = name.substring(0, ).toUpperCase()+ name.substring(1);
                //通过反射的getMethod方法获取到getter方法
				Method getMethods = class1.getMethod("get" + replace);
					
				String str = "";
				try {
//这里要注意getMethods.invoke(obj).toString()方法,如果获取到的值是空的话就会报错所以要处理一下
					str = getMethods.invoke(obj).toString();
					if(str != null && "".equals(str)){
                        //把字段拼接  table(age,name...)
						line += replace +",";
                        //把值拼接  values(‘1’,’2’...)
						val += "'" + str + "',";
					}
				} catch (NullPointerException e) {
					str = "";
				}
			}
            //把拼接字段的最后一个逗号去掉
			line = line.substring(0, line.length() - 1);
            //把拼接值的最后一个逗号去掉
  			val = val.substring(0, val.length() - 1);
            //拼接SQL语句 INSET INTO TABLE(age,name...) VALUES(‘1’,’小明’...)
			StringBuffer buffer = new StringBuffer();
			buffer.append("INSERT INTO ");
			buffer.append(table);
			buffer.append("(");
			buffer.append(line);
			buffer.append(") VALUES(");
			buffer.append(val);
			buffer.append(")");
            System.out.println(buffer.toString());

			con = DBUtil.getConnection();
            //想要获取到新增之后的id就要在后面加上Statement.RETURN_GENERATED_KEYS
			ps = con.prepareStatement(buffer.toString(),
					Statement.RETURN_GENERATED_KEYS);
			ps.executeUpdate();
			rs = ps.getGeneratedKeys();
            //遍历rs获取到新增后的id
			while (rs.next()) {
				flag = Integer.parseInt(rs.getLong(1) + "");
			}
        System.out.println("新增的id = " + flag);
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return flag;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值