欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析Spring的JdbcTemplate方法

 更新時(shí)間:2017年01月24日 17:06:54   作者:James_shu  
本篇淺析Spring的JdbcTemplate方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

spring對(duì)于數(shù)據(jù)訪(fǎng)問(wèn)層提供了多種的模板技術(shù)。如果直接使用JDBC,那么可以選擇JdbcTemplate、如果使用的是對(duì)象關(guān)系映射框架,使用hibernate應(yīng)該使用HibernateTemplate模板,使用JPA則應(yīng)該使用JpaTemplate。

除此之外,Spring框架為每一項(xiàng)的持久層技術(shù)都提供了相應(yīng)的幫助類(lèi)來(lái)簡(jiǎn)化操作。對(duì)于Jdbc提供了JdbcDaoSupport類(lèi)、對(duì)于Hibernate技術(shù)提供了HibernateDaoSupport類(lèi)、對(duì)于MyBatis提供了SqlMapClientDaoSupport類(lèi)。

本篇主要介紹Spring如何使用JdbcTemplate來(lái)訪(fǎng)問(wèn)關(guān)系型數(shù)據(jù)庫(kù)。

1.首先引入使用Spring的jdbc模塊時(shí)的jar文件(maven項(xiàng)目可引入對(duì)應(yīng)的依賴(lài))。

  • 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

對(duì)應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)(這里采用mysql)

2.在src下引入兩個(gè)文件:applicationContext.xml和log4j.xml

3.下面以連接兩種數(shù)據(jù)庫(kù)連接池的技術(shù)來(lái)介紹Spring關(guān)于JdbcTemplate的使用:

使用Spring內(nèi)置的數(shù)據(jù)庫(kù)連接池:

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默認(rèn)的連接池 -->
  <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內(nèi)置的連接池
 */
@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....." />
    <!-- 設(shè)置初始的連接數(shù)目,最小的連接數(shù),最大的連接數(shù) -->
    <property name="initialSize" value="1" />
    <property name="minIdle" value="1" />
    <property name="maxActive" value="8" />
    <!-- 配置獲取連接等待超時(shí)的時(shí)間 -->
    <property name="maxWait" value="10000" />
    <!-- 配置間隔多久才進(jìn)行一次檢測(cè)需要關(guān)閉的空閑連接 -->
    <property name="timeBetweenEvictionRunsMillis" value="60000" />
    <!-- 配置一個(gè)連接在池中最小的生存時(shí)間 -->
    <property name="minEvictableIdleTimeMillis" value="300000" />
    <property name="testWhileIdle" value="true" />
    <!-- 這里建議配置為T(mén)RUE,防止取到的連接不可用 -->
    <property name="testOnBorrow" value="true" />
    <property name="testOnReturn" value="false" />
    <!-- 打開(kāi)PSCache,并且指定每個(gè)連接上PSCache的大小 -->
    <property name="poolPreparedStatements" value="true" />
    <property name="maxPoolPreparedStatementPerConnectionSize"
      value="20" />
    <!-- 這里配置提交方式,默認(rèn)就是TRUE,可以不用配置 -->
    <property name="defaultAutoCommit" value="true" />
    <!-- 驗(yàn)證連接有效與否的SQL,不同的數(shù)據(jù)配置不同 -->
    <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內(nèi)置的連接池
 */
@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進(jìn)行基本的增刪改查:

首先創(chuàng)建實(shí)體類(lèi)對(duì)象,

/**
 * @author BeautifulSoup
 * 創(chuàng)建實(shí)體類(lèi)對(duì)象
 */
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層進(jìn)行持久層的開(kāi)發(fā):

/**
 * @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;
    }

  }
}

單元測(cè)試,

/**
 * @author BeautifulSoup
 * 首先使用Spring內(nèi)置的連接池
 */
@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實(shí)戰(zhàn)");
    book.setAuthor("Craig Walls");
    bookDao.add(book);
  }


}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java開(kāi)發(fā)使用BigDecimal避坑四則

    java開(kāi)發(fā)使用BigDecimal避坑四則

    這篇文章主要為大家介紹了java開(kāi)發(fā)使用BigDecimal的避坑四則,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系

    Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系

    這篇文章主要介紹了Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 源碼分析ConcurrentHashMap如何保證線(xiàn)程安全

    源碼分析ConcurrentHashMap如何保證線(xiàn)程安全

    這篇文章將結(jié)合底層源碼為大家詳細(xì)介紹一下ConcurrentHashMap是如何保證線(xiàn)程安全的,文中是示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-06-06
  • JAVASE精密邏輯控制過(guò)程詳解(分支和循環(huán)語(yǔ)句)

    JAVASE精密邏輯控制過(guò)程詳解(分支和循環(huán)語(yǔ)句)

    在一個(gè)程序執(zhí)行的過(guò)程中各條語(yǔ)句的執(zhí)行順序?qū)Τ绦虻慕Y(jié)果是有直接影響的,這篇文章主要給大家介紹了關(guān)于JAVASE精密邏輯控制(分支和循環(huán)語(yǔ)句)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • Java File類(lèi)常用方法與文件過(guò)濾器詳解

    Java File類(lèi)常用方法與文件過(guò)濾器詳解

    Java File類(lèi)以抽象的方式代表文件名和目錄路徑名。該類(lèi)主要用于文件和目錄的創(chuàng)建、文件的查找和文件的刪除等。File對(duì)象代表磁盤(pán)中實(shí)際存在的文件和目錄。本篇文章我們來(lái)講解File類(lèi)的常用方法與文件過(guò)濾器
    2022-04-04
  • 一篇文章教帶你了解Java Spring之自動(dòng)裝配

    一篇文章教帶你了解Java Spring之自動(dòng)裝配

    今天小編就為大家分享一篇關(guān)于Spring中的自動(dòng)裝配,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2021-09-09
  • 一分鐘了解Java中List集合與set集合的多種遍歷方式

    一分鐘了解Java中List集合與set集合的多種遍歷方式

    這篇文章主要介紹了一分鐘了解Java中List集合與set集合的多種遍歷方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • DolphinScheduler容錯(cuò)源碼分析之Worker

    DolphinScheduler容錯(cuò)源碼分析之Worker

    這篇文章主要為大家介紹了DolphinScheduler容錯(cuò)源碼分析之Worker,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Spring+SpringMVC+MyBatis整合實(shí)戰(zhàn)(SSM框架)

    Spring+SpringMVC+MyBatis整合實(shí)戰(zhàn)(SSM框架)

    框架整合難不難?難!東西多,配置文件復(fù)雜不好記憶,本文就來(lái)介紹一下Spring+SpringMVC+MyBatis整合實(shí)戰(zhàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-08-08
  • java中匿名內(nèi)部類(lèi)詳解

    java中匿名內(nèi)部類(lèi)詳解

    這篇文章主要對(duì)java中的匿名內(nèi)部類(lèi)的詳細(xì)總結(jié),需要的朋友可以參考下
    2017-04-04

最新評(píng)論