一、准备工作
在演示这几种方式之前,需要先准备一些东西。第一个就是数据库,本系统是采用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进行数据库操作,包括使用JdbcTemplate、JPA和Mybatis三种不同的数据访问技术。 首先,要进行数据库操作,我们得先搭建...
例如,使用`spring-boot-starter-data-jpa`,可以轻松实现对数据库的操作。 8. **安全控制**:通过`spring-boot-starter-security`,Spring Boot提供了基本的安全管理功能,包括身份验证和授权,可以快速搭建安全的...
例如,如果类路径下存在JDBC驱动,Spring Boot就会自动配置DataSource,使得我们可以直接使用JdbcTemplate或JPA进行数据库操作。 总的来说,"spring-boot-demo"项目是一个很好的学习平台,它让我们能亲身体验Spring...
Spring Boot详解 Spring框架自2003年发布以来,...以上内容涵盖了Spring Boot的基本概念、发展历程、核心特性及实战应用,旨在帮助读者全面理解Spring Boot的工作原理和使用方法,使其能够高效地开发Spring Boot应用。
2. 数据访问:集成JPA、MyBatis等ORM框架,实现数据库操作,源码分析可以帮助理解数据访问的底层逻辑。 3. 整合WebSocket:通过源码学习,可以了解如何在Spring Boot中启用WebSocket,实现实时通信。 4. 微服务...
《Spring Boot实战示例解析》 Spring Boot是Java领域中一款极为流行的框架,它简化了Spring应用程序的开发过程,使得开发者能够快速构建可运行的应用程序。这个名为"spring-boot-examples.rar"的压缩包文件,显然是...
- **数据库操作**:Spring Data JPA或MyBatis可以方便地进行数据库操作,实现CRUD功能。 - **模板引擎**:Thymeleaf或Freemarker可以用于生成动态HTML页面。 - **安全控制**:Spring Security提供了一套完整的安全...
**Spring Boot 整合 ShardingSphere (Sharding JDBC) 5.2.0 分库分表实战** 在现代企业级应用开发中,随着业务量的增长,数据库的压力也随之增大,这时就需要进行数据库的分库分表操作来提升系统性能。Spring Boot ...
总结起来,"spring-boot-demo-atguigu"是一个深入学习Spring Boot的开源项目,涵盖了Spring Boot的诸多核心特性,包括自动配置、starter依赖、配置文件、RESTful API、模板引擎、数据库集成、测试等。通过对这个项目...
通过`spring-boot-starter-jdbc`,我们可以方便地使用JdbcTemplate进行数据库操作。同时,Spring Data项目为多种SQL数据库提供了便捷的操作支持,如JPA、MyBatis等。 - **NoSQL数据库**:Spring Data子项目支持多种...
6. Spring Boot与数据库交互:包括使用JPA和Hibernate进行数据持久化操作,以及使用JdbcTemplate模板进行数据库操作。 7. 自定义配置:包括如何修改Spring Boot项目的端口号,配置ContextPath,以及如何改变JDK编译...
**Spring Boot 入门实例详解** Spring Boot 是一个由 Pivotal 团队开发的 Java 框架,旨在简化Spring...随着学习的深入,你可以尝试集成数据库、添加安全控制、实现RESTful API等,进一步探索Spring Boot的强大功能。
在《Spring Boot实战》这本书中,作者深入浅出地介绍了Spring Boot的基础知识和实际应用。首先,书本可能会讲解如何设置开发环境,包括JDK、Maven或Gradle的安装与配置。接着,会引导读者创建第一个Spring Boot应用...
开发者只需在`application.properties`或`application.yml`中设置数据库连接参数,Spring Boot就会自动配置DataSource,以及JdbcTemplate或JPA的相关配置。 接下来是安全控制。Spring Boot提供了`spring-boot-...
【阿里Druid与Spring Boot整合实战】 Druid是阿里巴巴开源的一款高效、强大的数据库连接池组件,它不仅提供了数据库连接池功能,还集成了监控、SQL解析、执行性能统计等多种实用特性,是Java开发中常用的数据库连接...
spring boot demo 是一个用来深度学习并实战 spring boot 的项目,该项目已成功集成 actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、...
spring boot demo是一个用于深度学习并实战spring boot的项目,目前总共包含66一个集成demo,已经完成了55一个。 该项目已成功集成actuator( 监控)、admin( 可视化监控)、logback( 日志)、aopLog( 通过AOP记录web...
5. **Spring Boot实战**: 这个压缩包中的源码可能包含了一个完整的Spring Boot应用实例,涵盖了从项目创建、配置、控制器编写、视图渲染、数据库交互、安全设置等方面。你可以通过阅读和学习这些源码,深入了解...
- Spring Boot可以集成多种数据库访问技术,包括但不限于JdbcTemplate、JPA和MyBatis。 - 这些技术用于实现对数据库的增删改查操作,如示例中的ArticleMapper封装了对文章数据的操作。 3. Spring MVC注解: - @...
spring boot demo 是一个用来深度学习并实战 spring boot 的项目,目前总共包含 66 个集成demo,已经完成 55 个。 该项目已成功集成 actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求...