使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)

简介: 使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)
 /**  
* @Title: BaseImpl.java
* @Package org.dao.impl
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-6-6 下午4:12:02
* @version V1.0  
*/
package org.dao.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
 /**   
 *    
 * 项目名称:spring_Cchop10   
 * 类名称:BaseImpl   
 * 类描述:   
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-6-6 下午4:12:02   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-6-6 下午4:12:02   
 * 修改备注:   
 * @version    
 *    
 */
public class BaseImpl<T> {
  private JdbcTemplate jdbcTemplate;   //jdbcTemplate对象
  private Class<T> entityClass;        //将实体类转换成class
  /**
   * 
       * 构造函数 
       * @discription 
       * @author Mu Xiongxiong     
       * @created 2017-6-6 下午4:58:40
   */
  @SuppressWarnings("unchecked")
  public BaseImpl() {
    //将T转换成class
    entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
  }
  /**
   * 
  * @Title: save
  * @Description: 该方法的主要作用:添加,修改,删除
  * @param  @param sql
  * @param  @param objects 设定文件  
  * @return  返回类型:void   
  * @throws
   */
  public void update(String sql,Object[]objects){
    jdbcTemplate.update(sql, objects);
  }
  /**
   * 
  * @Title: getById
  * @Description: 该方法的主要作用:根据id查询信息
  * @param  @param sql
  * @param  @param id 设定文件  
  * @return  返回类型:void   
  * @throws
   */
  public T getById(String sql,Serializable id){
    return  (T) jdbcTemplate.queryForObject(sql,new Object[]{id},new BeanPropertyRowMapper(entityClass));
  }
  /**
   * 
  * @Title: getAll
  * @Description: 该方法的主要作用:查询全部
  * @param  @param sql 设定文件  
  * @return  返回类型:void   
  * @throws
   */
  public List<T> getAll(String sql){
    return jdbcTemplate.query(sql, new BeanPropertyRowMapper(entityClass));
  }
  public JdbcTemplate getJdbcTemplate() {
    return jdbcTemplate;
  }
  public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
    this.jdbcTemplate = jdbcTemplate;
  }
    /**
     * 创建添加一条员工记录的存储过程
     * CREATE OR REPLACE PROCEDURE add_emp
        (myempno in NUMBER,myename VARCHAR2,myjob VARCHAR2,mymgr NUMBER,mydate DATE,
        mysal NUMBER,mycomm NUMBER)  
        AS  
        BEGIN  
         INSERT INTO emp VALUES(myempno,myename,myjob,mymgr,mydate,mysal,mycomm);  
        END;  
     * 
     * 
     */
    @SuppressWarnings("unchecked")
    public Integer testProcedure(final Emp emp) {
        Integer dno    =  jdbcTemplate.execute(new CallableStatementCreator(){
            @Override
            public CallableStatement createCallableStatement(Connection con)
                    throws SQLException {
                String procStr            =            "{call add_emp(?,?,?,?,?,?,?)}";
                CallableStatement   cs                =            con.prepareCall(procStr);
                cs.setInt(1, emp.getEmpno());
                cs.setString(2, emp.getEname());
                cs.setString(3, emp.getJob());
                cs.setInt(4, emp.getMgr());
                cs.setDate(5, (Date) emp.getHiredate());
                cs.setDouble(6, emp.getSal());
                cs.setDouble(7, emp.getComm());
                cs.registerOutParameter(1, OracleTypes.NUMBER);
                return cs;
            }
        }, new CallableStatementCallback(){
            @Override
            public Object doInCallableStatement(CallableStatement cs)
                    throws SQLException, DataAccessException {
                cs.execute();
                return cs.getInt(1);
            }
        })    ;    
        return dno;
    }
 }
相关文章
|
7月前
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
710 5
|
7月前
|
Java Spring 容器
两种Spring Boot 项目启动自动执行方法的实现方式
在Spring Boot项目启动后执行特定代码的实际应用场景中,可通过实现`ApplicationRunner`或`CommandLineRunner`接口完成初始化操作,如系统常量或配置加载。两者均支持通过`@Order`注解控制执行顺序,值越小优先级越高。区别在于参数接收方式:`CommandLineRunner`使用字符串数组,而`ApplicationRunner`采用`ApplicationArguments`对象。注意,`@Order`仅影响Bean执行顺序,不影响加载顺序。
567 2
|
9月前
|
人工智能 自然语言处理 Java
Spring 集成 DeepSeek 的 3大方法(史上最全)
DeepSeek 的 API 接口和 OpenAI 是兼容的。我们可以自定义 http client,按照 OpenAI 的rest 接口格式,去访问 DeepSeek。自定义 Client 集成DeepSeek ,可以通过以下步骤实现。步骤 1:准备工作访问 DeepSeek 的开发者平台,注册并获取 API 密钥。DeepSeek 提供了与 OpenAI 兼容的 API 端点(例如),确保你已获取正确的 API 地址。
Spring 集成 DeepSeek 的 3大方法(史上最全)
|
11月前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
470 73
|
7月前
|
前端开发 IDE Java
Spring MVC 中因导入错误的 Model 类报错问题解析
在 Spring MVC 或 Spring Boot 开发中,若导入错误的 `Model` 类(如 `ch.qos.logback.core.model.Model`),会导致无法解析 `addAttribute` 方法的错误。正确类应为 `org.springframework.ui.Model`。此问题通常因 IDE 自动导入错误类引起。解决方法包括:删除错误导入、添加正确包路径、验证依赖及清理缓存。确保代码中正确使用 Spring 提供的 `Model` 接口以实现前后端数据传递。
243 0
|
11月前
|
Java Spring
【Spring配置相关】启动类为Current File,如何更改
问题场景:当我们切换类的界面的时候,重新启动的按钮是灰色的,不能使用,并且只有一个Current File 项目,下面介绍两种方法来解决这个问题。
225 10
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
113 0
|
XML 缓存 Java
模仿Spring实现一个类管理容器
项目的初衷是独立作出一个成熟的有特色的IOC容器,但由于过程参考Spring太多,而且也无法作出太多改进,于是目的变为以此项目作为理解Spring的一个跳板,与网上的一些模仿Spring的框架不同,本项目主要是针对注解形式
595 0
模仿Spring实现一个类管理容器
|
4月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
858 0
|
1月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
247 3