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

接口类:

  

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

原文地址:https://www.cnblogs.com/ztfjs/p/8287504.html

时间: 2024-08-02 23:19:52

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

Spring mvc整合mybatis基于mysql数据库实现用户增删改查及其分页显示的完整入门实例【转】

Spring mvc整合mybatis例子, 基于mysql数据库实现对用户的增.删.改.查,及分页显示的完整例子. 查询显示用户 添加用户 更新用户 官方验证: 项目截图 必须修改applicationContext.xml中mysql的配置为本地的,否则启动失败. 另外jar包多一个ehcache.jar无关紧要,删除即可. 1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库

【DRP】-Dao层常用功能代码:增删改查

本系列博客内容为:做DRP系统中Dao层常用功能. 该项目采用MVC架构 C(Controller)控制器,主要职责;1.取得表单参数:2.调用业务逻辑:3.转向页面 M(Model)模型,主要职责:1.业务逻辑:2.保存数据的状态 V(View)视图,主要职责:显示 本文主要是针对于Dao层的常见使用方法:增删改查sql语句及常用操作. 1 package com.bjpowernode.drp.basedata.dao; 2 3 import java.sql.Connection; 4 i

spring boot 2.X 集成 Elasticsearch 5.x 实战 增删改查

其实这种博客网上一大片,为啥还要写出来这篇博客?网上的例子都是基于elasticsearch2.x版本的,并不是5.x版本,而且还有好多是错的,拿过来根本不能直接用来测试,还有就是spring-data没有对应的5.x版本,出于对方面考虑,所以就用spring boot 2.x来做一个demo,分享出来.如果有错误,欢迎指出. 具体的代码网址githup:https://github.com/growup818/springboot-es-search 实战: ES数据配置类 package o

Android(java)学习笔记245:ContentProvider之银行数据库创建和增删改查的实现

1.Android的四大组件: (1)Activity  用户交互的UI界面 (2)Service  后台运行的服务 (3)BroadcastReceiver 广播接收者 (4)ContentProvider  内容提供者 2. ContentProvider  内容提供者 用途:把应用程序私有的数据暴露给别的应用程序. 3.下面通过一个银行数据库创建和增删改查的实现案例说明ContentProvider的使用: (1)首先我们这里要用到数据库,首先我们必须先扩展一个抽象类SQLiteOpenH

Mybatis学习总结(二)—使用接口实现数据的增删改查

在这一篇中,让我们使用接口来实现一个用户数据的增删改查. 完成后的项目结构如下图所示: 在这里,person代表了一个用户的实体类.在该类中,描述了相关的信息,包括id.name.age.id_num信息.而personMapper则是该实体类的一个配置文件.需要注意的是,在上一篇博文中,namespace属性的值是其本身,而在这一篇中,使用的是接口.那么两者有什么区别呢?使用接口,那么相关的操作方法不用自己去实现,只需要调用该接口的相关的方法就能够实现相应的功能. 那么,在这里就有一个问题,接

MyBatis学习(二)、SQL语句映射文件(2)增删改查、参数、缓存

二.SQL语句映射文件(2)增删改查.参数.缓存 2.2 select 一个select 元素非常简单.例如: Xml代码   <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String" resultMap="studentResultMap"> SELECT ST.STUDENT_ID, ST.STUDENT_NAME, ST.STUDENT_SEX

Android学习笔记之SQLite数据库的使用及常用的增删改查方法、无sql语句的DRUD方法汇总

(1)目录结构如下: (2)链接数据库的文件:DBHelper.java要继承SQLiteOpenHelper类 package com.lc.sqlite_demo1.db; import android.content.Context; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLit

Java学习——Spring MVC从无到有利用POI创建并下载Excel

本功能描述,在前端页面点击下载按钮,开始下载所需数据,效果图如下: Google浏览器效果如下: 打开Excel如下: Firefox浏览器效果如下: 首先要导入POI的jar包,我的工程采用maven管理,所以添加比较简单,如下代码 找到项目的pom.xml文件在<dependencies>中加入 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifac

6、Spring+Struts2+MyBatis(mybatis有代理)整合增删改查

1.创建如下的oracle脚本 1 create table userinfo 2 (id number(4), 3 name varchar2(50), 4 password varchar2(20 5 telephone varchar2(15), 6 isadmin varchar2(5)); 7 8 --4.2 用户表序列 9 create sequence seq_userinfo; 10 11 alter table userinfo add constraint pk_userin