美文网首页
spring JdbcTemplate 封装

spring JdbcTemplate 封装

作者: 酷酷的小k | 来源:发表于2019-01-24 21:52 被阅读0次

spring JdbcTemplate 封装,返回各种类型数据及返回主键,Long,Map,List<Map>,List<String>,List<Student>,Studen等。

package com.mvc.dao;

import com.mysql.jdbc.Statement;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import org.springframework.stereotype.Repository;

import java.sql.PreparedStatement;
import java.util.List;
import java.util.Map;

/**
 * BaseDao
 *
 * @author smallk
 * @date 2018/7/29 21:36
 */
@Repository
public class BaseDao {

    @Autowired
    public JdbcTemplate jdbcTemplate;

    /**
     * 返回map
     */
    public Map<String, Object> queryMapBySQL(String sql, Object... params) {
        try {
            return jdbcTemplate.queryForMap(sql, params);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    /**
     * 返回指定对象,例如 User Student ...
     */
    public <T> T queryObjectBySQL(String sql, Class<T> clazz, Object... params) {
        try {
            return jdbcTemplate.queryForObject(sql, params, new BeanPropertyRowMapper<>(clazz));
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    /**
     * 返回指定简单对象,例如 String Integer ...
     */
    public <T> T querySimpleObjectBySQL(String sql, Class<T> clazz, Object... params) {
        try {
            return jdbcTemplate.queryForObject(sql, params, clazz);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    /**
     * 返回指定对象list,例如 List<User> List<Student> ...
     */
    public <T> List<T> queryObjectListBySQL(String sql, Class<T> clazz, Object... params) {
        return jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz));
    }

    /**
     * 返回指定简单对象list,例如 List<String> List<Integer> ...
     */
    public <T> List<T> querySimpleObjectListBySQL(String sql, Class<T> clazz, Object... params) {
        return jdbcTemplate.queryForList(sql, clazz, params);
    }

    /**
     * 返回list
     */
    public List<Map<String, Object>> queryListBySQL(String sql, Object... params) {
        return jdbcTemplate.queryForList(sql, params);
    }

    /**
     * 更新sql
     */
    public Integer updateSQL(String sql, Object... params) {
        return jdbcTemplate.update(sql, params);
    }

    /**
     * insert sql 并且返回 id
     */
    public long insertSQL(String sql, Object... params) {
        KeyHolder keyHolder = new GeneratedKeyHolder();
        PreparedStatementCreator preparedStatementCreator = conn -> {
            PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            int index = 1;
            for (Object obj : params) {
                ps.setObject(index++, obj);
            }
            return ps;
        };
        jdbcTemplate.update(preparedStatementCreator, keyHolder);
        return keyHolder.getKey().longValue();
    }
}

相关文章

网友评论

      本文标题:spring JdbcTemplate 封装

      本文链接:https://www.haomeiwen.com/subject/oxxpjqtx.html