【java框架】Spring(4) -- Spring JdbcTemplate基本使用

1.Spring JdbcTemplate基本使用

1.1.JdbcTemplate概述

Spring JdbcTemplate是spring框架中提供的一个基于原始Jdbc API对象进行封装后的工具集合包,优点是简单易用,基于maven只需要导入少量的pom依赖坐标,基于sql做极简的代码操作,极大的简化了执行CRUD的繁琐公共流程代码,是优秀的工程实践。

1.2.JdbcTemplate开发步骤

使用JdbcTemplate进行CURD操作主要有以下四个步骤:

①导入spring-jdbc和spring-tx坐标;

②创建数据库表和实体;

③创建jdbcTemplate对象;

④执行数据库操作

导入jdbc坐标与tx坐标maven依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.0.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.0.5.RELEASE</version>
</dependency>

创建一个数据库表与对应的实体类如下:

Account账户类:

/**
 *  用户账户实体类  省略getter/setter
 */
public class Account {
    private String name;

    private double money;
}

创建JdbcTemplate对象并执行数据库操作:

//1.创建数据源对象
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/springjdbc_0210");
dataSource.setUser("root");
dataSource.setPassword("admin");
//2.创建JdbcTemplate对象
JdbcTemplate template = new JdbcTemplate();
//3.设置数据源给JdbcTemplate
template.setDataSource(dataSource);
//4.执行数据库操作
template.update("insert into account(name, money) values ('lihua', 7320.5)");

 

1.3.Spring管理JdbcTemplate对象进行CRUD

一般项目中我们使用Spring来进行JdbcTemplate对象的注入,由Spring来管理JdbcTemplate,并且在创建数据源连接时我们也一般使用jdbc.properties配置来加载数据库常用配置。具体操作如下:

①首先在applicationContext.xml中配置加载jdbc.properties文件,并配置jdbcTemplate模板Bean对象;

 applicationContext.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       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
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
    <!--加载jdbc.properties文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--数据源对象-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
    <!--jdbc模板对象-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
</beans>

jdbc.properties配置如下:

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springjdbc_0210
jdbc.username=root
jdbc.password=admin

②创建测试类测试JdbcTemplate对象是否注入成功:

public class JdbcTemplateTest {
    //测试Spring产生jdbcTemplate对象
    @Test
    public void createTemplateTest(){
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        JdbcTemplate template = app.getBean(JdbcTemplate.class);
        System.out.println(template);
    }
}

结果打印如下,表示Spring容器中已初始化bean:

③使用Spring JdbcTemplate进行数据库实体增删查改一些列操作:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringJdbcTemplateTest {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    public void queryCountTest(){
        Integer count = jdbcTemplate.queryForObject("select count(*) from account",
                Integer.class);
        System.out.println(count);
    }

    @Test
    public void queryOneTest(){
        Account query = jdbcTemplate.queryForObject("select * from account where name = ?",
                new BeanPropertyRowMapper<Account>(Account.class), "lihua");
        System.out.println(query);
    }

    @Test
    public void queryAllTest(){
        List<Account> accountList = jdbcTemplate.query("select * from account", new BeanPropertyRowMapper<Account>(Account.class));
        System.out.println(accountList);
    }

    @Test
    public void updateTest(){
        int update = jdbcTemplate.update("update account set money = ? where name =?", 300, "lihua");
        System.out.println(update);
    }

    @Test
    public void insertTest(){
        int insert = jdbcTemplate.update("insert into account(name, money) values ('lisi', 8700)");
        System.out.println(insert);
    }

    @Test
    public void deleteTest(){
        int delete = jdbcTemplate.update("delete from account where id = ?", 4);
        System.out.println(delete);
    }
}
原文地址:https://www.cnblogs.com/yif0118/p/14399367.html