导包:spring框架的包 和 连接数据库连接池的c3p0包 连接mysql数据库的包;

在src目录下建立jdbc.properties文件:存放连接数据库的属性值

jdbc.user=root
jdbc.password=lxn123
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///spring1  jdbc.initPoolSize=5 jdbc.maxPoolSize=10

在src目录下建立spring bean configuration file的xml文件:applicationContext.xml

    <!-- 基于注解的,导入标识的包,可以识别本包,或其自包,其只对带有指定注解的类,方法有效,不是对这个包中的所有类和方法有效 --><context:component-scan base-package="com.atguigu.spring.jdbc"></context:component-scan><!-- 导入资源文件 ,classpath.jdbc.properties 为类路径下的文件名为 jdbc.properties--><context:property-placeholder location="classpath:jdbc.properties"/><!-- 配置c3p0数据源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="user" value="${jdbc.user}"></property><property name="password" value="${jdbc.password}"></property><property name="driverClass" value="${jdbc.driverClass}"></property><property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property><property name="initialPoolSize" value="${jdbc.initPoolSize}"></property><property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property></bean><!-- 配置spring的JdbcTemplate --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean>

  <!-- 配置namedParameterJdbcTemplate,该对象可以使用具名参数, 其没有无参数的构造器, 所以必须为其构造器指定参数 -->
  <bean id="namedParameterJdbcTemplate"
    class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
    <constructor-arg ref="dataSource"></constructor-arg>
  </bean>

建立test类中可能用到的Employee,Department类,这里,只有属性,set,get,tostring等方法就。。。

Employee类的属性:

private Integer id;
private String lastName;
private String email; private Department department;

Department类的属性:

private Integer id;
private String name;

建立类:EmployeeDao,基于注解的查询方法

package com.atguigu.spring.jdbc;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Component; @Component//基本注解 public class EmployeeDao { @Autowired public JdbcTemplate jdbcTemplate; public Employee get(Integer id){ String sql="select id,last_name,email from tables where id=?"; RowMapper<Employee> rowMapper=new BeanPropertyRowMapper<>(Employee.class); Employee employee=jdbcTemplate.queryForObject(sql, rowMapper, id); return employee; } } 

建立一个JUtil Test测试类:JDBCTest

package com.atguigu.spring.jdbc;import static org.junit.Assert.*;import java.util.List; import java.sql.SQLException; import java.util.ArrayList; import javax.sql.DataSource; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.BeanPropertyRowMapper; //测试类 import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; public class JDBCTest { private ApplicationContext ctx=null; private JdbcTemplate jdbcTemplate; private EmployeeDao employeeDao; private NamedParameterJdbcTemplate namedParameterJdbcTemplate; { ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate"); employeeDao=ctx.getBean(EmployeeDao.class);     namedParameterJdbcTemplate=ctx.getBean(NamedParameterJdbcTemplate.class); }   

  @Test
  /**
   * 使用具名参数时, 可以使用 update(String sql, SqlParameterSource paramSource) 方法进行更新操作
  * 1. SQL 语句中的参数名和类的属性一致!即上边employee中属性一致
  * 2. 使用 SqlParameterSource 的 BeanPropertySqlParameterSource 实现类作为参数.
  */
  public void testNamedParameterJdbcTemplate2(){
    String sql="insert into tables(last_name,email,dept_id) values(:lastName,:email,:deptId)";
    Employee employee=new Employee();
    employee.setLastName("panpan");
    employee.setEmail("@panpan");
    employee.setDeptId(4);

    SqlParameterSource paramSource=new BeanPropertySqlParameterSource(employee);
    namedParameterJdbcTemplate.update(sql, paramSource);
  }

    

   //可以为参数起名字
   //好处: 若有多个参数, 则不用再去对应位置, 直接对应参数名, 便于维护
  //缺点: 较为麻烦.
  public void testNamedParameterJdbcTemplate(){
    String sql="insert into tables(last_name,email,dept_id) values(:la,:em,:de)";

    Map<String, Object> paramMap=new HashMap<String, Object>();

    paramMap.put("la", "fsd");
    paramMap.put("em", "@ji");
    paramMap.put("de", 3);

    namedParameterJdbcTemplate.update(sql, paramMap);
  }

@Test//对基于注解的方法测试public void testEmployeeDao(){ System.out.println(employeeDao.get(1)); } //获取单个列的值, 或做统计查询 //使用 queryForObject(String sql, Class<Long> requiredType) public void testQueryForObject2(){ String sql="select count(id) from tables"; long count=jdbcTemplate.queryForObject(sql, Long.class); System.out.println(count); } //查到实体类的集合 //注意调用的不是 queryForList 方法 public void testQueryForList(){ String sql="select id,last_name,email from tables where id>?"; RowMapper<Employee> rowMapper=new BeanPropertyRowMapper<>(Employee.class); List<Employee> employees=jdbcTemplate.query(sql, rowMapper, 1); System.out.println(employees); } /** * 从数据库中获取一条记录, 实际得到对应的一个对象 * 注意不是调用 queryForObject(String sql, Class<Employee> requiredType, Object... args) 方法! * 而需要调用 queryForObject(String sql, RowMapper<Employee> rowMapper, Object... args) * 1. 其中的 RowMapper 指定如何去映射结果集的行, 常用的实现类为 BeanPropertyRowMapper * 2. 使用 SQL 中列的别名完成列名和类的属性名的映射. 例如 last_name lastName * 3. 不支持级联属性. JdbcTemplate 到底是一个 JDBC 的小工具, 而不是 ORM 框架 */ public void testQueryForObject(){ String sql="select id,last_name lastName,email,dept_id as \"department.id\" from tables where id=?"; RowMapper<Employee> rowMapper=new BeanPropertyRowMapper<>(Employee.class); Employee employee=jdbcTemplate.queryForObject(sql, rowMapper,1); System.out.println(employee); } //执行批量更新: 批量的 INSERT, UPDATE, DELETE //最后一个参数是 Object[] 的 List 类型: 因为修改一条记录需要一个 Object 的数组, //那么多条不就需要多个 Object 的数组 public void testBatchUpdate(){ String sql="insert into tables(last_name,email,dept_id) values(?,?,?)"; List<Object[]> batchArgs=new ArrayList<>(); batchArgs.add(new Object[]{"AAA","testa",5}); batchArgs.add(new Object[]{"BBB","JIJK",6}); batchArgs.add(new Object[]{"CCC","panpN",3}); batchArgs.add(new Object[]{"DDD","jfids",2}); batchArgs.add(new Object[]{"EEE","tfsd",4}); jdbcTemplate.batchUpdate(sql,batchArgs); } //执行 INSERT, UPDATE, DELETE,只修改sql语句,即可 public void testUpdate(){ String sql="update tables set last_name=? where id=?"; jdbcTemplate.update(sql, "权", "1"); } //测试数据库连接池是否连接成功 public void testDataSource() throws SQLException { DataSource dataSource=ctx.getBean(DataSource.class); System.out.println(dataSource.getConnection()); } }

 

转载于:https://www.cnblogs.com/xijin-wu/p/6211889.html

Spring对 JDBC 的支持,JdbcTemplate类的使用相关推荐

  1. spring对JDBC的支持

    从来没使用过,感觉还是很有意思的,有工夫可以玩完,呵呵. spring提供了类org.springframework.jdbc.core.JdbcTemplate,它借助配置文件获取数据库信息,实现了 ...

  2. Spring对java模块化支持_Spring项目对JDBC的支持和基本使用

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...

  3. Spring使用JDBC访问MySQL数据库

    在Java应用程序开发中,使用JDBC访问MySQL数据库是Java开发者常用的技术.在Spring框架中,Spring对JDBC又进行了封装,简化了程序访问数据库的复杂度.本课主要讨论在Spring ...

  4. 【第七章】 对JDBC的支持 之 7.1 概述 ——跟我学spring3

    7.1  概述 7.1.1  JDBC回顾 传统应用程序开发中,进行JDBC编程是相当痛苦的,如下所示: java代码: Java代码   //cn.javass.spring.chapter7. T ...

  5. Spring Data JDBC、引用和聚合

    之前的博客文章中,我.描述了如何设置和使用 Spring Data JDBC.我还描述了使 Spring Data 原标题:Spring认证|Spring Data JDBC.引用和聚合 JDBC 比 ...

  6. Spring从菜鸟到高手(四)(上)使用JdbcTemplate类实现用户登陆验证、批量更新

    标签:Spring java JdbcTemplate Spring从菜鸟到高手 绝缘材料 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.ht ...

  7. Spring框架 JdbcTemplate类 @Junit单元测试,可以让方法独立执行 如:@Test

    1 package cn.zmh.PingCe; 2 3 import org.junit.Test; 4 import org.springframework.jdbc.core.BeanPrope ...

  8. Spring之JDBC模板jdbcTemplate

    要使用Jdbctemplate 对象来完成jdbc 操作.通常情况下,有三种种方式得到JdbcTemplate 对象.   第一种方式:我们可以在自己定义的DAO 实现类中注入一个DataSource ...

  9. CORS跨域资源共享(二):详解Spring MVC对CORS支持的相关类和API【享学Spring MVC】

    每篇一句 重构一时爽,一直重构一直爽.但出了问题火葬场 前言 上篇文章通过我模拟的跨域请求实例和结果分析,相信小伙伴们都已经80%的掌握了CORS到底是怎么一回事以及如何使用它.由于Java语言中的w ...

  10. Spring实战6-利用Spring和JDBC访问数据库

    主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRep ...

最新文章

  1. 后APP时代的破局之路 :阿里技术“三大容器五大方案”亮相,百川开放全面升级...
  2. quo,vadis_Quo Vadis JUnit
  3. Linux下配置Smba服务器
  4. Latex 算法过长 分页显示方法
  5. FIR数字滤波器设计_窗函数法
  6. ARM Cortex-M3中断跳转过程
  7. Kafka日志清理之Log Deletion
  8. linux中多进程调试,linux下用gdb调试多进程
  9. linux脚本是什么语言,Linux学习之Shell脚本语言的优势是什么?
  10. BZOJ2137: submultiple(生成函数,二项式定理)
  11. python f string_Python|f-string让我喜欢Python的原因之一
  12. 软件开发模式之敏捷开发
  13. MonGoDB 常见操作, 设置管理员和用户登入
  14. oracle 存储过程深入学习与应用
  15. C# 中关闭当前线程的四种方式 .
  16. laravel框架使用datatables
  17. 本机号码一键登录原理与应用(荣耀典藏版)
  18. 探究ESP32S【第六天】——接入米家(插曲)
  19. hdu 6441 (费马大定理+勾股数 数学)
  20. ABP框架 - 实体

热门文章

  1. 服务器webpack构建性能,webpack构建和性能优化探索
  2. GCD nyoj1007(欧拉函数运用数论入门)
  3. 眼图在通信系统中有什么意义_OA协同办公系统存在的意义是什么?协同OA的显着优势又在哪儿?...
  4. 【2019杭电多校第七场1001=HDU6646】A+B=C(思维+多细节)
  5. linux拷贝多行 y a b,copy /b命令无缝合并多个文件
  6. python中文件写入种类及功能方法
  7. 人工智能的未来-揭示人类思维的奥秘How to create a mind - Ray Kurzweil
  8. 算法:回溯八 Combinations指定个数组合
  9. 易筋SpringBoot 2.1 | 第廿八篇:SpringBoot之循环引用Circular Dependency
  10. 2021-09-08 集成学 习 思想概述