浅析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内置的数据库连接池:
DriverManagerDataSourcedataSource=newDriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///springjdbc");
dataSource.setUsername("root");
dataSource.setPassword("1997WFY.....");
JdbcTemplatetemplate=newJdbcTemplate();
template.setDataSource(dataSource);
template.execute("createtablebook(idintprimarykeyauto_increment,namevarchar(20)notnull,authorvarchar(25))");
或者:
<!--XML配置Spring默认的连接池--> <beanid="driverManagerDataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <propertyname="driverClassName"value="com.mysql.jdbc.Driver"/> <propertyname="url"value="jdbc:mysql:///springjdbc"/> <propertyname="username"value="root"/> <propertyname="password"value="1997WFY....."/> </bean> <beanclass="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="driverManagerDataSource"/> </bean>
Java代码使用:
/**
*@authorBeautifulSoup
*首先使用Spring内置的连接池
*/
@ContextConfiguration("classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
publicclassSpringJdbcTest{
@Autowired
privateJdbcTemplatetemplate;
@Test
publicvoidtestDriverManagerDataSource(){
template.execute("createtablebook(idintprimarykeyauto_increment,namevarchar(20)notnull,authorvarchar(25))");
}
}
使用世界上性能最好的Druid连接池:
<!--配置Druid的连接池--> <beanid="druidDataSource"class="com.alibaba.druid.pool.DruidDataSource"> <propertyname="driverClassName"value="com.mysql.jdbc.Driver"/> <propertyname="url"value="jdbc:mysql:///springjdbc"/> <propertyname="username"value="root"/> <propertyname="password"value="1997WFY....."/> <!--设置初始的连接数目,最小的连接数,最大的连接数--> <propertyname="initialSize"value="1"/> <propertyname="minIdle"value="1"/> <propertyname="maxActive"value="8"/> <!--配置获取连接等待超时的时间--> <propertyname="maxWait"value="10000"/> <!--配置间隔多久才进行一次检测需要关闭的空闲连接--> <propertyname="timeBetweenEvictionRunsMillis"value="60000"/> <!--配置一个连接在池中最小的生存时间--> <propertyname="minEvictableIdleTimeMillis"value="300000"/> <propertyname="testWhileIdle"value="true"/> <!--这里建议配置为TRUE,防止取到的连接不可用--> <propertyname="testOnBorrow"value="true"/> <propertyname="testOnReturn"value="false"/> <!--打开PSCache,并且指定每个连接上PSCache的大小--> <propertyname="poolPreparedStatements"value="true"/> <propertyname="maxPoolPreparedStatementPerConnectionSize" value="20"/> <!--这里配置提交方式,默认就是TRUE,可以不用配置--> <propertyname="defaultAutoCommit"value="true"/> <!--验证连接有效与否的SQL,不同的数据配置不同--> <propertyname="validationQuery"value="select1"/> <propertyname="filters"value="stat"/> </bean> <beanclass="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="druidDataSource"/> </bean>
/**
*@authorBeautifulSoup
*首先使用Spring内置的连接池
*/
@ContextConfiguration("classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
publicclassSpringJdbcTest{
@Autowired
privateJdbcTemplatetemplate;
@Test
publicvoidtestSpringJdbc(){
template.execute("createtablebook(idintprimarykeyauto_increment,namevarchar(20)notnull,authorvarchar(25))");
}
}
4.使用得到的JdbcTemplate进行基本的增删改查:
首先创建实体类对象,
/**
*@authorBeautifulSoup
*创建实体类对象
*/
publicclassBook{
privateIntegerid;
privateStringname;
privateStringauthor;
publicIntegergetId(){
returnid;
}
publicvoidsetId(Integerid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetAuthor(){
returnauthor;
}
publicvoidsetAuthor(Stringauthor){
this.author=author;
}
@Override
publicStringtoString(){
return"Book[id="+id+",name="+name+",author="+author+"]";
}
}
在配置文件中配置bean:
<beanclass="com.fuyunwang.springjdbc.dao.BookDao"> <propertyname="jdbcTemplate"ref="jdbcTemplate"/> </bean>
Dao层进行持久层的开发:
/**
*@authorBeautifulSoup完成基本的增删改查
*/
publicclassBookDaoextendsJdbcDaoSupport{
publicvoidadd(Bookbook){
Stringsql="insertintobookvalues(?,?,?)";
getJdbcTemplate().update(sql,book.getId(),book.getName(),
book.getAuthor());
}
publicvoidupdate(Bookbook){
Stringsql="updatebooksetname=?,author=?whereid=?";
getJdbcTemplate().update(sql,book.getName(),book.getAuthor(),
book.getId());
}
publicvoiddelete(Bookbook){
Stringsql="deletefrombookwhereid=?";
getJdbcTemplate().update(sql,book.getId());
}
publicintfindCount(){
Stringsql="selectcount(*)frombook";
returngetJdbcTemplate().queryForInt(sql);
}
publicStringfindNameById(intid){
Stringsql="selectnamefrombookwhereid=?";
returngetJdbcTemplate().queryForObject(sql,String.class,id);
}
publicBookfindById(intid){
Stringsql="select*frombookwhereid=?";
returngetJdbcTemplate().queryForObject(sql,newBookMapper(),id);
}
publicList<Book>findAll(){
Stringsql="select*frombook";
returngetJdbcTemplate().query(sql,newBookMapper());
}
classBookMapperimplementsRowMapper<Book>{
publicBookmapRow(ResultSetrs,introwNum)throwsSQLException{
Bookbook=newBook();
book.setId(rs.getInt("id"));
book.setName(rs.getString("name"));
book.setAuthor(rs.getString("author"));
returnbook;
}
}
}
单元测试,
/**
*@authorBeautifulSoup
*首先使用Spring内置的连接池
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
publicclassSpringJdbcTest{
@Autowired
privateBookDaobookDao;
@Test
publicvoidjdbcTemplateAdd(){
Bookbook=newBook();
book.setId(1);
book.setName("SpringBoot实战");
book.setAuthor("CraigWalls");
bookDao.add(book);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。