淺析Spring的JdbcTemplate方法
spring對于數(shù)據(jù)訪問層提供了多種的模板技術(shù)。如果直接使用JDBC,那么可以選擇JdbcTemplate、如果使用的是對象關(guān)系映射框架,使用hibernate應(yīng)該使用HibernateTemplate模板,使用JPA則應(yīng)該使用JpaTemplate。
除此之外,Spring框架為每一項的持久層技術(shù)都提供了相應(yīng)的幫助類來簡化操作。對于Jdbc提供了JdbcDaoSupport類、對于Hibernate技術(shù)提供了HibernateDaoSupport類、對于MyBatis提供了SqlMapClientDaoSupport類。
本篇主要介紹Spring如何使用JdbcTemplate來訪問關(guān)系型數(shù)據(jù)庫。
1.首先引入使用Spring的jdbc模塊時的jar文件(maven項目可引入對應(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下引入兩個文件: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" /> <!-- 配置獲取連接等待超時的時間 --> <property name="maxWait" value="10000" /> <!-- 配置間隔多久才進(jìn)行一次檢測需要關(guān)閉的空閑連接 --> <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" /> <!-- 這里配置提交方式,默認(rèn)就是TRUE,可以不用配置 --> <property name="defaultAutoCommit" value="true" /> <!-- 驗證連接有效與否的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)建實體類對象,
/** * @author BeautifulSoup * 創(chuàng)建實體類對象 */ 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實戰(zhàn)"); book.setAuthor("Craig Walls"); bookDao.add(book); } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系
這篇文章主要介紹了Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系的相關(guān)資料,需要的朋友可以參考下2016-11-11JAVASE精密邏輯控制過程詳解(分支和循環(huán)語句)
在一個程序執(zhí)行的過程中各條語句的執(zhí)行順序?qū)Τ绦虻慕Y(jié)果是有直接影響的,這篇文章主要給大家介紹了關(guān)于JAVASE精密邏輯控制(分支和循環(huán)語句)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04Spring+SpringMVC+MyBatis整合實戰(zhàn)(SSM框架)
框架整合難不難?難!東西多,配置文件復(fù)雜不好記憶,本文就來介紹一下Spring+SpringMVC+MyBatis整合實戰(zhàn),具有一定的參考價值,感興趣的可以了解一下2021-08-08