【java学习】spring mvc 公共dao的实现,定义基本的增删改查

简介: 接口类:    package com.blog.db.dao; import com.blog.util.Pagination; import java.util.List; public interface PublicDao { public void se...

接口类:

  

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  再添加特殊方法

======================================================== 转载请注明出处。
目录
相关文章
|
9天前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
77 43
Java学习十六—掌握注解:让编程更简单
|
7天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
25 1
Spring 框架:Java 开发者的春天
|
17天前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
19 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
6天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
1天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
11天前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
23 1
|
17天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
27 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
15天前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
31 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
42 0
|
6月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
178 0