国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

淺析Spring的JdbcTemplate方法

2019-11-26 13:10:24
字體:
供稿:網(wǎng)友

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

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

本篇主要介紹Spring如何使用JdbcTemplate來訪問關(guān)系型數(shù)據(jù)庫。

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

  • 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

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

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

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

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

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)行一次檢測需要關(guān)閉的空閑連接 -->    <property name="timeBetweenEvictionRunsMillis" value="60000" />    <!-- 配置一個(gè)連接在池中最小的生存時(shí)間 -->    <property name="minEvictableIdleTimeMillis" value="300000" />    <property name="testWhileIdle" value="true" />    <!-- 這里建議配置為TRUE,防止取到的連接不可用 -->    <property name="testOnBorrow" value="true" />    <property name="testOnReturn" value="false" />    <!-- 打開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í)體類對象,

/** * @author BeautifulSoup * 創(chuàng)建實(shí)體類對象 */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)行持久層的開發(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;    }  }}

單元測試,

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 古蔺县| 吴堡县| 开鲁县| 许昌市| 台南县| 兰考县| 金寨县| 扎囊县| 平安县| 获嘉县| 茶陵县| 那曲县| 历史| 伊川县| 建宁县| 新郑市| 保定市| 丹凤县| 政和县| 裕民县| 长乐市| 临洮县| 旌德县| 潍坊市| 兴义市| 宜兴市| 南岸区| 葵青区| 黄大仙区| 包头市| 巴林左旗| 宜章县| 长顺县| 娄底市| 丰镇市| 襄城县| 庆云县| 乌恰县| 通辽市| 娱乐| 陇南市|