https://www.cnblogs.com/tuhooo/p/6491913.html
一、Spring对不同的持久化支持:
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,
可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
而多的这个template,就是模板,是Spring框架为我们提供的.
所以JDBCTemplate就是Spring对JDBC的封装,通俗点说就是Spring对jdbc的封装的模板
Spring为各种支持的持久化技术,都提供了简单操作的模板和回调
ORM持久化技术 | 模板类 |
JDBC | org.springframework.jdbc.core.JdbcTemplate |
Hibernate5.0 | org.springframework.orm.hibernate5.HibernateTemplate |
IBatis(MyBatis) | org.springframework.orm.ibatis.SqlMapClientTemplate |
JPA | org.springfrmaework.orm.jpa.JpaTemplate |
其实Spring的JDBCTemplate有点像DBUtils,但是有时候还没有DBUitls好用。这里来学习一下使用Spring的JDBCTemplate来玩一下CRUD。
二、使用JdbcTemplate需要的jar包
在这里使用Spring的JDBCTemplate的时候先要把轮子拿过来:
除此之外,在Java中操作数据库怎么能不要对应的驱动包呢:
三、JdbcTemplate使用的基本步骤
然后再看看Spring的JDBCTemplate的使用大体步骤,这里有一个小例子:
1 package com.spring.test; 2 3 import org.junit.Test; 4 import org.springframework.jdbc.core.JdbcTemplate; 5 import org.springframework.jdbc.datasource.DriverManagerDataSource; 6 7 public class TestJDBCTemplate { 8 9 @Test 10 public void test1() { 11 12 // JDBC模板依赖于连接池来获得数据的连接,所以必须先要构造连接池 13 DriverManagerDataSource dataSource = new DriverManagerDataSource(); 14 dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 15 dataSource.setUrl("jdbc:mysql://localhost:3306/spring"); 16 dataSource.setUsername("root"); 17 dataSource.setPassword("123456"); 18 19 // 创建JDBC模板 20 JdbcTemplate jdbcTemplate = new JdbcTemplate(); 21 // 这里也可以使用构造方法 22 jdbcTemplate.setDataSource(dataSource); 23 24 // sql语句 25 String sql = "select count(*) from user"; 26 Long num = (long) jdbcTemplate.queryForObject(sql, Long.class); 27 28 System.out.println(num); 29 30 } 31 32 }
四、进一步的考虑
其实这个例子本身没有什么的,只是演示了一下,其实在学Spring之后,感觉应该形成一种习惯,在new对象的时候我要想到IOC,在使用Set方法的时候,我要想到DI,再去要方便面(哦,不,是切面),我们应该想到用AOP的。这里可以在Spring中配置如下的引用链:
1. 我要有DataSource,DataSource的属性可以通过注入数据库的一些配置属性添加
2. 我要有JdbcTemplate,而Template依赖与DataSource,我要以ref的方式为我的JdbcTemplate注入引用
3. 有了JdbcTemplate之后,我要有Dao,此时我应该在Dao添加一个JdbcTemplate的成员,然后以ref的方式将JdbcTemplate引入到Dao中
4. 我在Action或者是Servlet中都会调用的是Serivce,所以,我在Serivce中要添加一个Dao作为成员,然后由ref在注入Dao到Service中
DataSource --> JdbcTemplate --> Dao --> Service --> Action/Servlet
"-->"表示将左边的对象注入到右边的对象当中
配置文件如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:aop="http://www.springframework.org/schema/aop" 6 xmlns:tx="http://www.springframework.org/schema/tx" 7 xsi:schemaLocation="http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd 11 http://www.springframework.org/schema/aop 12 http://www.springframework.org/schema/aop/spring-aop.xsd 13 http://www.springframework.org/schema/tx 14 http://www.springframework.org/schema/tx/spring-tx.xsd"> 15 16 <!-- IOC和DI的注解扫描 --> 17 <context:component-scan base-package="com.spring" ></context:component-scan> 18 19 <!-- 打开AOP的注解 --> 20 <!-- 这里用的是中间的横线而不是下划线 --> 21 <aop:aspectj-autoproxy></aop:aspectj-autoproxy> 22 23 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" > 24 <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_03"></property> 25 <property name="driverClass" value="com.mysql.jdbc.Driver"></property> 26 <property name="user" value="root"></property> 27 <property name="password" value="123456"></property> 28 </bean> 29 30 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 31 <property name="dataSource" ref="dataSource"></property> 32 </bean> 33 34 <bean id="userDao" class="com.spring.dao.UserDao"> 35 <property name="jdbcTemplate" ref="jdbcTemplate"></property> 36 </bean> 37 38 <bean id="userService" class="com.spring.service.UserService"> 39 <property name="userDao" ref="userDao"></property> 40 </bean> 41 42 </beans>
其中dataSource和jdbcTemplate都是直接配置的,不用写啥。
然后是UserDao.java
1 package com.spring.dao; 2 3 import org.springframework.jdbc.core.JdbcTemplate; 4 5 import com.spring.domain.User; 6 7 public class UserDao { 8 9 private JdbcTemplate jdbcTemplate; 10 11 public JdbcTemplate getJdbcTemplate() { 12 return jdbcTemplate; 13 } 14 15 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 16 this.jdbcTemplate = jdbcTemplate; 17 } 18 19 public void addUser(User user) { 20 21 String sql = "insert into user (username, password) values (?, ?)"; 22 23 jdbcTemplate.update(sql, user.getUsername(), user.getPassword()); 24 25 } 26 27 }
UserSerice.java
1 package com.spring.service; 2 3 import com.spring.dao.UserDao; 4 import com.spring.domain.User; 5 6 public class UserService { 7 8 // 加入userDao作为成员变变量 9 private UserDao userDao; 10 11 // 注意这里要增加get和set方法 12 public UserDao getUserDao() { 13 return userDao; 14 } 15 16 public void setUserDao(UserDao userDao) { 17 this.userDao = userDao; 18 } 19 20 public void addUser(User user) { 21 userDao.addUser(user); 22 } 23 }
上面的文件都是用的配置文件来获得对象的,而没有使用注解。(对工程而言,不用每个dao都在spring-servlet中配置,而是 在dao文件中通过autowired自动装配来获取 配置文件中国的jdbctemplate)
ORM持久化技术 | 模板类 |
JDBC | org.springframework.jdbc.core.JdbcTemplate |
Hibernate5.0 | org.springframework.orm.hibernate5.HibernateTemplate |
IBatis(MyBatis) | org.springframework.orm.ibatis.SqlMapClientTemplate |
org.springfrmaework.orm.jpa.JpaTemplate |