IDEA搭建SpringBoot并实现简单数据库操作


前言

此文章讲解使用IDEA搭建SpringBoot项目,并实现简单的增删查改功能,在搭建过程中遇到了很多坑。
SpringBoot真的是非常的简单,相比于之前搭建SSM或者SSH,几乎是0配置,基本无需繁杂的XML,所有配置操作通通由注解来完成,这个特性知道SpringBoot的应该也早有耳闻。
目前的微服务很火,SpringBoot和SpringCloud都属于微服务框架,具体什么是微服务框架?戳这里,如果有机会,后续会研究研究。

IDEA搭建SpringBoot

新建项目

两种方式,第一种,使用IDEA直接创建,第二种,SpringBoot官网填好配置,直接生成,生成之后导入到IDEA中。
直接来看第一种。首先打开IDEA,选择新建project,在新建时选择Spring Initializr项,可以看到右边JDK和选择初始化服务连接的选项,默认选第一个,其实就是IDEA帮我们从start.spring.io去下载SpringBoot的初始化项目。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在此页面选择要导入的包,可以记得刚才在新建第二步的时候,项目类型是Maven,因此项目的包管理是由Maven来完成的,所以这里选择导入的包其实就是将选择的包加入到Maven的pom文件中。
首先导入Web中的Web,SQL中的Mysql,JPA(Java持久层API)和JDBC,选择JPA是因为要使用JPA来操作数据库,这里的JPA实现貌似是由Hibernate来完成的,具体为什么后续有描述。
在SpringBoot中呢,引入了一个模板引擎的概念,也就是使用原生的HTML来代替JSP,因此呢我们需要将Template Engines中的Thymeleaf也选上,才能使用模板,此处需要注意了,要引入的包分别为:

  • Web中的Web
  • SQL中的MySql、JDBC和JPA
  • Template Engines中的Thymeleaf

也可以根据你的需要进行添加或更改。添加完成之后,选择存放位置,完成即可。

配置及启动

在这里插入图片描述
创建完成后,可以看到如上所示的SpringBoot项目的结构,这里需要说一下的是,SpringBoot配置有两种:

  • application.properties
  • application.yml

项目创建完成之后,可以看到默认的是第一种,其实在日常开发中,yml要比properties来的方便的多,yml其实也是一种交互式编程语言,联想到xml,只不过yml拥有自己特有的语法结构。这里我们选择重命名为application.yml。
在这里插入图片描述
这两种配置文件可以到官方文档中查看,后续有时间我也会做一下关于这两种文件的用法。

配置

现在的项目虽然已经新建好了,但是呢还无法运行起来,因为在选择了JDBC和JPA操作数据库之后,SpringBoot的启动默认是需要将这两项的信息告知SpringBoot的,因此呢在运行启动之前呢,需要先在yml里面进行相应的配置。顺便值得一提的是,idea对yml的提示效果真的很棒。

  1. 数据源的配置

数据源配置如下:

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true 
    #为了防止中文乱码,在URL中默认添加了?useUnicode=true&characterEncoding=UTF-8来使用UTF8编码,
    #&allowMultiQueries=true表示支持批量更新,因为我的电脑时区紊乱,无法启动项目,因此需要加&serverTimezone=GMT%2B8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

千万要注意缩进,同样缩进表示在同一级,结构层次是由缩进来决定的,一定要注意!!!!

  1. JPA(Java持久层API)的配置
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

注意这里的jpa是和datasource同一级的,因为都是spring中提供的功能。这里可以看到,配置jpa时看到了hibernate字样,基本证实了此处JPA实现是由Hibernate来完成的
ddl-auto用来指定项目启动时对数据库结构包括数据库、数据库表的创建、更新、删除等操作,具体取值如下:

  • create 启动时删数据库中的表,然后创建,退出时不删除数据表
  • create-drop 启动时删数据库中的表,然后创建,退出时删除数据表 如果表不存在报错
  • update 如果启动时表格式不一致则更新表,原有数据保留
  • validate 项目启动表结构进行校验 如果不一致则报错

一般情况下选择update就好

  1. 启动端口配置
server:
  port: 8080

最后完成配置之后的全貌:

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true 
    #为了防止中文乱码,在URL中默认添加了?useUnicode=true&characterEncoding=UTF-8来使用UTF8编码,
    #&allowMultiQueries=true表示支持批量更新,因为我的电脑时区紊乱,无法启动项目,因此需要加&serverTimezone=GMT%2B8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
server:
  port: 8080

千万要注意缩进对齐!!

启动

配置完成之后就可以启动项目了,SpringBoot默认是以JAR的形式打包的,SpringBoot打包后内置Tomcat容器,因此无需自行配置Tomcat,而在启动方式上,和传统的Web项目是由区别的,SpringBoot启动,只需打开主类,运行启动主类即可,打开主类后,右击直接运行,不过在启动之前要保证maven已经下载并安装好了所需的依赖jar包:
在这里插入图片描述
如果配置没错的话,启动后输出结果如下:
在这里插入图片描述
要注意,在yml中任何一处的配置错误,比如url中的端口、数据库名、用户名密码等错误的话,都会导致启动不成功。访问localhost:8080,如果你配置了端口,这里的端口就要和你配置的一致
在这里插入图片描述
得到如上图就表示你的SpringBoot创建成功了

简单功能的实现

页面输出文本或返回JSON

可以在上图中看到,当前是错误页,是404的状态,因为启动后,没有定义要访问的页面或者是要显示的文本,接下来就先看一下在页面中输出一段文本
在主类的同级目录下新建controller包,存放所有的Controller控制器类,然后创建一个控制器,起名为IndexController
在这里插入图片描述
SpringBoot会自动加载和处理主类同级目录下的所有类,所以一定要在主类的同级或低于主类所在包的位置放置要编写的java类,无论是Controller还是Service还是Dao
在刚才创建的Controller类上使用@Controller注解,然后新建一个控制器方法,代码如下:

@Controller
public class IndexController {

    @RequestMapping("/index")
    @ResponseBody
    public String index(){
        return "JavaFeng";
    }
}

当使用 @ResponseBody时,返回的是字符串,因此在需要返回Json时,使用 @ResponseBody即可
在这里插入图片描述

跳转模板(templates文件夹下的HTML)

当需要跳转到一个页面的时候,则不使用 @ResponseBody,返回值中的字符串则表示要跳转的模板页面的名称,不加后缀名,首先在templates下新建一个页面,比如index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
这里是Javafeng的博客
</body>
</html>

然后修改控制器方法,将返回值字符串更改为要跳转的html的名称index,尝试访问

@Controller
public class IndexController {

    @RequestMapping("/index")
    public String index(){
        return "index";
    }
}

在这里插入图片描述

实现JPA增删查改

数据库表创建

创建一个数据库表,叫user,表结构如下
在这里插入图片描述

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
实体类

controller同级创建model包,存放实体类,新建实体类User,并用注解配置一下

@Entity(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Integer id;
    String name;
    Integer age;
    //省略getter和setter
}
Dao查询接口

controller同级创建daol包,存放数据库操作接口,新建接口UserDao,继承JpaRepository,JpaRepository格式为JpaRepository<要操作的实体类,实体类主键类型>,代码如下

public interface UserDao extends JpaRepository<User,Integer> {
}
控制器方法

在控制器类中注入一个UserDao对象用来操作数据库,并新建控制器方法get_all_user()查询所有用户并返回到后台,此处可以使用ModelAndView

    //注入UserDao
    @Autowired
    private UserDao userDao;

    @RequestMapping("/users")
    public ModelAndView get_all_user() {
        List<User> userlist = userDao.findAll();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("users");
        modelAndView.addObject("userList", userlist);
        return modelAndView;
    }

JPA操作数据库常用方法,以UserDao为例:
查询全部

userDao.findAll()
//返回List<User>

查询单条

userDao.getOne(Integer id)
//参数为主键id,返回User对象

删除单条

userDao. deleteById (Integer id)
//参数为主键id

保存或更新单条

userDao. save(User user)
//参数为User对象
HTML模板页面

创建users.html来显示用户信息

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" 
      xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout"
      layout:decorator="base/layout.html">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table>
    <tr>
        <td>编号(id)</td>
        <td>姓名(name)</td>
        <td>年龄(age)</td>
    </tr>
    <tbody th:each="user : ${userList}">
        <tr >
            <td th:text="${user.getId()}"></td>
            <td th:text="${user.getName()}"></td>
            <td th:text="${user.getAge()}"></td>
        </tr>
    </tbody>
</table>
</body>
</html>

注意在html标签内添加xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout" layout:decorator="base/layout.html",这是thymeleaf对Html的支持。模板内常用的几个标签及用法后续进行总结,这里列举几个:

  • th:each="user : ${userList}":遍历,格式为 th:each="遍历出的对象 : ${被遍历的集合}"
  • th:text="${user.getId()}":在标签内放置文本
  • th:href="@{/getuser(id=1)}":格式th:href="@{/路径(参数名=参数值)}",为a标签添加href属性,参数值可使用${对象或属性}的格式,例如:th:href="@{/getuser(id=${user.getId()})}"
  • th:value="${user.getId()}":为input填充值
  • if判断等等等用法自行谷歌吧!
    效果展示
    访问localhost:8080/users,最后效果:
    在这里插入图片描述

    坑和知识点

  • 如果无法访问到模板,一直报404,一定千万看是否导入了Thymeleaf包,没有导入的话是无法访问的
  • 一定会有人问我后台怎么样跳转到@RequestMapping定义的链接?使用return "redirect: /index"就可以访问刚才新建的第一个控制器方法

有疑问请留言评论,有不足请留言指正!
下载源码 提取码:34mn

评论↓[写评论]


There is nothing!