Spring之路(30)–使用JdbcTemplate完成数据库操作(xml+注解配置)

简介: 本文目录1. 背景2. 创建spring.xml3. 配置数据源4. 配置jdbcTemplate组件,并注入dataSource5. 定义数据对象6. 实现数据库操作组件7. bean分析8. 测试9. 总结

1. 背景

上一篇讲述了数据源DataSource,本篇使用的JdbcTemplate完成对数据库增删改查操作,话不多少,开整…


2. 创建spring.xml

创建spring.xml,这个没啥好说的,注意开启对包的扫描,以便于后续自动注册包内定义的bean:


<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

       http://www.springframework.org/schema/context

       http://www.springframework.org/schema/context/spring-context-4.0.xsd

       http://www.springframework.org/schema/mvc

       http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

<context:component-scan

 base-package="org.maoge.jdbctemplatedemo" />

</beans>


3. 配置数据源

在xml配置数据源,上一篇我们使用JavaConfig配置了数据源,使用xml就是形式不一样,直接翻译过来就行。


   <!-- 数据源 -->

<bean id="dataSource"

 class="com.alibaba.druid.pool.DruidDataSource">

 <property name="driverClassName"

  value="com.mysql.jdbc.Driver"></property>

 <!-- 注意xml中使用&amp;替代& -->

 <property name="url"

  value="jdbc:mysql://127.0.0.1:3306/myblog?useUnicode=true&amp;characterEncoding=utf-8"></property>

 <property name="username" value="root"></property>

 <property name="password" value="XXX"></property>

</bean>


4. 配置jdbcTemplate组件,并注入dataSource

同样使用xml配置jdbcTemplate,显示指定注入dataSource。


<!--注册jdbcTemplate组件 -->

<bean id="jdbcTemplate"

 class="org.springframework.jdbc.core.JdbcTemplate">

 <property name="dataSource" ref="dataSource"></property>

</bean>


5. 定义数据对象

此处我们还是对博客blog表进行操作,所以定义BlogDo数据对象。


package org.maoge.jdbctemplatedemo;

/**

* @theme 数据对象--博客

* @author maoge

* @date 2020-01-27

*/

public class BlogDo {

private Long id;

private String title;

private String author;

private String content;

// 省略get get

}


6. 实现数据库操作组件

此处常规操作是先定义一个接口,然后将实现接口的类注册为bean,我个人是感觉没啥意义,咱们直接实现数据库操作组件。


一般对数据库进行操作对象称为DAO,此处我们也按这个命名来实现:


package org.maoge.jdbctemplatedemo;


import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.RowMapper;

import org.springframework.stereotype.Repository;


/**

* @theme DAO--博客

* @author maoge

* @date 2020-01-29

*/

@Repository // 注册为组件(此处也可以使用@Component)

public class BlogDao {

@Autowired // 自动注入xml中定义的jdbcTemplate

private JdbcTemplate jdbcTemplate;


/**

 * 新增

 */

public void insert(BlogDo blog) {

 jdbcTemplate.update("insert into blog(author,content,title)values(?,?,?)", blog.getAuthor(), blog.getContent(),

   blog.getTitle());

}


/**

 * 删除

 */

public void delete(Long id) {

 jdbcTemplate.update("delete from blog where id =?", id);

}


/**

 * 更新

 */

public void update(BlogDo blog) {

 jdbcTemplate.update("update blog set author=?,content=?,title=? where id=?", blog.getAuthor(),

   blog.getContent(), blog.getTitle(), blog.getId());

}


/**

 * 按id查询

 */

public BlogDo getById(Long id) {

 return jdbcTemplate.queryForObject("select * from blog where id=?", new RowMapper<BlogDo>() {

  @Override

  public BlogDo mapRow(ResultSet rs, int rowNum) throws SQLException {

   BlogDo blog = new BlogDo();

   blog.setAuthor(rs.getString("author"));

   blog.setContent(rs.getString("content"));

   blog.setId(rs.getLong("id"));

   blog.setTitle(rs.getString("title"));

   return blog;

  }


 }, id);

}


/**

 * 查询列表

 */

public List<BlogDo> getList() {

 return jdbcTemplate.query("select * from blog", new RowMapper<BlogDo>() {

  @Override

  public BlogDo mapRow(ResultSet rs, int rowNum) throws SQLException {

   BlogDo blog = new BlogDo();

   blog.setAuthor(rs.getString("author"));

   blog.setContent(rs.getString("content"));

   blog.setId(rs.getLong("id"));

   blog.setTitle(rs.getString("title"));

   return blog;

  }

 });

}

}


可以看到,除了最后两个查询方法稍微有点不好理解,其他的都简单了。最后两个用到了匿名类相关知识,可以去了解下,当然就算不了解直接写类似的代码也是可以的,已经足够简单了。


7. bean分析

注意本文其实我们使用xml定义了dataSource、jdbcTemplate两个bean,而BlogDao是使用注解定义的。为何不都使用注解或都使用注解呢?


因为dataSource和jdbcTemplate是Spring定义好的类,我们没法在上面添加注解了。所以可以使用xml注册它或者使用JavaConfig。


而BlogDao我们既可以使用注解,也可以使用xml注册它,由于直接代码量更少,所以此处为了简单就使用了注解。


8. 测试

我们获取容器中的BlogDao组件,然后调用其方法进行测试即可,测试代码如下:


package org.maoge.jdbctemplatedemo;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

public static void main(String[] args) {

 // 获取容器

 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(

   "/org/maoge/jdbctemplatedemo/spring.xml");

 // 获取blogDao组件

 BlogDao blogDao = context.getBean("blogDao", BlogDao.class);

 BlogDo blog = new BlogDo();

 blog.setAuthor("猫哥");

 blog.setTitle("测试博客");

 blog.setContent("非常完美吭");

 // 测试插入

 blogDao.insert(blog);

 // 测试获取1个

 System.out.println(blogDao.getById(2L));

 // 测试获取列表

 System.out.println(blogDao.getList().size());

 blog.setId(3L);

 blog.setContent("非常完美吭XX");

 // 修改

 blogDao.update(blog);

 // 删除

 blogDao.delete(4L);

}

}


9. 总结

使用JdbcTemplate之后,确实将重复的模板代码基本都消灭了,我们可以关心真正的业务逻辑。

相关文章
|
7天前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
25 0
|
4天前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
20 0
|
21天前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
14天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
40 4
SpringBoot必须掌握的常用注解!
|
14天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
27 1
|
16天前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
56 2
|
16天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
32 1
|
11天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
10 0
|
23天前
|
存储 Java 数据管理
强大!用 @Audited 注解增强 Spring Boot 应用,打造健壮的数据审计功能
本文深入介绍了如何在Spring Boot应用中使用`@Audited`注解和`spring-data-envers`实现数据审计功能,涵盖从添加依赖、配置实体类到查询审计数据的具体步骤,助力开发人员构建更加透明、合规的应用系统。
|
9天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
23 4