1.04 Spring JdbcTemplate类

1.04Spring JdbcTemplate类

什么是Spring JdbcTemplate类

Spring针对数据库开发封装的JDBC

作用:

支持对数据库的所有操作

Spring JdbcTemplate类配置模板

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http:/www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd">
   <beans>
  <!-- 配置数据源 -->
  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
           <!-- 数据库驱动 -->
           <property name="驱动名称" value="com.mysql.jdbc.Driver" />
           <!-- 连接数据库的url -->
           <property name="url" value="地址" />
           <!-- 连接数据库的用户名 -->
           <property name="username" value="用户名" />
           <!-- 连接数据库的密码 -->
           <property name="password" value="密码" />
  </bean>
       <!-- 配置JDBC模板 -->
       <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
           <!-- 默认必须使用数据源 -->
           <property name="dataSource" ref="dataSource" />
       </bean>
       <!-- 配置注入类 -->
       <bean id="xxx" class="xxx">
           <property name="jdbcTemplate" ref="jdbcTemplate" />
       </bean>
  ...
   </beans>

对上述配置的解释:

上诉配置定义了三个Bean

  • dataSource--->对应DriverManagerDataSource,对数据源进行配置

  • jdbcTemplate--->对应JdbcTemplate定义JdbcTemplate相关配置

  • 需要注入的Bean

dataSource定义的四个属性
属性名说明
driverClassName 所使用的驱动名称,对应驱动 JAR 包中的 Driver 类
url 数据源所在地址
username 访问数据库的用户名
password 访问数据库的密码
JdbcTemplate定义的操作数据库的方法

注意:

定义JdbcTemplate时,需要将dataSource注入到JdbcTemplate

在其他的类中要使用JdbcTemplate也需要将JdbcTemplate注入到使用类中(通常注入 dao 类中)

JdbcTemplate类定义的方法:

方法说明
public int update(String sql) 用于执行新增、修改、删除等语句 args 表示需要传入到 query 中的参数
public int update(String sql,Object... args) 用于执行新增、修改、删除等语句 args 表示需要传入到 query 中的参数
public void execute(String sql) 可以执行任意 SQL,一般用于执行 DDL 语句 action 表示执行完 SQL 语句后,要调用的函数
public T execute(String sql, PreparedStatementCallback action) 可以执行任意 SQL,一般用于执行 DDL 语句 action 表示执行完 SQL 语句后,要调用的函数
public T query(String sql, ResultSetExtractor rse) 用于执行查询语句 以 ResultSetExtractor 作为参数的 query 方法返回值为 Object,使用查询结果需要对其进行强制转型 以 RowMapper 作为参数的 query 方法返回值为 List
public List query(String sql, RowMapper rse) 用于执行查询语句 以 ResultSetExtractor 作为参数的 query 方法返回值为 Object,使用查询结果需要对其进行强制转型 以 RowMapper 作为参数的 query 方法返回值为 List

JdbcTemplate举例:

实现DAO层的方法

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

public class UserDaoImpl implements UserDao{
   private JdbcTemplate jdbcTemplate;
   private UserDao userDao;
   
       public JdbcTemplate getJdbcTemplate() {
       return jdbcTemplate;
  }
   public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
       this.jdbcTemplate = jdbcTemplate;
  }
   public UserDao getUserDao() {
       return userDao;
  }
   public void setUserDao(UserDao userDao) {
       this.userDao = userDao;
  }
   public void setDataSource(DataSource datasource) {
       this.jdbcTemplate = new JdbcTemplate(datasource);
  }
   
   /* 重写接口当中的方法 */
   @Override
   public void createUserTable() {
       this.jdbcTemplate.execute("CREATE TABLE `user` (\r\n" + " `id` int(11) NOT NULL AUTO_INCREMENT,\r\n"
               + " `name` varchar(50) DEFAULT NULL,\r\n" + " `age` int(11) DEFAULT NULL,\r\n"
               + " PRIMARY KEY (`id`)\r\n" + ") ENGINE=MyISAM DEFAULT CHARSET=utf8;");
  }
   
   @Override
   public void saveUser(User user) {
       this.jdbcTemplate.update("INSERT INTO USER(NAME,age) VALUES (?,?)", user.getName(), user.getAge());
  }
   
   @Override
   public List<User> listUser() {
               List<User> users = this.jdbcTemplate.query("SELECT NAME,age FROM USER", new RowMapper<User>() {
           public User mapRow(ResultSet rs, int rowNum) throws SQLException {
               User user = new User();
               user.setName(rs.getString("name"));
               user.setAge(rs.getInt("age"));
               return user;
          }
      });
       return users;
  }
   /* 构造器当中传方法,有点像闭包 */
}

配置Bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
   
       <!-- 配置数据源 -->
   <bean id="dataSource"
       class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <!--数据库驱动 -->
       <property name="driverClassName"
           value="com.mysql.jdbc.Driver" />
       <!--连接数据库的url -->
       <property name="url" value="jdbc:mysql://localhost/test" />
       <!--连接数据库的用户名 -->
       <property name="username" value="root" />
       <!--连接数据库的密码 -->
       <property name="password" value="root" />
   </bean>
   <!--配置JDBC模板 -->
   <bean id="jdbcTemplate"
       class="org.springframework.jdbc.core.JdbcTemplate">
       <!--默认必须使用数据源 -->
       <property name="dataSource" ref="dataSource" />
   </bean>
   <bean id="userdao" class="com.practice.UserDaoImpl">
       <property name="jdbcTemplate" ref="jdbcTemplate" />
   </bean>
</beans>

 

posted @ 2022-01-18 19:06  俊king  阅读(65)  评论(0)    收藏  举报