1 JdbcTemplate概述
它是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作 模板类。例如:操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列的JmsTemplate等等。
它是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作 模板类。例如:操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列的JmsTemplate等等。
2 JdbcTemplate开发步骤
① 导入spring-jdbc和spring-tx坐标
<!--导入spring的jdbc坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<!--导入spring的tx坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
② 创建数据库表和实体
CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`age` int(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
public class User {
private int id;
private String name;
private int age;
//省略get set方法
}
③ 创建JdbcTemplate对象
我们可以将JdbcTemplate的创建权交给Spring,将数据源DataSource的创建权也交给Spring,在Spring容器内部将数据源DataSource注入到JdbcTemplate模版对象中,配置如下:
<!-- 加载配置文件-->
<context:property-placeholder location="classpath:jdbc.properties" />
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 注入JdbcTemplate,并把数据库配置信息加载到类JdbcTemplate 中-->
<bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg name="dataSource" ref="dataSource"></constructor-arg>
</bean>
④ 执行数据库操作
@Test
public void jdbcTemplateTest(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// JdbcTemplate jdbcTemplate = context.getBean(JdbcTemplate.class);
JdbcTemplate jdbcTemplate = (JdbcTemplate)context.getBean("jdbcTemplate");
String sql = "INSERT INTO user ( name, age) VALUES ( ?, ?);";
System.out.println(jdbcTemplate.update(sql, "张三", 15));
}
3crud增删查改操作
增加已在上文
修改
@Test
public void jdbcTemplateUpdateTest(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// JdbcTemplate jdbcTemplate = context.getBean(JdbcTemplate.class);
JdbcTemplate jdbcTemplate = (JdbcTemplate)context.getBean("jdbcTemplate");
String sql = "update user set name=? where id =?;";
System.out.println(jdbcTemplate.update(sql, "lisi", 1));
}
删除
@Test
public void jdbcTemplateUpdateTest(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// JdbcTemplate jdbcTemplate = context.getBean(JdbcTemplate.class);
JdbcTemplate jdbcTemplate = (JdbcTemplate)context.getBean("jdbcTemplate");
String sql = "delete from user where id =?;";
System.out.println(jdbcTemplate.update(sql, 1));
}
查询
查询的API还是比较丰富的,具体的情况还需根据业务场景使用
演示几种常用的
@Test
public void jdbcTemplateQueryTest(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// JdbcTemplate jdbcTemplate = context.getBean(JdbcTemplate.class);
JdbcTemplate jdbcTemplate = (JdbcTemplate)context.getBean("jdbcTemplate");
String sql = "select * from user where id=?";
System.out.println(jdbcTemplate.queryForMap(sql,2));//一条数据
String sqls = "select * from user ";
System.out.println(jdbcTemplate.queryForList(sqls));//多条数据
//采用固定的Pojo类接收
String sqlCount = "select count(*) from user";
Long count = jdbcTemplate.queryForObject(sqlCount, Long.class);
System.out.println(count);
String queryUser = "select * from user where id=?";
User user = new User();//没有通过Spring容器注入
user = jdbcTemplate.queryForObject(queryUser, new BeanPropertyRowMapper<>(user.getClass()), 2);
System.out.println(user);
}