发现很多人泛型不会使用。今天写了一个案例。简单封装一下JDBC。
希望对初学者有点帮助,大牛不喜勿喷。
这里用到了方法泛型,类泛型
映射行接口MRowMapper
如有疑问可以加寇:283261828
转载请标明
1.查询任意表,任意参数,返回集合
//查询任意表,任意参数,返回集合
public List
2.查询任意表,返回集合对象
public List queryForList(MRowMapper mapper, String sql, Object... params) {
List results = new ArrayList();
Connection conn = null;
PreparedStatement stm = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection();
stm = conn.prepareStatement(sql);
// 设置参数
setParameters(stm, params);
// 通过SQL语句操作对象发送
// executeQuery:执行数据的查询操作(select)
rs = stm.executeQuery();
//记录当前结果集循环的行号
int rownum = 0;
// 循环获取结果
while (rs.next()) {
rownum++;
results.add(mapper.mappingRow(rs, rownum));
}
return results;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// 关闭资源
DBUtil.close(rs, stm, conn);
}
}
public interface MRowMapper {
/**
* 每一行数据要映射的对象
*
* @param rs
* 结果集对象
* @param rownum
* 当前结果集映射的行号
* @return
*/
public T mappingRow(ResultSet rs, int rownum) throws SQLException;
}
3.任意参数 查询任意表,返回单个对象
public E queryForObject(MRowMapper mapper, String sql, Object... params) {
Connection conn = null;
PreparedStatement stm = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection();
stm = conn.prepareStatement(sql);
// 设置参数
setParameters(stm, params);
// 通过SQL语句操作对象发送
// executeQuery:执行数据的查询操作(select)
rs = stm.executeQuery();
//记录当前结果集循环的行号
int rownum = 0;
// 循环获取结果
if (rs.next()) {
rownum++;
return mapper.mappingRow(rs, rownum);
}
return null;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// 关闭资源
DBUtil.close(rs, stm, conn);
}
}
4.任意参数 更新任意表
public int executeUpdate(String sql, Object... params) {
Connection conn = null;
PreparedStatement stm = null;
try {
conn = DBUtil.getConnection();
// 创建一个SQL语句操作对象
stm = conn.prepareStatement(sql);
setParameters(stm, params);
// executeUpdate:执行数据的更新操作(insert|update|delete)
// 返回执行这个sql语句受影响的行数
return stm.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// 关闭资源
DBUtil.close(null, stm, conn);
}
}
5.setParameters()
private void setParameters(PreparedStatement stm, Object... params)
throws SQLException {
if (params != null) {
for (int i = 0; i < params.length; i++) {
stm.setObject(i + 1, params[i]);
}
}
}
6.简单在main方法中测试的代码
String sql = "select * from emp where deptno = ?";
List emps = mj.queryForList(new MRowMapper() {
@Override
public Emp mappingRow(ResultSet rs, int rownum) throws SQLException {
Emp e = new Emp();
e.setComm(rs.getFloat("comm"));
e.setDeptno(rs.getInt("deptno"));
e.setEmpno(rs.getInt("empno"));
e.setEname(rs.getString("ename"));
e.setHiredate(rs.getDate("hiredate"));
e.setJob(rs.getString("job"));
e.setMgr(rs.getInt("mgr"));
e.setSal(rs.getFloat("sal"));
return e;
}
}, sql, 20);