日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring-JDBC通用Dao

發(fā)布時間:2023/12/18 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring-JDBC通用Dao 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

JdbcBaseDao

JdbcBaseDao接口,內(nèi)容如下:

package com.sun4j.core.jdbc.dao;import java.io.Serializable; import java.util.List; import java.util.Map;import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.support.rowset.SqlRowSet; public interface JdbcBaseDao<T> { void save(T entity); void update(T entity); void delete(T entity); void delete(Serializable id); void deleteAll(); T findById(Serializable id); List<T> findAll(); void batchDelete(Serializable[] ids); void batchUpdate(List<T> list); void batchSave(List<T> list); Map<String, Object> findOne(String sql, Object... args); List<Map<String, Object>> findListMap(String sql, Object... args); void execSQL(String sql); SqlRowSet rowSet(String sql, Object... args); JdbcTemplate getJdbcTemplate(); }

?

JdbcBaseDaoImpl 實現(xiàn)

JdbcBaseDao接口,內(nèi)容如下:

package com.sun4j.core.jdbc.dao.impl;import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.sql.Types; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.util.Assert; import com.sun4j.core.jdbc.dao.JdbcBaseDao; public class JdbcBaseDaoImpl<T> implements JdbcBaseDao<T> { public static final String SQL_INSERT = "insert"; public static final String SQL_UPDATE = "update"; public static final String SQL_DELETE = "delete"; @Autowired private JdbcTemplate jdbcTemplate; private Class<T> entityClass; @SuppressWarnings("unchecked") public JdbcBaseDaoImpl() { ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass(); entityClass = (Class<T>) type.getActualTypeArguments()[0]; System.out.println("Dao實現(xiàn)類是:" + entityClass.getName()); } @Override public void save(T entity) { String sql = this.makeSql(SQL_INSERT); Object[] args = this.setArgs(entity, SQL_INSERT); int[] argTypes = this.setArgTypes(entity, SQL_INSERT); jdbcTemplate.update(sql.toString(), args, argTypes); } @Override public void update(T entity) { String sql = this.makeSql(SQL_UPDATE); Object[] args = this.setArgs(entity, SQL_UPDATE); int[] argTypes = this.setArgTypes(entity, SQL_UPDATE); jdbcTemplate.update(sql, args, argTypes); } @Override public void delete(T entity) { String sql = this.makeSql(SQL_DELETE); Object[] args = this.setArgs(entity, SQL_DELETE); int[] argTypes = this.setArgTypes(entity, SQL_DELETE); jdbcTemplate.update(sql, args, argTypes); } @Override public void deleteAll() { String sql = " TRUNCATE TABLE " + entityClass.getSimpleName(); jdbcTemplate.execute(sql); } @Override public void delete(Serializable id) { String sql = " DELETE FROM " + entityClass.getSimpleName() + " WHERE id=?"; jdbcTemplate.update(sql, id); } @Override public void batchSave(List<T> lt) { Assert.notEmpty(lt); StringBuilder sb = new StringBuilder(); sb.append("insert into ").append(entityClass.getSimpleName().toLowerCase()).append("( "); List<Object[]> params = new ArrayList<Object[]>(); String val = ""; for (T t : lt) { int index = 0; Field[] fields = t.getClass().getDeclaredFields(); if (fields != null && fields.length > 0) { Object[] objVal = new Object[fields.length]; for (Field field : fields) { try { field.setAccessible(true); Object obj = field.get(t); if (params.size() == 0) { sb.append(field.getName()).append(" ,"); val += ", ? "; } objVal[index++] = obj; } catch (Exception e) { e.printStackTrace(); } } params.add(objVal); } } sb.deleteCharAt(sb.length() - 1); val = val.substring(1); sb.append(") value (").append(val).append(")"); String sql = sb.toString(); jdbcTemplate.batchUpdate(sql, params); } @Override public void batchUpdate(List<T> lt) { Assert.notEmpty(lt); StringBuilder sb = new StringBuilder(); sb.append("update ").append(entityClass.getSimpleName().toLowerCase()).append(" set "); List<Object[]> params = new ArrayList<Object[]>(); Object primaryKey = "id"; for (T t : lt) { int index = 0; Field[] fields = entityClass.getDeclaredFields(); if (fields != null && fields.length > 0) { Object id = null; Object[] objVal = new Object[fields.length]; for (Field field : fields) { try { field.setAccessible(true); Object obj = field.get(t); if (field.getName().equalsIgnoreCase("id")) { primaryKey = obj; id = obj; } else { if (params.size() == 0) { sb.append(field.getName()).append(" = ? ,"); } objVal[index++] = obj; } } catch (Exception e) { e.printStackTrace(); } objVal[index] = id; } params.add(objVal); } } sb.deleteCharAt(sb.length() - 1); sb.append(" where ").append(primaryKey).append(" = ? "); String sql = sb.toString(); jdbcTemplate.batchUpdate(sql, params); } @Override public T findById(Serializable id) { String sql = "SELECT * FROM " + entityClass.getSimpleName() + " WHERE id=?"; RowMapper<T> rowMapper = BeanPropertyRowMapper.newInstance(entityClass); return jdbcTemplate.query(sql, rowMapper, id).get(0); } @Override public List<T> findAll() { String sql = "SELECT * FROM " + entityClass.getSimpleName(); RowMapper<T> rowMapper = BeanPropertyRowMapper.newInstance(entityClass); return jdbcTemplate.query(sql, rowMapper); } @Override public Map<String, Object> findOne(String sql, Object... args) { return jdbcTemplate.queryForMap(sql, args); } @Override public List<Map<String, Object>> findListMap(String sql, Object... args) { return jdbcTemplate.queryForList(sql, args); } @Override public void execSQL(String sql) { jdbcTemplate.execute(sql); } @Override public SqlRowSet rowSet(String sql, Object... args) { return this.jdbcTemplate.queryForRowSet(sql, args); } @Override public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } /** * 組裝SQl * * @param entityClass * @param sqlFlag * @return */ public String makeSql(String sqlFlag) { StringBuffer sql = new StringBuffer(); Field[] fields = entityClass.getDeclaredFields(); if (sqlFlag.equals(SQL_INSERT)) { sql.append(" INSERT INTO " + entityClass.getSimpleName()); sql.append("("); for (int i = 0; fields != null && i < fields.length; i++) { fields[i].setAccessible(true); // 暴力反射 String column = fields[i].getName(); sql.append(column).append(","); } sql = sql.deleteCharAt(sql.length() - 1); sql.append(") VALUES ("); for (int i = 0; fields != null && i < fields.length; i++) { sql.append("?,"); } sql = sql.deleteCharAt(sql.length() - 1); sql.append(")"); } else if (sqlFlag.equals(SQL_UPDATE)) { sql.append(" UPDATE " + entityClass.getSimpleName() + " SET "); for (int i = 0; fields != null && i < fields.length; i++) { fields[i].setAccessible(true); // 暴力反射 String column = fields[i].getName(); if (column.equals("id")) { // id 代表主鍵 continue; } sql.append(column).append("=").append("?,"); } sql = sql.deleteCharAt(sql.length() - 1); sql.append(" WHERE id=?"); } else if (sqlFlag.equals(SQL_DELETE)) { sql.append(" DELETE FROM " + entityClass.getSimpleName() + " WHERE id=?"); } System.out.println("SQL=" + sql); return sql.toString(); } /** * 設(shè)置參數(shù) * * @param entity * @param sqlFlag * @param entityClass * @return */ public Object[] setArgs(T entity, String sqlFlag) { Field[] fields = entityClass.getDeclaredFields(); if (sqlFlag.equals(SQL_INSERT)) { Object[] args = new Object[fields.length]; for (int i = 0; args != null && i < args.length; i++) { try { fields[i].setAccessible(true); // 暴力反射 args[i] = fields[i].get(entity); } catch (Exception e) { e.printStackTrace(); } } return args; } else if (sqlFlag.equals(SQL_UPDATE)) { Object[] tempArr = new Object[fields.length]; for (int i = 0; tempArr !=

轉(zhuǎn)載于:https://www.cnblogs.com/hujihon/p/5560599.html

總結(jié)

以上是生活随笔為你收集整理的Spring-JDBC通用Dao的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。