Spring 中的 JDBC

桃扇骨 2022-11-30 12:42 194阅读 0赞

1.1 简介

  JDBC(Java Data Base Connectivity)是一种用于执行 SQL 语句的 Java APl,可以为多种关系型数据库提供统一访问,它是由一组用 Java 语言编写的类和接口组成的。JDBC 提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。但是,在 Java 企业级应用中,使用底层的 JDBC API 来编写程序还是显得过于烦琐,如需要编写很多的样板代码来打开和关闭数据库连接,需要处理很多的异常等。
  针对上述问题,Spring JDBC 框架对底层的 JDBC API 进行了封装,负责所有的底层细节,包括如何开始打开连接、准备和执行 SQL 语句、处理异常、处理事务、最后关闭连接等。所以使用 Spring JDBC 框架,开发人员需要做的仅是定义连接参数、指定要执行的 SQL 语句,从而可以从烦琐的 JDBC API 中解放出来,专注于自己的业务。Spring 还为我们提供了 JdbcTemplate 模板用于操作关系型数据库。

1.2 JdbcTemplate

1.2.1 自己创建 JdbcTemplate 对象

☞ 相关依赖

  1. <!-- 数据库连接驱动 -->
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. <version>5.1.32</version>
  6. </dependency>
  7. <!-- 数据库连接池,算便使用哪一个 -->
  8. <dependency>
  9. <groupId>c3p0</groupId>
  10. <artifactId>c3p0</artifactId>
  11. <version>0.9.1.2</version>
  12. </dependency>
  13. <dependency>
  14. <groupId>com.alibaba</groupId>
  15. <artifactId>druid</artifactId>
  16. <version>1.1.10</version>
  17. </dependency>
  18. <!-- spring-jdbc -->
  19. <dependency>
  20. <groupId>org.springframework</groupId>
  21. <artifactId>spring-jdbc</artifactId>
  22. <version>5.0.5.RELEASE</version>
  23. </dependency>

☞ 使用 JdbcTemplate

  1. @Test
  2. public void test() throws Exception {
  3. // 创建数据源对象
  4. ComboPooledDataSource dataSource = new ComboPooledDataSource();
  5. dataSource.setDriverClass("com.mysql.jdbc.Driver");
  6. dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
  7. dataSource.setUser("root");
  8. dataSource.setPassword("root");
  9. JdbcTemplate jdbcTemplate = new JdbcTemplate();
  10. // 设置数据源对象
  11. jdbcTemplate.setDataSource(dataSource);
  12. // 执行操作
  13. int row = jdbcTemplate.update("insert into account values(?,?)", "tom", 5000);
  14. System.out.println(row);
  15. }

1.2.2 Spring 创建 JdbcTemplate 对象

☞ 配置文件

  1. <!--数据源对象-->
  2. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  3. <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
  4. <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
  5. <property name="user" value="root"></property>
  6. <property name="password" value="root"></property>
  7. </bean>
  8. <!--jdbc模板对象-->
  9. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  10. <property name="dataSource" ref="dataSource"/>
  11. </bean>

☞ 抽取数据库信息

  1. # 注意不要省略前缀直接写 username,可能会与系统名称冲突导致参数不正确
  2. jdbc.driver=com.mysql.jdbc.Driver
  3. jdbc.url=jdbc:mysql://localhost:3306/test
  4. jdbc.username=root
  5. jdbc.password=root
  6. <!--加载 jdbc.properties -->
  7. <context:property-placeholder location="classpath:jdbc.properties"/>
  8. <!--数据源对象-->
  9. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  10. <property name="driverClass" value="${jdbc.driver}"/>
  11. <property name="jdbcUrl" value="${jdbc.url}"/>
  12. <property name="user" value="${jdbc.username}"/>
  13. <property name="password" value="${jdbc.password}"/>
  14. </bean>

☞ 使用 JdbcTemplate

  1. @Autowired
  2. private JdbcTemplate jdbcTemplate;
  3. @Test
  4. public void test() throws Exception {
  5. // 执行操作
  6. int row = jdbcTemplate.update("insert into account values(?,?)", "tom", 5000);
  7. System.out.println(row);
  8. }

1.2.3 常用 API

update():执行 DML 语句。增、删、改语句
queryForMap():查询结果将结果集封装为 map 集合,将列名作为 key,将值作为 value 将这条记录封装为一个 map 集合。注意:这个方法查询的结果集长度只能是 1
queryForList():查询结果将结果集封装为 list 集合。注意:将每一条记录封装为一个 Map 集合,再将 Map 集合装载到 List 集合中
query():查询结果,将结果封装为 JavaBean 对象。参数:RowMapper,一般我们使用 BeanPropertyRowMapper 实现类。可以完成数据到 JavaBean 的自动封装 new BeanPropertyRowMapper<T>(T.class)
queryForObject(sql,T.class):查询结果,将结果封装为对象。一般用于聚合函数的查询。
queryForObject(sql,BeanPropertyRowMapper<T>(T.class)):将一条记录封装为javabean

1.2.4 示例

  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @ContextConfiguration("classpath:application.xml")
  3. public class JdbcTemplateCRUDTest {
  4. @Autowired
  5. private JdbcTemplate jdbcTemplate;
  6. // 更新
  7. @Test
  8. public void testUpdate(){
  9. jdbcTemplate.update("update account set money = ? where name = ?", 10000, "tom");
  10. }
  11. // 删除
  12. @Test
  13. public void testDelete(){
  14. jdbcTemplate.update("delete from account where name = ?","tom");
  15. }
  16. // 聚合查询
  17. @Test
  18. public void testQueryCount(){
  19. Long count = jdbcTemplate.queryForObject("select count(*) from account", Long.class);
  20. System.out.println(count);
  21. }
  22. // 封装为对象
  23. @Test
  24. public void testQueryOne(){
  25. Account account = jdbcTemplate.queryForObject("select * from account where name = ?",
  26. new BeanPropertyRowMapper<Account>(Account.class), "tom");
  27. System.out.println(account);
  28. }
  29. // 封装为集合
  30. @Test
  31. public void testQueryAll(){
  32. List<Account> accountList = jdbcTemplate.query("select * from account",
  33. new BeanPropertyRowMapper<Account>(Account.class));
  34. System.out.println(accountList);
  35. }
  36. }

发表评论

表情:
评论列表 (有 0 条评论,194人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JDBC VS Spring JDBC

    在之前的博客中,您已经看到了我们如何使用春季JDBC。您还记得在早期,我们过去是如何为普通的JDBC调用编写代码的。让我们看下面: 下面是一个 JDBC 示例代码:

    相关 Spring JDBC

    1.1 简介   JDBC(Java Data Base Connectivity)是一种用于执行 SQL 语句的 Java APl,可以为多种关系型数据库提供统一访问,

    相关 Spring JDBC

    概述 为了使JDBC更加易于使用,Spring在JDBC API上定义了一个抽象层,以此建立一个JDBC存取框架。 作为Spring JDBC框架的核心,JDBC模板的

    相关 SpringJdbc事务管理

      Spring提供了对事务的声明式事务管理,只需要在配置文件中做一些配置,即可把操作纳入到事务管理当中,解除了和代码的耦合。   Spring声明式事务管理,核心实现就是基