浅析Spring的JdbcTemplate方法

 更新时间:2017年01月24日 17:06:54   作者:James_shu  
本篇浅析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);
  }


}

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

相关文章

  • java数据库连接池和数据库连接示例

    java数据库连接池和数据库连接示例

    这篇文章主要介绍了java数据库连接池和数据库连接示例,需要的朋友可以参考下
    2014-05-05
  • Monaco Editor实现sql和java代码提示实现示例

    Monaco Editor实现sql和java代码提示实现示例

    这篇文章主要为大家介绍了Monaco Editor代码提示sql和java实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Java集合框架之Set和Map详解

    Java集合框架之Set和Map详解

    大家好,本篇文章主要讲的是Java集合框架之Set和Map详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • spring*.xml配置文件明文加密的实现

    spring*.xml配置文件明文加密的实现

    这篇文章主要介绍了spring*.xml配置文件明文加密的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Java FtpClient 实现文件上传服务

    Java FtpClient 实现文件上传服务

    本文主要对Java FtpClient实现简单的图片上传到服务器的方法进行介绍,并且展示的小demo中,对配置过程中主要碰到的问题:关于文件权限的问题也进行了说明,下面跟着小编一起来看下吧
    2016-12-12
  • 简单了解Spring Web相关模块运行原理

    简单了解Spring Web相关模块运行原理

    这篇文章主要介绍了简单了解Spring Web相关模块运行原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 基于java使用钉钉机器人向钉钉群推送消息

    基于java使用钉钉机器人向钉钉群推送消息

    这篇文章主要介绍了基于java使用钉钉机器人向钉钉群推送消息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 详解Java设计模式——迭代器模式

    详解Java设计模式——迭代器模式

    这篇文章主要介绍了Java设计模式——迭代器模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 详解Spring boot上配置与使用mybatis plus

    详解Spring boot上配置与使用mybatis plus

    这篇文章主要介绍了详解Spring boot上配置与使用mybatis plus,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 简单了解spring cloud 网关服务

    简单了解spring cloud 网关服务

    这篇文章主要介绍了简单了解spring cloud 网关服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论