Spring-JDBC通用Dao
JdbcBaseDao
JdbcBaseDao接口,内容如下:
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 实现
JdbcBaseDao接口,内容如下:
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实现类是:" + 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(); } /** * 设置参数 * * @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 !=
转载于:https://www.cnblogs.com/hujihon/p/5560599.html
Spring-JDBC通用Dao相关推荐
- Spring Data JDBC通用DAO实现–迄今为止最轻量的ORM
我很高兴宣布Spring Data JDBC存储库项目的第一个版本. 这个开放源代码库的目的是为基于Spring框架中 JdbcTemplate关系数据库提供通用,轻量且易于使用的DAO实现,与项目的 ...
- orm jdbc_Spring Data JDBC通用DAO实现–迄今为止最轻量的ORM
orm jdbc 我很高兴宣布Spring Data JDBC存储库项目的第一个版本. 这个开源库的目的是为基于Spring框架中 JdbcTemplate关系数据库提供通用,轻量且易于使用的DAO实 ...
- Spring JDBC和JdbcTemplate CRUD与DataSource示例
Spring JDBC示例和JdbcTemplate CRUD与DataSource示例 Spring JDBC是本教程的主题.数据库是大多数企业应用程序不可或缺的一部分.因此,当谈到Java EE框 ...
- Spring JDBC 示例
Spring JDBC示例 Spring JDBC是本教程的主题.数据库是大多数企业应用程序不可或缺的一部分.因此,当谈到Java EE框架时,与JDBC的良好集成非常重要. 目录[ 隐藏 ] 1 S ...
- Spring——DAO层、Spring JDBC、Spring事务控制
目录 一.Spring对持久层技术支持 1.Spring支持的持久层技术 2.Spring JDBC 2.1. JDBCTemplate类 2.2.Spring JDBC CRUD操作 2.3.Spr ...
- 一个基于JDBC的通用DAO的设计参考(北大青鸟课程)
在S2阶段和Y2阶段的前部分是使用的JDBC来访问数据库,但是通常我们编写的时候在每个工程中都编写代码基本类似却有一点点不同之处的DAO层代码,现在介绍一种相对简化的方式来简化编程 现在我们来分析下S ...
- Spring DAO(2):Spring JDBC 访问数据库
以下完整示例代码地址:https://gitee.com/assad/springframework-test-daohttps://gitee.com/assad/springframework-t ...
- Spring Boot-------JPA——EntityManager构建通用DAO
EntityManager EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满 ...
- Spring JDBC-使用Spring JDBC访问数据库
概述 使用Spring JDBC 基本的数据操作 更改数据 返回数据库表的自增主键值 批量更改数据 查询数据 使用RowCallbackHandler处理结果集 使用RowMapperT处理结果集 R ...
- Spring JDBC-Spring对DAO的支持
概述 Spring的DAO理念 统一的异常体系 统一的数据访问模板 使用模板和回调机制 模板类 数据源 配置数据源 DBCP数据源 C3P0数据源 获取JNDI数据源 Spring的数据源实现类 总结 ...
最新文章
- C# MD5加密工具方法
- redis 管理工具_Redis的跨平台GUI 桌面管理工具
- python电脑下载网址-python下载文件文件到本地电脑(基于requests)
- k8s/01开启云原生之门(Mooc)
- vue 封装返回顶部组件
- 磁盘阵列常见故障以及维护注意事项
- 数组|leetcode27.移除元素
- 中国有超级计算机的大学,计算机专业排名看超算实力,ASC竞赛五大高校排名,中山大学第一...
- spingboot视图层实例(JSP+Freemaker)以及自定义配置读取
- jQuery节点创建与属性的处理 创建节点
- 记录TI电量计采集化学ID过程
- promise是什么?
- C语言的奇技淫巧之三
- Base64加密和解密使用
- (Window环境) curl: (6) Could not resolve host: application curl: (6) Could not resolve host: ‘localhos
- linux redis5.0 集群搭建
- 你的私密照片可能正被“合法”观看
- 【卡尔曼滤波介绍与原理解析】
- 郭天祥自学单片机的方法
- uni-app触发点击事件
热门文章
- php判断除数是不是整数,五种js判断是否为整数类型方式
- ajax请求是宏任务还是微任务_微服务-如何解决链路追踪问题
- python如何输入一个数停止输出可循环部分_Python 第04周:控制与循环
- 磁盘io php,PHP CURL如何处理上传内存中文件,避免磁盘IO开销
- oracle11gasm,Oracle11gASM之ACFS创建案例
- ethercard php_关于EtherCard的webClient代码分析
- java 查询线程池_[代码全屏查看]-我的 Java 线程池测试类
- oracle定时任务会漂移,定时任务与手动执行脚本时的一个重要注意事项
- python大型项目经验_经验丰富程序员才知道的8种高级Python技巧
- densepose安装_基于DensePose的姿势转换系统,仅根据一张输入图像和目标姿势