springboot+template模板语法+SQL如何从零开始创建并运行一个实例

本文详细介绍了如何使用SpringBoot创建项目,包括设置依赖、编写实体类、Mapper接口、Service和Controller,以及配置数据库连接和显示数据的基本步骤。通过实例演示了如何在Thymeleaf模板中展示从数据库获取的数据,适合初学者快速入门。
摘要由CSDN通过智能技术生成

目录

一、创建springboot项目 

二、启动程序测试一下,右上角点击运行:

三、代码编写

1、先在entity里写一个实体类,User:

2、写一个mapper接口,写四个接口,增删改查。(我这里后面就以获取所有用户信息为例)

3、在Service包下新建一个UserService.java接口和impl实现包,再在impl里写一个实现UserService的实现类,UserServiceImpl.java。代码放下面了。

4、在Controller包下新建一个UserController.java。

5、写一个index页面,注意:要在template目录里建。 

6、application.properties配置

7、启动类上加一个MapperScan注解

8、建表

 四、重启项目

五、出现的问题与异常

六、完整项目获取地址


一、创建springboot项目 

1、首先打开idea,开始new一个springboot项目

2、然后右下角点next;

再选选一个模板语法的依赖,thymeleaf,还有数据库的依赖,选择自己对应的数据库,我使用的是MySQL,SQLServer选mmsql。

3、点击右下角的finish,等待依赖下载完毕即可。(第一次使用可能会有点慢,耐心等待)

4、加载完之后,我们新建四个包,分别是entity,mapper,service,controller

4、这四个包分别代表什么呢?

        (1)Entity(实体):实体代表了应用程序中的数据模型。在面向对象编程中,实体通常对应数据库中的表或文档。实体包含了数据的属性和方法,用于描述数据的结构和行为。

        (2)Mapper(映射器):映射器用于实现数据的持久化操作,通常用于将实体与数据库之间的数据转换和映射。映射器负责将数据从数据库中取出并转换为实体对象,或将实体对象持久化到数据库中。

        (3)Service(服务):服务通常包含了应用程序的业务逻辑,负责处理业务规则和流程。服务可以调用多个实体和映射器来完成特定的业务功能,同时也可以包含一些不属于特定实体或映射器的业务逻辑。

        (4)Controller(控制器):控制器负责接收用户请求,调用相应的服务和方法,并返回处理结果。控制器通常是应用程序的入口点,负责接收HTTP请求、调用适当的服务和方法,并返回HTTP响应。

        这些概念通常被用于构建现代的Web应用程序,通过将代码按照功能和责任进行分层,可以提高代码的可维护性和扩展性。在实际开发中,这些概念可能会有所不同或结合在一起,具体实现方式取决于项目的需求和开发团队的偏好。

简单来说,entity放的是数据存储的类,叫做实体类;mapper放的是接口,是数据与数据库之间映射交互的接口;service放的是业务逻辑,业务实现,也就是将来我们写代码功能实现的地方;controller算是与页面进行交互的入口,也是应用程序的入口。

还有一个概念,springboot的启动类: 

二、启动程序测试一下,右上角点击运行:

程序跑起来是这样的:

接下来我们在controller包下写一个HelloController,然后再重新启动一下springboot。

我们可以在浏览器里输入localhost:+端口号运行看看,我这里就是localhost:8282,一般默认端口号是8080,我配置了一下端口,后面会提到,这里你用你控制台显示的端口即可。能访问到,没报错那就是成功了,因为我们什么也没写,所以就是空白的。

有些人想要看见写出来的效果?欧克欧克,我们在controller包下创建一个HelloController类,写下以下内容:

package com.example.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "你好呀,springboot!";
    }
}

接下来在重新运行下,然后访问localhost: +端口号+ /hello。

有效果了吧哈哈。 

三、代码编写

接下来带大家实际写一个小栗子吧。

1、先在entity里写一个实体类,User:

2、写一个mapper接口,写四个接口,增删改查。(我这里后面就以获取所有用户信息为例)

(1)在mapper包下新建一个名为UserMapper的interface类:

import com.example.entity.User;

import java.util.List;

public interface UserMapper {
    //增加一个用户数据到数据库
//    int addOneUser(User user);

    //查询数据库中所有数据
    List<User> getAllUser();

    //删除一个用户数据
//    int delUserById(int id);

    //修改用户数据
//    int modifyUser(User user);
}

 (2)在resources下新建一个directory,名为mapper,再在此mapper里新建一个xml文件,是写数据库语句的,与数据库直接映射:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">

    <select id="getAllUser" resultType="com.example.entity.User">
        SELECT * FROM user
    </select>
</mapper>

3、在Service包下新建一个UserService.java接口和impl实现包,再在impl里写一个实现UserService的实现类,UserServiceImpl.java。代码放下面了。

package com.example.service;

import com.example.entity.User;

import java.util.List;

/**
 * UserService
 */
//这个接口是业务逻辑接口
public interface UserService {

    /**
     * 获取所有用户信息
     * @return
     */
    List<User> getAllUserList();
}
package com.example.service.impl;

import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

//UserServiceImpl
/**
 * 使用@Service注解,表示我这里是一个实现类
 * @Service注解是Spring框架中用于标识一个类为服务层组件(Service)的注解。
 * 在Spring应用程序中,通常将@Service注解用于标识服务层的类,表示该类提供业务逻辑处理,是应用程序的核心组件之一。
 */
@Service
//这里是实现业务逻辑里的方法的
public class UserServiceImpl implements UserService {
    /**
     * @Resource是Java EE提供的注解,用于进行依赖注入。在Spring框架中,@Resource注解可以用来标识需要注入
     * 的bean,类似于@Autowired注解,但在一些细节上有所不同。
     * @Resource注解的作用包括:
     * 标识需要注入的bean:通过@Resource注解标识一个字段或方法,告诉Spring容器需要将对应的bean注入到该字段或方法中。
     * 指定注入的名称:@Resource注解可以指定注入的bean的名称,通过name属性指定。如果不指定name属性,则默认按照名称进行匹配。
     * 支持按照名称和类型进行匹配:@Resource注解既支持按照名称匹配注入的bean,也支持按照类型匹配。如果指定了name属性,
     * 则按名称匹配;如果没有指定name属性,则先按类型匹配,再按名称匹配。
     */
    @Resource  //也可以使用@Autowired
    private UserMapper userMapper;

    @Override
    public List<User> getAllUserList() {
        return userMapper.getAllUser();
    }
}

4、在Controller包下新建一个UserController.java。

package com.example.controller;

import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import java.util.List;

/**
 * 在Spring框架中,@Controller和@RestController都用于标识一个类为处理HTTP请求的控制器,但它们之间有一些区别。
 * @Controller:@Controller注解用于标识一个类为Spring MVC控制器,通常用于返回视图页面。在@Controller注解的类中,
 * 处理请求的方法可以返回一个视图名称,Spring MVC会根据视图名称解析对应的视图页面并返回给客户端。
 *
 * @RestController:@RestController注解是@Controller和@ResponseBody注解的结合,用于标识一个类为RESTful风格的控制器,
 * 通常用于返回JSON、XML等数据。在@RestController注解的类中,处理请求的方法直接返回数据对象,Spring MVC会自动将数据对象序列化
 * 为JSON/XML格式并返回给客户端。
 *
 * 总结来说,@Controller用于返回视图页面,适用于传统的MVC架构;而@RestController用于返回数据,适用于RESTful风格的API。
 * 根据项目需求选择合适的注解来标识控制器类。
 */

@Controller
public class UserController {
    @Resource
    private UserService userService;
    //映射到前端的网址
    @RequestMapping("/user/getAllUser")
    public ModelAndView getAllUser(){
        List<User> userList = userService.getAllUserList();
        ModelAndView modelAndView = new ModelAndView();//创建一个ModelAndView对象
        modelAndView.setViewName("index");//需要返回的视图的名称
        modelAndView.addObject("userList", userList);//添加一个返回的元素,key和value
        return modelAndView;
    }
}

5、写一个index页面,注意:要在template目录里建。 

<!DOCTYPE html>
<html lang="en">
<!-- -->
<!-- 使用thymeleaf需引入 -->
<html xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<div  id="tableP">
    <table border="1">
        <caption>用户信息</caption>
        <tr>
            <th>id</th>
            <th>username</th>
            <th>password</th>
            <th>age</th>
        </tr>
        <!-- 通过th命令使用一些操作 -->
        <!-- 通过${} 使用变量 -->
        <tr  th:each="item: ${userList}">
            <td th:text="${{item.id}}"></td>
            <td th:text="${{item.username}}"></td>
            <td th:text="${{item.password}}"></td>
            <td th:text="${{item.age}}"></td>
        </tr>
    </table>
</div>
</div>
</body>
</html>

6、application.properties配置

 

# spring.application.name=demo

server.port=8282
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
## -------------------------------------------------

# SqlServer
#spring.datasource.url=jdbc:sqlserver://localhost:1433;database=Spring_Boot;useUnicode=true;characterEncoding=UTF-8;allowMultiQueries=true;serverTimezone=UTC
#spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
#spring.datasource.username=sa
#spring.datasource.password="123456"

# mysql
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=sa
spring.datasource.password=123456

 解释:

7、启动类上加一个MapperScan注解

 

@MapperScan("com.example.mapper")//对应自己Java下的mapper包的地址,就是最刚开始新建的

8、建表

表的字段:

然后在表里随便添加几条数据:

 四、重启项目

浏览器输入localhost:8282/user/getAllUser,成功显示出数据。【链接输入自己对应的,端口是8080,就改成8080的,然后/user/getAllUser是你在UserController里的

@RequestMapping("/user/getAllUser")

写的】。

恭喜你了^-^,至此已经完成一个springboot小案例了! 

五、出现的问题与异常

如果最后运行有错误的话可能文件位置写错了,可以仔细看下我的是怎么样的结构,也可能是依赖包导入的问题,有版本兼容问题,我这里把我的pom.xml文件发出来,可以参考一下【实在没用就直接用我发的代码进行测试吧,在下面有完整源码获取地址】

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>demo</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <builder>paketobuildpacks/builder-jammy-base:latest</builder>
                    </image>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

目录结构: 

六、完整项目获取地址

有些朋友实在不想动手,就直接戳下方链接获取完整源码吧。

springboot_first_demo: springboot从0到helloworld,再到数据库的连接以及将数据显示在网页上。 (gitee.com)icon-default.png?t=N7T8https://gitee.com/yq-leisure/demo

  • 34
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值