JdbcTemplate作用?
为了避免直接使用JDBC而带来的复杂且冗长的代码,
Spring提供了一个强有力的模板类--JdbcTemplate来简化JDBC操作。并且,
数据源DataSource对象与模板JdbcTemplate对象均可通过Bean的形式定义在配置文件中,充分发挥了依赖注入的威力。
案例:检索所有图书
1.导入jar包
1.1spring jdbc jar包 spring内置的配置数据源方式
spring-jdbc-4.2.0.RELEASE.jar
idea maven
<!--spring JDBC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
1.2 spring 事务jar包
spring-tx-4.2.0.RELEASE.jar
注意事项:如果是引入物理jar包,必须保证依赖tx.jar也被引入。注意数据库驱动jar包
2.分层
实体层开始 public class Book { private Integer bookid; private String bookname; private Integer bookprice; } Dao层 public interface IBookDAO { public List<Book> findAll(); } DAO的实现 继承JdbcDaoSupport public class BookDAOImpl extends JdbcDaoSupport implements IBookDAO { public List<Book> findAll() { String sql="select * from book"; List<Book> list = this.getJdbcTemplate().query(sql, new RowMapper<Book>() { /** * @param rs 读取器 * @param index 索引 ,第几条记录 * @return 单个对象 */ public Book mapRow(ResultSet rs, int index) throws SQLException { Book book = new Book(); book.setBookid(rs.getInt("bookid")); book.setBookname(rs.getString("bookname")); book.setBookprice(rs.getInt("bookprice")); return book; } }); return list; } }
Service接口 public interface IBookService { public List<Book> findAll(); } Service实现类 public class BookServiceImpl implements IBookService { //植入一个东西 ??? private IBookDAO dao; public List<Book> findAll() { return dao.findAll(); } public IBookDAO getDao() { return dao; } public void setDao(IBookDAO dao) { this.dao = dao; } }
接下来到了最核心的部分,配置文件
<!--1.数据源--> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!2.--配置一: 识别到jdbc.properties文件 两种方式 --> <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
//配置二 识别到jdbc.properties文件 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties"></property> </bean> <!--3.DAO--> <bean id="bookDAO" class="cn.happy.day21jdbctemplate.dao.BookDAOImpl"> <property name="dataSource" ref="dataSource"></property> </bean> <!--4.service id--> <bean id="bookService" class="cn.happy.day21jdbctemplate.service.BookServiceImpl"> <property name="dao" ref="bookDAO"></property> </bean>
测试类代码:
@Test //03.jdbcTemplate public void test03(){ ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext21jdbctemplate.xml"); IBookService service=(IBookService)context.getBean("bookService"); List<Book> list = service.findAll(); for (Book book:list) { System.out.println(book.getBookname());
3.其他三种配置数据源的方式
1)DBCP数据源配置
<!--数据源配置 DBCP-->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
xml配置:
<bean id="dataSources" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean>
2)C3P0数据源配置
<!--数据源配置 C3P0--> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency>
xml配置:
<bean id="dataSources" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"></property> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean>
3)druid 阿里巴巴
<!--druid--> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.29</version> </dependency>
xml配置:
<!--配置数据源四 druid 阿里巴巴--> <bean id="dataSources" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean>