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

======================================================== 转载请注明出处。
目录
相关文章
|
23天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
22天前
|
Java 编译器
Java重复定义变量详解
这段对话讨论了Java中变量作用域和重复定义的问题。学生提问为何不能重复定义变量导致编译错误,老师通过多个示例解释了编译器如何区分不同作用域内的变量,包括局部变量、成员变量和静态变量,并说明了使用`this`关键字和类名来区分变量的方法。最终,学生理解了编译器在逻辑层面检查变量定义的问题。
Java重复定义变量详解
|
1月前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
50 1
Spring 框架:Java 开发者的春天
|
1月前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
1月前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
38 1
|
1月前
|
Oracle Java 关系型数据库
重新定义 Java 对象相等性
本文探讨了Java中的对象相等性问题,包括自反性、对称性、传递性和一致性等原则,并通过LaptopCharger类的例子展示了引用相等与内容相等的区别。文章还介绍了如何通过重写`equals`方法和使用`Comparator`接口来实现更复杂的相等度量,以满足特定的业务需求。
25 3
|
1月前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
1月前
|
存储 Java 编译器
Java集合定义其泛型
Java集合定义其泛型
19 1
|
1月前
|
人工智能 缓存 Java
深入解析Spring AI框架:在Java应用中实现智能化交互的关键
【10月更文挑战第12天】Spring AI 是 Spring 框架家族的新成员,旨在满足 Java 应用程序对人工智能集成的需求。它支持自然语言处理、图像识别等多种 AI 技术,并提供与云服务(如 OpenAI、Azure Cognitive Services)及本地模型的无缝集成。通过简单的配置和编码,开发者可轻松实现 AI 功能,同时应对模型切换、数据安全及性能优化等挑战。
114 3
|
1月前
|
分布式计算 Java 大数据
大数据-147 Apache Kudu 常用 Java API 增删改查
大数据-147 Apache Kudu 常用 Java API 增删改查
33 1
下一篇
无影云桌面