spring-jdbc-reference

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的时候先要把轮子拿过来:

image

除此之外,在Java中操作数据库怎么能不要对应的驱动包呢:

image

三、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 }

复制代码

测试类:

复制代码
  1 package com.spring.test;
  2 
  3 import org.junit.Test;
  4 import org.springframework.context.ApplicationContext;
  5 import org.springframework.context.support.ClassPathXmlApplicationContext;
  6 import com.spring.domain.User;
  7 import com.spring.service.UserService;
  8 
  9 public class TestJDBCTemplate {
 10 
 11     @Test
 12     public void test2() {
 13 
 14         ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
 15         UserService userService = (UserService) ctx.getBean("userService");
 16 
 17         User user = new User();
 18         user.setPassword("111");
 19         user.setUsername("小王");
 20 
 21         userService.addUser(user);
 22 
 23     }
 24 
 25 }

上面的文件都是用的配置文件来获得对象的,而没有使用注解。(对工程而言,不用每个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


猜你喜欢

转载自blog.csdn.net/u011768625/article/details/80080795