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

======================================================== 转载请注明出处。
目录
相关文章
|
1月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
12 0
|
1月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
12 0
|
1月前
Servlet使用适配器模式进行增删改查案例(IDeptService.java)
Servlet使用适配器模式进行增删改查案例(IDeptService.java)
14 0
|
1月前
Servlet使用适配器模式进行增删改查案例(EmpDaoImpl.java)
Servlet使用适配器模式进行增删改查案例(EmpDaoImpl.java)
13 0
|
1月前
Servlet使用适配器模式进行增删改查案例(DeptDaoImpl.java)
Servlet使用适配器模式进行增删改查案例(DeptDaoImpl.java)
12 0
|
1月前
Servlet使用适配器模式进行增删改查案例(IDeptDao.java和IEmpDao.java)
Servlet使用适配器模式进行增删改查案例(IDeptDao.java和IEmpDao.java)
14 0
|
1月前
|
SQL JavaScript Java
springboot+springm vc+mybatis实现增删改查案例!
springboot+springm vc+mybatis实现增删改查案例!
26 0
|
1月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——Dept.java
ssh(Spring+Spring mvc+hibernate)——Dept.java
12 0
|
1月前
Servlet使用适配器模式进行增删改查案例(IEmpService.java)
Servlet使用适配器模式进行增删改查案例(IEmpService.java)
14 0
|
1天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式