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); } }