【Spring框架】Spring的JdbcTemplate操作

Spring的JdbcTemplate操作

jdbcTemplate是Spring提供的操作数据库的操作,是基于JDBC实现的。

在之前的Javaweb学习中,学习了手动封装JdbcTemplate,其好处是通过(sql语句+参数)模板化了编程。而真正的JdbcTemplate类,是Spring框架为我们写好的。它是 Spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。除了JdbcTemplate,spring 框架还为我们提供了很多的操作模板类。

  • 操作关系型数据的:JdbcTemplate和HibernateTemplate。
  • 操作 nosql 数据库的:RedisTemplate。
  • 操作消息队列的:JmsTemplate。

Spring框架的JdbcTemplate在spring-jdbc的jar包中,,除了要导入这个 jar 包外,还需要导入一个 spring-tx 的jar包(它是和事务相关的)。当然连接池的jar包也不能忘记,这里使用的是c3p0

JDBC相关的jar包


<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <version>5.1.39version>
dependency>
<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-jdbcartifactId>
    <version>4.0.6.RELEASEversion>
dependency>
<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-txartifactId>
    <version>4.0.6.RELEASEversion>
dependency>
<dependency>
  <groupId>com.mchangegroupId>
  <artifactId>c3p0artifactId>
  <version>0.9.2.1version>
dependency>

JDBCTemplate的使用

1、数据库映射对象
/**
 * 数据库映射对象
 */
public class User {
    private Long id;
    private String userName;
    private long sex;
    private String address;

    //省略get/set方法
}
2、查询结果映射
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * JDBC完成查询的结果
 * 需要自定义实现一个RowMapper的实现类
 * 该类存在目的就是完成数据库到Java对象的映射
 */
public class UserMapper implements RowMapper<User1> {

    @Override
    public User mapRow(ResultSet resultSet, int i) throws SQLException {
        User user = new User();
        user.setId(resultSet.getLong("id"));
        user.setUserName(resultSet.getString("username"));
        user.setSex(resultSet.getLong("sex"));
        user.setAddress(resultSet.getString("address"));
        return user;
    }
}
3、JDBC模板的使用
import org.springframework.jdbc.core.JdbcTemplate;
import com.mchange.v2.c3p0.DriverManagerDataSource;

import java.util.List;

/**
 * JDBC模板使用的介绍
 */
public class JDBCTemplateTest {
    public static void main(String[] args) {
        //创建对象,设置数据源信息
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUser("root");
        dataSource.setPassword("123456");

        //创建jdbcTemplate对象,设置数据源
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        //调用jdbcTemplateTemplate提供的方法
        //更新操作
        String updateSql ="update user set sex =? where id = ?";
//        jdbcTemplate.update(updateSql,new Object[]{1,1});

        //删除操作
        String deleteSql="delete from user where id = ?";
//        jdbcTemplate.update(deleteSql,new Object[]{35});

        //jdbcTemplate 对数据的变更(update\insert \delete)都可以通过update方法进行处理


        //查询单个对象  queryForObject
        String selectSql1="select * from user where id=? ";
        //  T queryForObject(String sql, Object[] value, RowMapper var3) throws DataAccessException;

        User user = jdbcTemplate.queryForObject(selectSql1, new Object[]{1}, new UserMapper());
//        System.out.println(user);

        //查询多个对象 query
        String selectSql2 = "select * from user where sex=?";
        List<User> list = jdbcTemplate.query(selectSql2, new Object[]{1}, new UserMapper());
        System.out.println(list);
    }
}

在这里插入图片描述

Spring结合连接池(C3p0)和jdbcTemplate使用

  • 场景:操作test库中的user表,通过ID查询用户信息。
1、dao层接口
import org.springframework.jdbc.core.JdbcTemplate;

public class UserDao {
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public User getUserById(Long id){
        //查询SQL
        String sql = "select * from user where id = ?";
        User user = jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserMapper());
        //使用jdbcTemplate模板来获取数据库数据
        return user;
    }
}
2、配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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/aop
   http://www.springframework.org/schema/aop/spring-aop.xsd">


    
    <bean id="dataSource" class="com.mchange.v2.c3p0.DriverManagerDataSource">
        
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="user" value="root"/>
        <property name="password" value="123456"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
    bean>

    
    <bean id="jdbcTenplate" class="org.springframework.jdbc.core.JdbcTemplate">
        
        <property name="dataSource" ref="dataSource"/>
    bean>

    
    <bean id="userDao" class="com.tulun.dao.UserDao">
        
        <property name="jdbcTemplate" ref="jdbcTenplate"/>
    bean>

beans>
3、代码测试
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * JDBC模板使用的介绍
 */
public class JDBCTemplateTest {
    public static void main(String[] args) {
        //获取IOC的容器
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器来获取当前的对象(通过无参构造来实例对象方法)

        //获取User对象
        //验证前置通知
        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        User user = userDao.getUserById(1L);
        System.out.println(user);
    }
}

在这里插入图片描述

你可能感兴趣的:(#,Spring框架)