Jdbc模板的全称是JdbcTemplate
1、导入spring-jdbc和spring-tx坐标
2、创建数据库和实体
3、创建JdbcTemplate对象
4、执行数据库操作
第一步: 在pom.xml里面写入如下:
<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>
第二步: 在JdbcTemplateTest类里面写入如下:
x
//测试JdbcTemplate(简称jdbc模板)的开发步骤
public void test1() throws PropertyVetoException {
//创建数据源对象
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/bilibili");
dataSource.setUser("root");
dataSource.setPassword("228675");
//创建jdbc模板对象
JdbcTemplate jdbcTemplate = new JdbcTemplate();
//把数据源对象写在下面的括号里,作用是告诉jdbc,要操作的数据库在哪
jdbcTemplate.setDataSource(dataSource);
//执行数据库的更新SQL语句。并在终端输出一下受影响行数
int row = jdbcTemplate.update("insert into jdbc_account values(?,?)", "张三", 5000);
System.out.println(row);//直接在这里右键运行,控制台输出1,说明上面那行的SQL语句执行成功,此时我们可以去数据库看看
}
我们可以将JdbcTemplate的创建权交给Spring,将数据源DataSource的创建权也交给Spring,在Spring容器内部将数据源DataSource注 入到JdbcTemplate模板对象中。
也就是我们每次使用都要在类(JdbcTemplateTest类)里面写 JdbcTemplate jdbcTemplate = new JdbcTemplate(); 那可以不手动写吗,交由Spring帮我们创建JdbcTemplate(也叫Jdbc模板)对象
具体操作如下:
第一步: 在resources目录下新建Spring Config,名字为applicationContext.xml,在里面写入如下
<!--配置jdbc的数据源对象-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!--注入四个参数-->
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/bilibili"/>
<property name="user" value="root"/>
<property name="password" value="228675"/>
</bean>
<!--配置jdbcTemplate(也叫jdbc模板)对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入数据源-->
<property name="dataSource" ref="dataSource"/>
</bean>
第二步: 测试。在JdbcTemplateTest类写入如下
//测试JdbcTemplate(简称jdbc模板)的开发步骤
public void test2() throws PropertyVetoException {
//应用上下文API获取applicationContext.xml的配置
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = app.getBean(JdbcTemplate.class);
//执行数据库的更新SQL语句。并在终端输出一下受影响行数
int row = jdbcTemplate.update("insert into jdbc_account values(?,?)", "李四", 6000);
System.out.println(row);//直接在这里右键运行,控制台输出1,说明上面那行的SQL语句执行成功,此时我们可以去数据库看看
}
由于在application.xml里面写jdbc数据源对象的参数不利于后期维护,我们需要把参数放到一个jdbc.properties文件里面
具体操作如下:
第一步: 在resources目录下新建File,名字为jdbc.properties,在里面写入如下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/bilibili
jdbc.username=root
jdbc.password=228675
第二步: 在applicationContext.xml里面写入如下
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
<!--配置jdbc的数据源对象_解耦优化_抽取jdbc.properties-->
<!--先在applicationContext.xml的最上面写一个xmlns命名空间和xsi路径。然后加载外部的jdbc.properties文件,如下-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--提取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(也叫jdbc模板)对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入数据源-->
<property name="dataSource" ref="dataSource"/>
</bean>
第三步: 测试。在JdbcTemplateTest类写入如下
public void test3() throws PropertyVetoException {
//应用上下文API获取applicationContext.xml的配置
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = app.getBean(JdbcTemplate.class);
//执行数据库的更新SQL语句。并在终端输出一下受影响行数
int row = jdbcTemplate.update("insert into jdbc_account values(?,?)", "王五", 9000);
System.out.println(row);//直接在这里右键运行,控制台输出1,说明上面那行的SQL语句执行成功,此时我们可以去数据库看看
}
在com.huanf.test目录新建一个JdbcTemplateCRUDTest类,用于测试。里面写入如下全部:
xxxxxxxxxx
package com.huanf.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
SpringJUnit4ClassRunner.class) //指定由SpringJUnit4ClassRunner来运行JdbcTemplateCRUDTest测试类 (
"classpath:applicationContext.xml") //指定用哪个配置文件 (
public class JdbcTemplateCRUDTest {
/*@Autowired注释是Spring框架中提供的一种自动装配bean的依赖关系的注释,可以自动地将一个bean属性设置为一个可以在配置文件
中定义的bean的实例。它可以节省开发人员不必写一些繁琐的get/set方法的时间*/
private JdbcTemplate jdbcTemplate;
//测试jdbc模板的增删改。执行哪个就点击哪个旁边的小绿三角形。自行去数据库看一下数据变化
public void testInsert(){
//增
jdbcTemplate.update("insert into jdbc_account values(?,?)", "周瑜", 5000);
jdbcTemplate.update("insert into jdbc_account values(?,?)", "李白", 8000);
}
public void testUpdate(){
//改
jdbcTemplate.update("update jdbc_account set money = ? where name = ?",7000,"周瑜");
}
public void testDelete(){
//删
jdbcTemplate.update("delete from jdbc_account where name=?","李白");
}
}
在JdbcTemplateCRUDTest类里面写入如下:
xxxxxxxxxx
public void testQueryAll(){
//查询全部数据
List<Account> accountList = jdbcTemplate.query("select * from jdbc_account", new BeanPropertyRowMapper<Account>(Account.class));
System.out.println(accountList);
//终端输出[Account{name='周瑜', money=7000.0}, Account{name='张三', money=5000.0}, Account{name='李四', money=6000.0}, Account{name='王五', money=9000.0}]
}
public void testQueryOne(){
//查询单个数据
Account account = jdbcTemplate.queryForObject("select * from jdbc_account where name = ?", new BeanPropertyRowMapper<Account>(Account.class), "周瑜");
System.out.println(account);
//终端输出Account{name='周瑜', money=7000.0}
}
public void testQueryCount(){
//聚合查询。例如查询表中数据的总条数。下面那行的Long是类型
Long count = jdbcTemplate.queryForObject("select count(*) from jdbc_account", Long.class);
System.out.println(count);
//例如终端输出4,表示目前该表中有4条数据
}