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

  • 相关阅读:
    C++学习 之 程序的组成部分(部分知识笔记)
    debian下重装mysql
    CGI 环境变量
    boost的libboost_system问题
    debian下使用shell脚本时出现了 declare:not found 解决方法
    编译的时候出现"/usr/bin/ld: cannot find -lz
    glibc升级,解决glib版本过低的问题
    ubuntu彩色图形界面
    (转)http://blog.chinaunix.net/uid-8363656-id-2031644.html CGI 编写
    linux安装JSONCPP
  • 原文地址:https://www.cnblogs.com/ztfjs/p/8287504.html
Copyright © 2020-2023  润新知