浅析Spring的JdbcTemplate方法

spring对于数据访问层提供了多种的模板技术。如果直接使用JDBC,那么可以选择JdbcTemplate、如果使用的是对象关系映射框架,使用hibernate应该使用HibernateTemplate模板,使用JPA则应该使用JpaTemplate。

除此之外,Spring框架为每一项的持久层技术都提供了相应的帮助类来简化操作。对于Jdbc提供了JdbcDaoSupport类、对于Hibernate技术提供了HibernateDaoSupport类、对于MyBatis提供了SqlMapClientDaoSupport类。

本篇主要介绍Spring如何使用JdbcTemplate来访问关系型数据库。

1.首先引入使用Spring的jdbc模块时的jar文件(maven项目可引入对应的依赖)。

  • spring-beans-3.2.0.RELEASE.jar
  • spring-context-3.2.0.RELEASE.jar
  • spring-core-3.2.0.RELEASE.jar
  • spring-expression-3.2.0.RELEASE.jar
  • commons-logging-1.2.jar
  • spring-jdbc-3.2.0.RELEASE.jar
  • spring-tx-3.2.0.RELEASE.jar

对应的数据库驱动(这里采用mysql)

2.在src下引入两个文件:applicationContext.xml和log4j.xml

3.下面以连接两种数据库连接池的技术来介绍Spring关于JdbcTemplate的使用:

使用Spring内置的数据库连接池:

DriverManagerDataSource dataSource=new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql:///springjdbc");
    dataSource.setUsername("root");
    dataSource.setPassword("1997WFY.....");

    JdbcTemplate template=new JdbcTemplate();
    template.setDataSource(dataSource);
    template.execute("create table book(id int primary key auto_increment,name varchar(20) not null,author varchar(25))");

或者:

  <!-- XML配置Spring默认的连接池 -->
  <bean id="driverManagerDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql:///springjdbc"/>
    <property name="username" value="root"/>
    <property name="password" value="1997WFY....."/>
  </bean>
  <bean class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="driverManagerDataSource"/>
  </bean>

Java代码使用:

/**
 * @author BeautifulSoup
 * 首先使用Spring内置的连接池
 */
@ContextConfiguration("classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringJdbcTest {

  @Autowired
  private JdbcTemplate template;

  @Test
  public void testDriverManagerDataSource() {
    template.execute("create table book(id int primary key auto_increment,name varchar(20) not null,author varchar(25))");
  }

}

使用世界上性能最好的Druid连接池:

  <!-- 配置Druid的连接池 -->
  <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql:///springjdbc" />
    <property name="username" value="root" />
    <property name="password" value="1997WFY....." />
    <!-- 设置初始的连接数目,最小的连接数,最大的连接数 -->
    <property name="initialSize" value="1" />
    <property name="minIdle" value="1" />
    <property name="maxActive" value="8" />
    <!-- 配置获取连接等待超时的时间 -->
    <property name="maxWait" value="10000" />
    <!-- 配置间隔多久才进行一次检测需要关闭的空闲连接 -->
    <property name="timeBetweenEvictionRunsMillis" value="60000" />
    <!-- 配置一个连接在池中最小的生存时间 -->
    <property name="minEvictableIdleTimeMillis" value="300000" />
    <property name="testWhileIdle" value="true" />
    <!-- 这里建议配置为TRUE,防止取到的连接不可用 -->
    <property name="testOnBorrow" value="true" />
    <property name="testOnReturn" value="false" />
    <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
    <property name="poolPreparedStatements" value="true" />
    <property name="maxPoolPreparedStatementPerConnectionSize"
      value="20" />
    <!-- 这里配置提交方式,默认就是TRUE,可以不用配置 -->
    <property name="defaultAutoCommit" value="true" />
    <!-- 验证连接有效与否的SQL,不同的数据配置不同 -->
    <property name="validationQuery" value="select 1 " />
    <property name="filters" value="stat" />
  </bean>
  <bean class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="druidDataSource" />
  </bean>
/**
 * @author BeautifulSoup
 * 首先使用Spring内置的连接池
 */
@ContextConfiguration("classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringJdbcTest {
  @Autowired
  private JdbcTemplate template;
  @Test
  public void testSpringJdbc() {
    template.execute("create table book(id int primary key auto_increment,name varchar(20) not null,author varchar(25))");
  }
}

4.使用得到的JdbcTemplate进行基本的增删改查:

首先创建实体类对象,

/**
 * @author BeautifulSoup
 * 创建实体类对象
 */
public class Book {
  private Integer id;
  private String name;
  private String author;
  public Integer getId() {
    return id;
  }
  public void setId(Integer id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getAuthor() {
    return author;
  }
  public void setAuthor(String author) {
    this.author = author;
  }
  @Override
  public String toString() {
    return "Book [id=" + id + ", name=" + name + ", author=" + author + "]";
  }
}

在配置文件中配置bean:

<bean class="com.fuyunwang.springjdbc.dao.BookDao">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>

Dao层进行持久层的开发:

/**
 * @author BeautifulSoup 完成基本的增删改查
 */
public class BookDao extends JdbcDaoSupport {

  public void add(Book book) {
    String sql = "insert into book values(?,?,?)";
    getJdbcTemplate().update(sql, book.getId(), book.getName(),
        book.getAuthor());
  }

  public void update(Book book) {
    String sql = "update book set name = ? , author = ? where id =?";
    getJdbcTemplate().update(sql, book.getName(), book.getAuthor(),
        book.getId());
  }

  public void delete(Book book) {
    String sql = "delete from book where id =?";
    getJdbcTemplate().update(sql, book.getId());
  }

  public int findCount() {
    String sql = "select count(*) from book";
    return getJdbcTemplate().queryForInt(sql);
  }

  public String findNameById(int id) {
    String sql = "select name from book where id = ?";
    return getJdbcTemplate().queryForObject(sql, String.class, id);
  }

  public Book findById(int id) {
    String sql = "select * from book where id = ?";
    return getJdbcTemplate().queryForObject(sql, new BookMapper(), id);
  }

  public List<Book> findAll(){
    String sql="select * from book";
    return getJdbcTemplate().query(sql, new BookMapper());
  }
  class BookMapper implements RowMapper<Book> {
    public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
      Book book = new Book();
      book.setId(rs.getInt("id"));
      book.setName(rs.getString("name"));
      book.setAuthor(rs.getString("author"));
      return book;
    }

  }
}

单元测试,

/**
 * @author BeautifulSoup
 * 首先使用Spring内置的连接池
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringJdbcTest {

  @Autowired
  private BookDao bookDao;

  @Test
  public void jdbcTemplateAdd(){
    Book book=new Book();
    book.setId(1);
    book.setName("SpringBoot实战");
    book.setAuthor("Craig Walls");
    bookDao.add(book);
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringJDBC批量处理数据代码示例

    参数: List<Map> paramMaps = new ArrayList<Map>(); for(int i = 0; i < 100; i++ ){ Map paramMap = new HashMap(); paramMap.put("param1", "param1"); paramMap.put("param2", "param2"); paramMap.put("para

  • 基于spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(详解)

    1.pom添加依赖 <!-- spring data jpa,会注入tomcat jdbc pool/hibernate等 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <

  • 详解spring开发_JDBC操作MySQL数据库

    本文介绍spring开发_JDBC操作MySQL数据库,具体如下: 项目结构: 数据库表: /spring_1100_spring+jdbc/src/com/b510/bean/Person.java package com.b510.bean; /** * 普通的javaBean类Person * * @author Hongten * */ public class Person { /** * id号 */ private int id; /** * 姓名 */ private Strin

  • Spring Boot中使用jdbctemplate 操作MYSQL数据库实例

    最近在学习使用Spring Boot连接数据库,今天学习了使用jdbctemplate 操作MYSQL数据库,下面就留个笔记 不废话,先来代码 pom文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org

  • 详解spring boot中使用JdbcTemplate

    本文将介绍如何将spring boot 与 JdbcTemplate一起工作. Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中. JdbcTemplate 是在JDBC API基础上提供了更抽象的封装,并提供了基于方法注解的事务管理能力. 通过使用SpringBoot自动配置功能并代替我们自动配置beans. 数据源配置 在maven中,我们需要增加spring-boot-starter-jdbc

  • 浅析Spring的JdbcTemplate方法

    spring对于数据访问层提供了多种的模板技术.如果直接使用JDBC,那么可以选择JdbcTemplate.如果使用的是对象关系映射框架,使用hibernate应该使用HibernateTemplate模板,使用JPA则应该使用JpaTemplate. 除此之外,Spring框架为每一项的持久层技术都提供了相应的帮助类来简化操作.对于Jdbc提供了JdbcDaoSupport类.对于Hibernate技术提供了HibernateDaoSupport类.对于MyBatis提供了SqlMapClie

  • 浅析JDBC的使用方法

    1.使用步骤: 导包 加载驱动类class.forName(....) DriverManager获取sql对象 写sql语句 Statement与prepareStatement不一样的执行sql语句,前者是直接sql对象 . 执行语句,而后者是预处理,即在创建sql对象时,就用sql语句,最后在用对象执行操作. 2.JDBCUtils工具类: 就是把使用步骤的共性,提出来,放在一个类中,这样以后就能直接调用创建sql对象的方法就行了. 值得一提的是,如果我们使用配置文件,扩展性更好,在使用其

  • 浅析Spring和MyBatis整合及逆向工程

    spring和mybatis整合 整合思路 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(spring和mybatis整合自动完成) 持久层的mapper都需要由spring进行管理. 整合环境 创建一个新的java工程(接近实际开发的工程结构) jar包: mybatis3.2.7的jar包 spring3.2.0的jar包 mybatis和spring的整合

  • JdbcTemplate方法介绍与增删改查操作实现

    JdbcTemplate介绍 为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架,Spring Boot Spring Data-JPA. 作为 SpringJDBC 框架的核心, JDBC 模板的设计目的是为不同类型的JDBC操作提供模板方法. 每个模板方法都能控制整个过程,并允许覆盖过程中的特定任务. 通过这种方式,可以在尽可能保留灵活性的情况下,将数据库存取的工作量降到最低. JdbcTemplate方法介绍 JdbcTem

  • 浅析spring定时器的使用

    原生的Java定时器 使用Java.util包下的定时器也很简单,具体代码如下: //设置定时器开始时间 Date time = sdf.parse("2020-10-01 16:40:00"); //设置定时器 Timer timer = new Timer(); //第三个参数表示每隔多久循环一次 timer.schedule(new TimerTask() { @Override public void run() { System.out.println("嗨&quo

  • 浅析Spring Boot单体应用熔断技术的使用

    壹.入围方案 Sentinel github地址:https://sentinelguard.io/zh-cn/docs/introduction.html 阿里出品,Spring Cloud Alibaba限流组件,目前持续更新中 自带Dashboard,可以查看接口Qps等,并且可以动态修改各种规则 流量控制,直接限流.冷启动.排队 熔断降级,限制并发限制数和相应时间 系统负载保护,提供系统级别防护,限制总体CPU等 主要核心:资源,规则(流量控制规则.熔断降级规则.系统保护规则.来源访问控

  • Spring框架+jdbcTemplate实现增删改查功能

    SpringMVC架构(Model(实体类),Service,Controller层) Controller(接收参数调用业务层)–>Service(调用持久层,处理业务逻辑)–>Dao(与数据库交互) 1. IOC(控制反转是一种设计思想而不是技术) DI(依赖注入):是IOC思想的一种技术实现 IOC容器是Spring提供的保存Bean对象的容器 Bean管理操作 1.Xml + 注解 2.javaConfig + 注解 通过xml配置Bean:TODO: 通过javaConfig 配置B

  • 超细致讲解Spring框架 JdbcTemplate的使用

    目录 JdbcTemplate基本使用 1-JdbcTemplate基本使用-概述(了解) 2-JdbcTemplate基本使用-开发步骤(理解) 3-JdbcTemplate基本使用-快速入门代码实现(应用) 4-JdbcTemplate基本使用-spring产生模板对象分析(理解) 5-JdbcTemplate基本使用-spring产生模板对象代码实现(应用) 6-JdbcTemplate基本使用-spring产生模板对象代码实现 7-JdbcTemplate基本使用-常用操作-更新操作(应

  • 浅析Spring Cloud Gateway中的令牌桶限流算法

    目录 前言 回顾限流算法 计数器/时间窗口法 漏桶法 令牌桶法 主要逻辑分析 前言 在一个分布式高并发的系统设计中,限流是一个不可忽视的功能点.如果不对系统进行有效的流量访问限制,在双十一和抢票这种流量洪峰的场景下,很容易就会把我们的系统打垮.而作为系统服务的卫兵的网关组件,作为系统服务的统一入口,更需要考虑流量的限制,直接在网关层阻断流量比在各个系统中实现更合适.Spring Cloud Gateway的实现中,就提供了限流的功能,下面主要分析下Spring Cloud Gateway中是如何

  • spring中jdbcTemplate.batchUpdate的几种使用情况

    目录 1,batchUpdate(String[] sqls) 2,batchUpdate(String sql,List <Object[]> parms) 3,适用于我的解决方案 在我做批量插入的过程中,由于数据库做了唯一约束,所以有些重复数据会出错,在我的设想中,除出错的数据,其它数据应该是都会插入的,但事实不是: 1,batchUpdate(String[] sqls) 这种的sql在于多样化,可以是各种混合sql,在操作时,会一部分一部分的发送到数据库去执行,中途有某条sql报错时,

随机推荐