接口类:

  

package com.blog.db.dao;

import com.blog.util.Pagination;

import java.util.List;

public interface PublicDao<T> {
public void setMapper(Class t);
public void setTableName(String tn);
public List<T> queryList(Pagination pagination);
public void deleteByID(int ID);
public void add(T t,Object[] values,int[] types);
public T queryById(int id);
public T queryByField(String fieldname,String value);
public void updateByID(T t,int ID,Object[] values,int[] types);
}

实现类:

package com.blog.db.dao.impl;

import com.blog.db.dao.PublicDao;
import com.blog.util.Pagination;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository; import javax.annotation.Resource;
import java.sql.Types;
import java.util.List;
/**
* 公共dao实现
* @deprecated 提供常见的列表、插入、查询单个、更新数据服务
* @author ztf
* */
@Repository("publicDao")
public class PublicDaoimpl<T> implements PublicDao<T> {
@Resource
private JdbcTemplate jdbcTemplate;
private String table_name = ""; //表名称
private List<String> fields; //表字段
@Value("${db_schema}")
private String schema; //表模式
private RowMapper<T> mapper;
/**
* 设置Mapper映射
*/ public void setMapper(Class t){
this.mapper = new BeanPropertyRowMapper<T>(t);
}
public RowMapper<T> getMapper(){
return mapper;
}
public void setTableName(String tn){
this.table_name = tn;
}
public String getTable_name() {
return schema+"."+table_name;
}
public List<String> getFields(){
return this.fields;
}
public String getFieldsToString(){
String _fields;
List<String> fields = getFields();
_fields = String.join(",",fields);
return _fields;
}
/**
* 查询列表
* @param pagination 传入公共util中定义的分页对象
* @return List<T>
* */
public List<T> queryList(Pagination pagination) {
List lists = null;
String sql = "select * from ? ?";
lists = jdbcTemplate.queryForList(
sql,
getTable_name(),
pagination.getSql(),
getMapper() );
return lists;
}
/**
* 根据ID删除某一个行
* @param ID 传入行id
* */
public void deleteByID(int ID) {
String sql = "delete from "+
getTable_name()+" where ID=?"; jdbcTemplate.update(
sql,
new Object[] { ID },
new int[] {Types.INTEGER}
);
}
/**
* 插入数据
* @param t 传入操作的数据对象
* @param values 值的object[]对象
* @param types 值对象的类型
* */
public void add(T t,Object[] values,int[] types) {
String sql = "insert into "+getTable_name()+"("+getFieldsToString()+") values(?)";
jdbcTemplate.update(
sql,
values,
types
);
}
/**
* 根据ID查询指定的行
* @param id 传入id
* */
public T queryById(int id) {
T t = null;
String sql = "select * from "+getTable_name()+" where ID=?";
try{
t = jdbcTemplate.queryForObject(
sql,
new Object[] {id},
new int[] {Types.INTEGER},
getMapper()
);
}catch(EmptyResultDataAccessException e){
t = null;
}
return t;
}
/**
* 根据指定的fieldname查询指定值的单行数据
* @param fieldname 传入id
* */
public T queryByField(String fieldname,String value) {
T t = null;
String sql = "select * from "+getTable_name()+" where "+fieldname+"=?";
try{
t = jdbcTemplate.queryForObject(
sql,
new Object[] {value},
new int[] {Types.VARCHAR},
getMapper()
);
}catch(EmptyResultDataAccessException e){
t = null;
}
return t;
}
/**
* 根据指定的id更新指定值的单行数据
* @param t 传入更新对象
* @param ID 传入指定的ID
* @param values 值的object[]对象
* @param types 值对象的类型 int[]
* */
public void updateByID(T t, int ID,Object[] values,int[] types) {
String sql = "update "+getTable_name()+" set username=?,password=?,pic=?,describe=?,check_time=? where ID="+ID;
jdbcTemplate.update(
sql,
values,
types
);
}
}

核心的地方在:如何传递Mapper

这里我使用的是

private RowMapper<T> mapper;
/**
* 设置Mapper映射
*/ public void setMapper(Class t){
this.mapper = new BeanPropertyRowMapper<T>(t);
}
public RowMapper<T> getMapper(){
return mapper;
}

在调用Dao时传入 T类的.class对象

调用例如(部分代码):

 @Qualifier("publicDao")
private PublicDao<User> ud; public User Sign(String username, String password) throws UnsupportedEncodingException {
String md5_pass = MD5Encryption.getEncryption(password); ud.setTableName("users"); //指定查询表名
ud.setMapper(User.class); //指定映射class对象
User user = ud.queryByField("username",username); //根据字段 username查询值为xxx

可以实现基本表的增删改查,提升开发效率,

如果有特殊的Dao可以自定义一个专属Dao  再添加特殊方法

最新文章

  1. Leetcode 18. 4Sum
  2. Garbage Collection C++
  3. JavaWeb用Jdbc操作MySql数据库(一)
  4. C++ Primer :第十章 :泛型算法之再探迭代器以及其他算法
  5. (转)C# 解析 json
  6. 【OpenSSL】创建证书
  7. Oracle数据库之PL/SQL程序设计基础
  8. 入门指引 - PHP手册笔记
  9. 五子棋Web版的开发(一)---搭建IDEA SSH环境
  10. ASP.NET Core学习之二 菜鸟踩坑
  11. 浴室沉思:聊聊DAL和Repository
  12. requests之一:HTTP请求 状态码
  13. Generator和Async
  14. 小tips:path的join和resolve的使用区别
  15. MySQL之库相关操作
  16. Docker 构建 RabbitMQ 集群
  17. java获取当前日期所在的周的周一,并以周一为一周开始
  18. GridsearchCV调参
  19. [math][mathematica] Mathematica进阶
  20. linq to sql and linq to object 总结

热门文章

  1. NYOJ 题目77 开灯问题(简单模拟)
  2. “玲珑杯”ACM比赛 Round #19题解&amp;源码【A,规律,B,二分,C,牛顿迭代法,D,平衡树,E,概率dp】
  3. 2017ecjtu-summer training # 9 HDU 4544
  4. hdu_1014(竟然真的还有更水的)
  5. angular1项目打包app及logo和启动图片的设置
  6. [国嵌攻略][061][2440LCD驱动设计]
  7. Spider爬虫 の 事
  8. IntersectionObserver实现图片懒加载
  9. Spark性能调优之合理设置并行度
  10. 关于keil5使用注意事项(预定义、路径包含)