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.Driverjdbc.url=jdbc:mysql://localhost:3306/bilibilijdbc.username=rootjdbc.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类,用于测试。里面写入如下全部:
xxxxxxxxxxpackage 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类里面写入如下:
xxxxxxxxxxpublic 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条数据}