万能的CURD
程序员文章站
2022-06-11 11:14:15
...
今天介绍以下万能的CURD,这个东西要省去好多好多代码
所谓CURD无非就是一些增删改查了,但是,此CURD非彼CURD,它省去了好多代码,效率上也是提升了不少啊。
/**
* 使用万能的CURD:进行修改
* 修改后的返回值是影响的有效行数
* @param sql:当前的数据库语句
* @param args:可变数组类型
*/
public static int curd(String sql,Object...args) {
Connection conn=null;
PreparedStatement st=null;
int result=0;
conn=JdbcUtil.conn();
try {
//当前sql语句
st=conn.prepareStatement(sql);
for(int i=0;i<args.length;i++) {
st.setObject(i+1, args[i]);
}
result = st.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtil.close(conn, st);
}
return result;
}
在JdbcUtil中写下以上这段代码,他表示一个万能的修改(插入,删除,修改),使用sql语句和可变数组类型作为形式参数,并且使用可变数组中的值代替占位符,使用一个循环搞定。然后接下述代码:
public boolean reg(UserStudent stu) {
int curd = JdbcUtil.curd("insert into student(sname,num,password,sex,createtime) values(?,?,?,?,?)",stu.getName(),stu.getNum(),stu.getPassword(),stu.getSex(),new Date());
if(curd>0) {
return true;
}
return false;
}
这就是数据持久层中的代码,使用它和数据库交互,可见这段代码比之前的curd要简单多了,而且之前的curd删除归删除,修改归修改,代码极为繁琐。
-
对于查询而言:一般分为两种情况
1.查询出单条记录。
2.查询出多条记录。
对比以下两段代码,是不是后一段比较爽啊
public boolean updatErrorData(int id) {
Connection conn=null;
PreparedStatement st = null;
conn=JdbcUtil.conn();
try {
st=conn.prepareStatement("update student set num=num+1,errortime=? where sno=?");
st.setString(1, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
st.setInt(2, id);
int update = st.executeUpdate();
if(update>0) {
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtil.close(conn, st);
}
return false;
}
public boolean updatErrorData(int id) {
int curd = JdbcUtil.curd("update student set num=num+1,errortime=? where sno=?", new Date(),id);
if(curd>0) {
return true;
}
return false;
}
以下是万能查询的代码:
/**
* 万能查询:
* 1.使用反射技术获得实体类的对象字段
* 2.使用list集合装载数据
* @param <T>
* @param clazz
* @param sql
* @param args
* @return
*/
public static <T> List<T> getResult(Class<T> clazz,String sql,Object...args){
Connection conn=null;
PreparedStatement st=null;
ResultSet rs = null;
T entity=null;
List<T> list = new ArrayList<T>();
try {
st=conn.prepareStatement(sql);
for(int i=0;i<args.length;i++) {
st.setObject(i+1, args[i]);
}
rs=st.executeQuery();
//获取数据库的数据源
ResultSetMetaData dataSource=rs.getMetaData();
while(rs.next()) {
entity=clazz.newInstance();
for(int i=0;i<dataSource.getColumnCount();i++) {
String columnName = dataSource.getColumnName(i+1);
Object objectColumnValues = rs.getObject(columnName);
Field field = clazz.getDeclaredField(columnName);//获得一个私有字段
field.setAccessible(true);
field.set(entity, objectColumnValues);//给当前字段赋值
}
list.add(entity);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtil.close(conn, st, rs);
}
return list;
}
上一篇: 啊哈算法——万能的搜索——解救小哈DFS
下一篇: 基于CAS协议的单点登录(SSO)