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

目录

一、创建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的启动类: 

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

程序跑起来是这样的:

我们可以在浏览器里输入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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/469530.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯每日一题——棋盘

问题描述 小蓝拥有 n xn 大小的棋盘&#xff0c;一开始棋盘上全都是白子。小蓝进行了 m 次操作&#xff0c;每次操作会将棋盘上某个范围内的所有棋子的颜色取反(也就是白色棋子变为黑色&#xff0c;黑色棋子变为白色)请输出所有操作做完后棋盘上每个棋子的颜色。输入格式 输入的…

3.14_理解专业术语_3.18

分布式电源 风能、太阳能、生物质能等新能源的应用&#xff0c;有很大部分是分散式的&#xff0c;且容量较小。这些分散布置在电力负荷附近的、容量在数千瓦至数十兆瓦之间的、为环境兼容的、节能的发电装置&#xff0c;如燃气轮机、内燃机、小型光伏发电站、燃料电池、风力发电…

Docker知识--01

虚拟化 # 什么是虚拟化 在计算机中&#xff0c;虚拟化&#xff08;英语&#xff1a;Virtualization&#xff09;是一种资源管理技术&#xff0c;是将计算机的各种实体资源&#xff0c;如服务器、网络、内存及存储等&#xff0c;予以抽象、转换后呈现出来&#xff0c;打…

【计算机网络】IP 协议

网络层IP协议 一、认识 IP 地址二、IP 协议报头格式三、网段划分1. 初识子网划分2. 理解子网划分3. 子网掩码4. 特殊的 IP 地址5. IP 地址的数量限制6. 私有 IP 地址和公网 IP 地址7. 理解全球网络&#xff08;1&#xff09;理解公网&#xff08;2&#xff09;理解私网&#xf…

C语言---指针的两个运算符:点和箭头

目录 点&#xff08;.&#xff09;运算符箭头&#xff08;->&#xff09;运算符需要注意实际例子 C语言中的指针是一种特殊的变量&#xff0c;它存储了一个内存地址。点&#xff08;.&#xff09;和箭头&#xff08;->&#xff09;是用于访问结构体和联合体成员的运算符。…

[LeetBook]【学习日记】排序算法——归并排序

主要思想 归并排序是一种分治算法&#xff0c;其排序过程包括分和治分是指将要排序的序列一分为二、二分为四&#xff0c;直到单个序列中只有一个数治是指在分完后&#xff0c;将每两个元素重新组合&#xff0c;四合为二、二合为一&#xff0c;最终完成排序 图片作者&#xf…

SkiaSharp使用SKCanvas.DrawText绘制2D文本时部分字符渲染位置异常。

Skia是一个开源的 2D 图形库&#xff0c;支持多种平台和语言&#xff0c;可以用于绘制各种图形和效果&#xff0c;SkiaSharp是其.Net版本。 在绘制文本时&#xff0c;一般做法是&#xff1a; private void SkContainer_PaintSurface(object? sender, SkiaSharp.Views.Deskto…

Linux系统安装宝塔面板结合内网穿透实现公网登录本地面板——“cpolar内网穿透”

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具&#xff0c;适合新手&#xff0c;简单好用。当我们在家里/公司搭建了宝塔&#xff0c;没有公网IP&#xff0c;但是想要在外也可以访问内…

Midjourney 和 Dall-E 的优劣势比较

Midjourney 和 Dall-E 的优劣势比较 Midjourney 和 Dall-E 都是强大的 AI 绘画工具&#xff0c;可以根据文本描述生成图像。 它们都使用深度学习模型来理解文本并将其转换为图像。 但是&#xff0c;它们在功能、可用性和成本方面存在一些差异。 Midjourney 优势: 可以生成更…

攻防世界新手模式例题(Web)

PHP2 首先我们查看页面&#xff0c;查看前端代码 发现均没有什么有效信息&#xff0c;由题目可知&#xff0c;此问题与php相关&#xff0c;于是我们可以看一下他的index.php文件 查看时用?index.phps 补充知识&#xff1a;phps文件就是php的源代码文件&#xff0c;通常用于…

算法之位运算

常见的位运算操作: 首先先熟悉一下常见的位运算操作: 1. 基础位运算 左移<<, 右移>>, 按位与&, 按位或|, 按位异或^, 按位取反~ 注意: 异或其实是一种无进位相加. 2. 给定一个 n, 确定它的二进制表示中第x位是 0 还是 1 n & (1<<x) 或者 (n>…

消费者组大观:5种状态,1场分布式奇迹

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 消费者组大观&#xff1a;5种状态&#xff0c;1场分布式奇迹 前言EmptyDead状态处理 Dead 状态的策略&#xff1a;防范和恢复&#xff1a; PreparingRebalance处理 "PreparingRebalance" 状…

【Leetcode-102.二叉树的层序遍历】

题目详情&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例…

Linux软件管理(1)

软件管理 下载 wget Linux wget是一个下载文件的工具&#xff0c;它用在命令行下。 wget工具体积小但功能完善&#xff0c;它支持断点下载功能&#xff0c;同时支持FTP和HTTP下载方式&#xff0c;支持代理服务器和设置起来方便简单。 1.语法 wget [选项]……[URL]…… 2、…

React - 实现菜单栏滚动

简介 本文将会基于react实现滚动菜单栏功能。 技术实现 实现效果 点击菜单&#xff0c;内容区域会自动滚动到对应卡片。内容区域滑动&#xff0c;指定菜单栏会被选中。 ScrollMenu.js import {useRef, useState} from "react"; import ./ScrollMenu.css;export co…

【MATLAB源码-第165期】基于matlab的科莫多巨蜥算法(KMA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 科莫多巨蜥算法&#xff08;Komodo Mlipir Algorithm&#xff0c;简称KMA&#xff09;是一种受到印尼科莫多岛上独特生物——科莫多巨蜥启发的创新算法。尽管这个算法的名称听起来很有趣&#xff0c;但实际上它并不是一个公认…

写论文matplotlib使用同一色系的颜色

推荐网站 Colorsinspo - All in one resource for finding everything about colors | Colorsinspo 网页直接可以复制颜色 除此之外&#xff0c;自己还试了一个色系&#xff08;可惜不理想&#xff0c;看着不均匀&#xff09;&#xff0c;先存到这里 color_name [lightgr…

数据结构从入门到精通——直接插入排序

直接插入排序 前言一、直接插入排序的基本思想&#xff1a;二、直接插入排序的实例三、直接插入排序的动图展示四、直接插入排序的具体代码test.c 前言 直接插入排序是一种简单的排序算法&#xff0c;其工作原理是逐个将待排序元素插入到已排序序列中的适当位置&#xff0c;直…

7-初识Keras:轻松完成神经网络模型搭建

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享&#xff0c;严禁他用&#xff01;&#xff01;如有侵权&#xff0c;请联系删除 目录 一、知识引入 &#xff08;一&#xff09;矩阵和向量 1、向量 2、矩阵 &#xff08;二&#xff…