接口类:

  

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, [] values,int[] types);     public T queryById(int id);    public T queryByField(String fieldname,String value);    public void updateByID(T t,int ID, [] values,int[] types);}

 

实现类:

package com.blog.db.dao.impl;import com.blog.db.dao.PublicDao;import com.blog.util.Pagination;import org.spring work.beans.factory.annotation.Value;import org.spring work.dao.EmptyResultDataAccessException;import org.spring work.jdbc.core.BeanPropertyRowMapper;import org.spring work.jdbc.core.JdbcTemplate;import org.spring work.jdbc.core.RowMapper;import org.spring work.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  [] { ID },                new int[] {Types.INTEGER}        );    }    /**     *  插入数据     *  @param t 传入操作的数据对象     *  @param values 值的 []对象     *  @param types 值对象的类型     * */    public void add(T t, [] 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.queryFor (                    sql,                    new  [] {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.queryFor (                    sql,                    new  [] {value},                    new int[] {Types.VARCHAR},                    getMapper()            );        }catch(EmptyResultDataAccessException e){            t = null;        }        return t;    }    /**     *  根据指定的id更新指定值的单行数据     *  @param t 传入更新对象     *  @param ID 传入指定的ID     *  @param values 值的 []对象     *  @param types 值对象的类型 int[]     * */    public void updateByID(T t, int ID, [] 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  再添加特殊方法

========================================================转载请注明出处。
收藏 打印