本文主要是介绍Java入门基础day45,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
day45
自定义工具类实现crud功能
前言:所有的增删改操作几乎都是一模一样的
给定一个正确的SQL语句
传入正确的参数
最终都能够得到正确的受影响的行数
我们将这种功能进行“抽象”
package com.saas.util; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DaoUtil { private Connection conn = null;private PreparedStatement ptst = null;private ResultSet rs = null; public int commonUpdate(String sql, Object ... params){int result = 0; try {conn = DBUtil.getConn(); ptst = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) {Object param = params[i];ptst.setObject(i + 1, param);} result = ptst.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);} finally {DBUtil.closeAll(rs, ptst, conn);} return result;} } 该commonUpdate()方法中,只要给我传入正确的SQL语句以及正确的SQL语句中的参数,该方法就可以得到正确的受影响的行数值
任何实体的增删改都可以使用该工具方法最终得到正确的受影响的行数
该方法也有局限,后面的参数的个数、类型和顺序要与SQL语句中问号参数的个数、顺序和类型要一致
工具类方法的使用
package com.saas.util; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class DaoUtil<T> { private Connection conn = null;private PreparedStatement ptst = null;private ResultSet rs = null; /*** 可以实现通用的增删改的工具方法* @param sql 可以含有问号的SQL语句* @param params 如果SQL语句中含有问号,则必须要有参数,而且参数的个数、顺序和类型要与SQL语句中问号的参数要一一对应* @return 返回受影响的行数*/public int commonUpdate(String sql, Object ... params){int result = 0; try {conn = DBUtil.getConn(); ptst = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) {Object param = params[i];ptst.setObject(i + 1, param);} result = ptst.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);} finally {DBUtil.closeAll(rs, ptst, conn);} return result;} /*** 可以实现所有的查询功能的工具方法* @param sql 要查询的SQL语句* @param rm RowMapper工具接口,可以将ResultSet转化为泛型T对象* @param params SQL语句中要填充的参数* @return 泛型T对象的集合*/public List<T> commonsQuery(String sql, RowMapper<T> rm, Object ... params){List<T> list = null; conn = DBUtil.getConn(); try {ptst = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) {Object param = params[i];ptst.setObject(i + 1, param);} rs = ptst.executeQuery(); if(rs != null){list = new ArrayList<>(); while (rs.next()){T t = rm.getRow(rs); list.add(t);}}} catch (SQLException e) {throw new RuntimeException(e);} finally {DBUtil.closeAll(rs, ptst, conn);} return list;} }以上代码commonUpdate可以得出新增和修改课程都只需要传入正确的SQL语句和对应的参数就可以很简单地调用自定义工具方法完成对应的操作。
commonsQuery方法可以完成所有的查询功能,第一个参数是SQL语句,第三个参数是SQL语句中的问号参数,这两个参数与commonsUpdate方法的参数一致
但是该方法中还含有一个RowMapper参数,这个是一个工具接口,可以将结果集ResultSet转换成泛型T对象
package com.saas.util; import java.sql.ResultSet; public interface RowMapper<T> { /*** 工具方法,将ResultSet结果集对象转化为泛型T对象* @param rs 结果集对象* @return 泛型T对象*/T getRow(ResultSet rs); }所以DaoUtil工具类可以完成所有的crud功能,但是一定要注意SQL语句中问号与可变长参数的一一对应
package com.saas.dao.impl; import com.saas.entity.Subject; import com.saas.util.RowMapper; import java.sql.ResultSet; import java.sql.SQLException; public class SubjectRowMapper implements RowMapper<Subject> { @Overridepublic Subject getRow(ResultSet rs) {Subject sub = new Subject(); try {sub.setSid(rs.getInt(1));sub.setSubName(rs.getString(2));sub.setSubHour(rs.getInt(3));} catch (SQLException e) {throw new RuntimeException(e);} return sub;} }package com.saas.test; import com.saas.dao.ISubjectDao; import com.saas.dao.impl.Subject02DaoImpl; import com.saas.entity.Subject; import java.util.List; public class SubjectDaoTest { public static void main(String[] args) {ISubjectDao isd = new Subject02DaoImpl(); // Subject sub = new Subject(); // // sub.setSid(7); // sub.setSubName("biology"); // sub.setSubHour(20); //System.out.println(isd.updateSubject(sub)); // // System.out.println(isd.saveSubject(sub));System.out.println("====================="); List<Subject> list = isd.getSubjectsByPage(1, 5); for (Subject s : list) {System.out.println(s);}} }
这篇关于Java入门基础day45的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!