今天试了一下用spring的jdbcTemplate来增删改查的功能,感觉还是挺麻烦的,于是就扩展了一下,代码比较凌乱,见谅。 原来的UserDao:
@Resource private JdbcTemplate jdbcTemplate; @Override public void save(User t) { if(t == null) return ; this.jdbcTemplate.update("insert into t_user(id, username, password) values(?,?,?)", t.getId(), t.getUn(), t.getPassword()); } @Override public void update(User t) { if(t == null) return ; this.jdbcTemplate.update("update t_user set username=?, password=? where id=?", t.getUn(), t.getPassword(), t.getId()); } @Override public void delete(User t) { this.jdbcTemplate.update("delete from t_user where id=?", t.getId()); } @Override public List<User> getByProperty(Map<String, ? extends Object> map) { Object[] objs = gengerateWhereSql(map); String wheres = (String) objs[0]; String sql = null; if(wheres.length() > 0) { sql = "select * from t_user where " + wheres.substring(4); } else { sql = "select * from t_user"; } return this.jdbcTemplate.query(sql, (Object[]) objs[1], this); } @Override public void deleteByProperty(Map<String, ? extends Object> map) { if(map == null || map.size() == 0) throw new RuntimeException("不可以直接删除所有数据"); Object[] objs = gengerateWhereSql(map); String wheres = (String) objs[0]; String sql = null; if(wheres.length() > 0) { sql = "delete from t_user where " + wheres.substring(4); } else { sql = "select from t_user"; } this.jdbcTemplate.update(sql, (Object[]) objs[1]); } private Object[] gengerateWhereSql(Map<String, ? extends Object> map) { StringBuilder sb = new StringBuilder(); Object[] params = null; if(map != null) { params = new Object[map.size()]; int i = 0; for(Map.Entry<String, ? extends Object> entry : map.entrySet()) { params[i] = entry.getValue(); sb.append("and ").append(entry.getKey()).append("=?"); } } else { params = new Object[0]; } String wheres = sb.toString(); return new Object[] {wheres, params}; } @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { User u = new User(); u.setId(rs.getLong(1)); u.setUn(rs.getString(2)); u.setPassword(rs.getString(3)); return u; }修改后:
@Repository public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao/*, RowMapper<User>*/ { public UserDaoImpl() { super(User.class); } }BaseDaoImpl
package com.xxx.spring.jdbc.dao.impl; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.springframework.jdbc.core.JdbcTemplate; import com.xxx.spring.jdbc.dao.IBaseDao; import com.xxx.spring.jdbc.jdbc.ClassPersistAllInfo; import com.xxx.spring.jdbc.jdbc.ParseSql2Entity; import com.xxx.spring.jdbc.jdbc.PersistClassInfo; import com.xxx.spring.jdbc.jdbc.Sql2Entity; import com.xxx.spring.jdbc.jdbc.SqlParams; import com.xxx.spring.jdbc.util.MyBeanUtil; public class BaseDaoImpl<T> implements IBaseDao<T> { private Class<?> clz; @Resource private JdbcTemplate jdbcTemplate; private ClassPersistAllInfo entityObjectsByClass; private Sql2Entity sql2Entity; public BaseDaoImpl(Class<?> clz) { this.clz = clz; this.entityObjectsByClass = PersistClassInfo.getEntityObjectsByClass(clz); this.sql2Entity = Sql2Entity.getSql2EntityByClass(clz); } @Override public void save(T t) { if(t != null) { this.jdbcTemplate.update(sql2Entity.getAddSql(), SqlParams.getAddSqlParams(entityObjectsByClass, t)); } } @Override public void update(T t) { if(t != null) { this.jdbcTemplate.update(sql2Entity.getUpdateSql(), SqlParams.getUpdateSqlParams(entityObjectsByClass, t)); } } @Override public void delete(T t) { this.jdbcTemplate.update(sql2Entity.getDeleteSql(), SqlParams.getDeleteOrSelectSqlParam(entityObjectsByClass, t)); } private Object[] gengerateWhereSql(Map<String, ? extends Object> map) { StringBuilder sb = new StringBuilder(); Object[] params = null; if(map != null) { params = new Object[map.size()]; int i = 0; for(Map.Entry<String, ? extends Object> entry : map.entrySet()) { params[i] = entry.getValue(); sb.append("and ").append(entry.getKey()).append("=?"); } } else { params = new Object[0]; } String wheres = sb.toString(); return new Object[] {wheres, params}; } @Override public void deleteByProperty(Map<String, ? extends Object> map) { if(map == null || map.size() == 0) throw new RuntimeException("不可以直接删除所有数据"); Object[] objs = gengerateWhereSql(map); String wheres = (String) objs[0]; String sql = null; if(wheres.length() > 0) { sql = "delete from " + this.sql2Entity.getTableName() + " where " + wheres.substring(4); } else { sql = "select from " + this.sql2Entity.getTableName(); } this.jdbcTemplate.update(sql, (Object[]) objs[1]); } @Override public List<T> getByProperty(Map<String, ? extends Object> map) { Object[] objs = gengerateWhereSql(map); String wheres = (String) objs[0]; String sql = null; if(wheres.length() > 0) { sql = "select " + this.sql2Entity.getBaseColumnSqlWithId() + " from " + this.sql2Entity.getTableName() + " where " + wheres.substring(4); } else { sql = "select " + this.sql2Entity.getBaseColumnSqlWithId() + " from " + this.sql2Entity.getTableName(); } List<Map<String, Object>> lists = this.jdbcTemplate.query(sql, (Object[]) objs[1], ParseSql2Entity.getParseSql2Entity(clz)); return (List<T>) MyBeanUtil.copyFromMapList(lists, clz); } }http://download.csdn.net/detail/fengshunui/9777056,轻打脸