
【java学习】spring mvc 公共dao的实现,定义基本的增删改查
发布日期:2021-05-09 09:33:24
浏览次数:10
分类:博客文章
本文共 4496 字,大约阅读时间需要 14 分钟。
接口类:
package com.blog.db.dao;import com.blog.util.Pagination;import java.util.List;public interface PublicDao{ public void setMapper(Class t); public void setTableName(String tn); public List 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 PublicDaoimplimplements PublicDao { @Resource private JdbcTemplate jdbcTemplate; private String table_name = ""; //表名称 private List fields; //表字段 @Value("${db_schema}") private String schema; //表模式 private RowMapper mapper; /** * 设置Mapper映射 */ public void setMapper(Class t){ this.mapper = new BeanPropertyRowMapper (t); } public RowMapper getMapper(){ return mapper; } public void setTableName(String tn){ this.table_name = tn; } public String getTable_name() { return schema+"."+table_name; } public List getFields(){ return this.fields; } public String getFieldsToString(){ String _fields; List fields = getFields(); _fields = String.join(",",fields); return _fields; } /** * 查询列表 * @param pagination 传入公共util中定义的分页对象 * @return List * */ public List 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 RowMappermapper; /** * 设置Mapper映射 */ public void setMapper(Class t){ this.mapper = new BeanPropertyRowMapper (t); } public RowMapper getMapper(){ return mapper; }
在调用Dao时传入 T类的.class对象
调用例如(部分代码):
@Qualifier("publicDao") private PublicDaoud; 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 再添加特殊方法
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月19日 00时48分43秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
继续聊WPF——用Blend自定义Listview控件的列表头
2021-05-09
【WPF】制作自定义的列表项面板
2021-05-09
【.net 深呼吸】启动一个进程并实时获取状态信息
2021-05-09
OO_Unit2 多线程电梯总结
2021-05-09
json-lib的使用《二》
2021-05-09
LeetCode52题,别再问我N皇后问题了
2019-03-06
Swagger常用注解
2019-03-06
简单实用算法——字节位序反转
2019-03-06
webpack之带有可自动打开浏览器及热重载的基本配置
2019-03-06
前端的批量接口如何快速响应?有没有通用解决方案?
2019-03-06
Shader 入门笔记(一) 如何学习shader
2019-03-06
Huffman树及其编解码
2019-03-06
分布式、高并发、高性能场景(抢购、秒杀、抢票、限时竞答)数据一致性解决方案
2019-03-06
淘宝镜像
2019-03-06
PLSQL数据导入导出问题解决(空表、大字段表、表空间错误等)
2019-03-06
Python算法_盛最多水的容器(04)
2019-03-06
20.波利亚过程
2019-03-06
04_Mysql配置文件(重要参数)
2019-03-06