`

Spring Boot实战数据库操作-JdbcTemplate集成

阅读更多

一、准备工作

  在演示这几种方式之前,需要先准备一些东西。第一个就是数据库,本系统是采用MySQL实现的,我们需要先创建一个tb_article的表:

DROP TABLE IF EXISTS `tb_article`;
 
CREATE TABLE `tb_article` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL DEFAULT '',
  `summary` varchar(1024) NOT NULL DEFAULT '',
  `status` int(11) NOT NULL DEFAULT '0',
  `type` int(11) NOT NULL,
  `user_id` bigint(20) NOT NULL DEFAULT '0',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `public_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 后续的演示会对这个表进行增删改查,大家应该会看到这个表里面并没有文章的详情,原因是文章的详情比较长,如果放在这个表里面容易影响查询文章列表的效率,所以文章的详情会单独存在另外的表里面。此外我们需要配置数据库连接池,这里我们使用druid连接池,另外配置文件使用yaml配置,即application.yml(你也可以使用application.properties配置文件,没什么太大的区别,如果对ymal不熟悉,有兴趣也可以查一下,比较简单)。连接池的配置如下:

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/blog?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    driverClassName: com.mysql.jdbc.Driver
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource

 最后,我们还需要建立与数据库对应的POJO类,代码如下:

public class Article {
    private Long id;
    private String title;
    private String summary;
    private Date createTime;
    private Date publicTime;
    private Date updateTime;
    private Long userId;
    private Integer status;<br>    private Integer type;<br><br>}

  好了,需要准备的工作就这些,现在开始实现数据库的操作。

二、与JdbcTemplate集成

  首先,我们先通过JdbcTemplate来访问数据库,这里只演示数据的插入,上一篇文章中我们已经提到过,Spring boot提供了许多的starter来支撑不同的功能,要支持JdbcTemplate我们只需要引入下面的starter就可以了:

<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

  现在我们就可以通过JdbcTemplate来实现数据的插入了:

public interface ArticleDao {
    Long insertArticle(Article article);
}
 
@Repository
public class ArticleDaoJdbcTemplateImpl implements ArticleDao {
 
    @Autowired
    private NamedParameterJdbcTemplate jdbcTemplate;
 
    @Override
    public Long insertArticle(Article article) {
        String sql = "insert into tb_article(title,summary,user_id,create_time,public_time,update_time,status) " +
                "values(:title,:summary,:userId,:createTime,:publicTime,:updateTime,:status)";
        Map<String, Object> param = new HashMap<>();
        param.put("title", article.getTitle());
        param.put("summary", article.getSummary());
        param.put("userId", article.getUserId());
        param.put("status", article.getStatus());
        param.put("createTime", article.getCreateTime());
        param.put("publicTime", article.getPublicTime());
        param.put("updateTime", article.getUpdateTime());
        return (long) jdbcTemplate.update(sql, param);
    }
}

 我们通过JUnit来测试上面的代码:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class ArticleDaoTest {
 
    @Autowired
    private ArticleDao articleDao;
 
    @Test
    public void testInsert() {
        Article article = new Article();
        article.setTitle("测试标题");
        article.setSummary("测试摘要");
        article.setUserId(1L);
        article.setStatus(1);
        article.setCreateTime(new Date());
        article.setUpdateTime(new Date());
        article.setPublicTime(new Date());
        articleDao.insertArticle(article);
    }
}

   要支持上面的测试程序,也需要引入一个starter:

 
<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
</dependency>

  从上面的代码可以看出,其实除了引入jdbc的start之外,基本没有配置,这都是spring boot的自动帮我们完成了配置的过程。上面的代码需要注意的Application类的位置,该类必须位于Dao类的父级的包中,比如这里Dao都位于com.pandy.blog.dao这个包下,现在我们把Application.java这个类从com.pandy.blog这个包移动到com.pandy.blog.app这个包中,则会出现如下错误:

 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.pandy.blog.dao.ArticleDao' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
    ... 28 more

  也就是说,找不到ArticleDao的实现,这是什么原因呢?上一篇博文中我们已经看到@SpringBootApplication这个注解继承了@ComponentScan,其默认情况下只会扫描Application类所在的包及子包。因此,对于上面的错误,除了保持Application类在Dao的父包这种方式外,也可以指定扫描的包来解决:

@SpringBootApplication
@ComponentScan({"com.pandy.blog"})
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

 了解springcloud架构可以加求求:三五三六二四七二五九

 
 
分享到:
评论

相关推荐

    Spring Boot实战之数据库操作的示例代码

    Spring Boot实战中的数据库操作是后端开发的重要组成部分,本文将详细介绍如何使用Spring Boot进行数据库操作,包括使用JdbcTemplate、JPA和Mybatis三种不同的数据访问技术。 首先,要进行数据库操作,我们得先搭建...

    Spring Boot2企业应用实战

    例如,使用`spring-boot-starter-data-jpa`,可以轻松实现对数据库的操作。 8. **安全控制**:通过`spring-boot-starter-security`,Spring Boot提供了基本的安全管理功能,包括身份验证和授权,可以快速搭建安全的...

    spring-boot-demo

    例如,如果类路径下存在JDBC驱动,Spring Boot就会自动配置DataSource,使得我们可以直接使用JdbcTemplate或JPA进行数据库操作。 总的来说,"spring-boot-demo"项目是一个很好的学习平台,它让我们能亲身体验Spring...

    Spring Boot详解

    Spring Boot详解 Spring框架自2003年发布以来,...以上内容涵盖了Spring Boot的基本概念、发展历程、核心特性及实战应用,旨在帮助读者全面理解Spring Boot的工作原理和使用方法,使其能够高效地开发Spring Boot应用。

    spring-boot-2.4.x.zip

    2. 数据访问:集成JPA、MyBatis等ORM框架,实现数据库操作,源码分析可以帮助理解数据访问的底层逻辑。 3. 整合WebSocket:通过源码学习,可以了解如何在Spring Boot中启用WebSocket,实现实时通信。 4. 微服务...

    spring-boot-examples.rar

    《Spring Boot实战示例解析》 Spring Boot是Java领域中一款极为流行的框架,它简化了Spring应用程序的开发过程,使得开发者能够快速构建可运行的应用程序。这个名为"spring-boot-examples.rar"的压缩包文件,显然是...

    java spring boot 资料

    - **数据库操作**:Spring Data JPA或MyBatis可以方便地进行数据库操作,实现CRUD功能。 - **模板引擎**:Thymeleaf或Freemarker可以用于生成动态HTML页面。 - **安全控制**:Spring Security提供了一套完整的安全...

    spring boot整合sharding jdbc5.2.0分库分表demo

    **Spring Boot 整合 ShardingSphere (Sharding JDBC) 5.2.0 分库分表实战** 在现代企业级应用开发中,随着业务量的增长,数据库的压力也随之增大,这时就需要进行数据库的分库分表操作来提升系统性能。Spring Boot ...

    spring-boot-demo-atguigu:谷粒学院spring-boot原始码学习

    总结起来,"spring-boot-demo-atguigu"是一个深入学习Spring Boot的开源项目,涵盖了Spring Boot的诸多核心特性,包括自动配置、starter依赖、配置文件、RESTful API、模板引擎、数据库集成、测试等。通过对这个项目...

    03-SpringBoot实战1

    通过`spring-boot-starter-jdbc`,我们可以方便地使用JdbcTemplate进行数据库操作。同时,Spring Data项目为多种SQL数据库提供了便捷的操作支持,如JPA、MyBatis等。 - **NoSQL数据库**:Spring Data子项目支持多种...

    从零开始学Spring Boot

    6. Spring Boot与数据库交互:包括使用JPA和Hibernate进行数据持久化操作,以及使用JdbcTemplate模板进行数据库操作。 7. 自定义配置:包括如何修改Spring Boot项目的端口号,配置ContextPath,以及如何改变JDK编译...

    Spring boot 入门实例

    **Spring Boot 入门实例详解** Spring Boot 是一个由 Pivotal 团队开发的 Java 框架,旨在简化Spring...随着学习的深入,你可以尝试集成数据库、添加安全控制、实现RESTful API等,进一步探索Spring Boot的强大功能。

    spring boot中文文档

    在《Spring Boot实战》这本书中,作者深入浅出地介绍了Spring Boot的基础知识和实际应用。首先,书本可能会讲解如何设置开发环境,包括JDK、Maven或Gradle的安装与配置。接着,会引导读者创建第一个Spring Boot应用...

    基于Springboot的瑞吉外卖项目

    开发者只需在`application.properties`或`application.yml`中设置数据库连接参数,Spring Boot就会自动配置DataSource,以及JdbcTemplate或JPA的相关配置。 接下来是安全控制。Spring Boot提供了`spring-boot-...

    参照阿里druid个人整理druid-spring-boot-starter可运行demo

    【阿里Druid与Spring Boot整合实战】 Druid是阿里巴巴开源的一款高效、强大的数据库连接池组件,它不仅提供了数据库连接池功能,还集成了监控、SQL解析、执行性能统计等多种实用特性,是Java开发中常用的数据库连接...

    spring-boot-demo.zip

    spring boot demo 是一个用来深度学习并实战 spring boot 的项目,该项目已成功集成 actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、...

    一个用于深入学习并实战Spring Boot的项目

    spring boot demo是一个用于深度学习并实战spring boot的项目,目前总共包含66一个集成demo,已经完成了55一个。 该项目已成功集成actuator( 监控)、admin( 可视化监控)、logback( 日志)、aopLog( 通过AOP记录web...

    SpringBoot实战源码.zip

    5. **Spring Boot实战**: 这个压缩包中的源码可能包含了一个完整的Spring Boot应用实例,涵盖了从项目创建、配置、控制器编写、视图渲染、数据库交互、安全设置等方面。你可以通过阅读和学习这些源码,深入了解...

    详解Spring Boot实战之Restful API的构建

    - Spring Boot可以集成多种数据库访问技术,包括但不限于JdbcTemplate、JPA和MyBatis。 - 这些技术用于实现对数据库的增删改查操作,如示例中的ArticleMapper封装了对文章数据的操作。 3. Spring MVC注解: - @...

    一个用来深入学习并实战 Spring Boot 的项目

    spring boot demo 是一个用来深度学习并实战 spring boot 的项目,目前总共包含 66 个集成demo,已经完成 55 个。 该项目已成功集成 actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求...

Global site tag (gtag.js) - Google Analytics