目录
2、写一个mapper接口,写四个接口,增删改查。(我这里后面就以获取所有用户信息为例)
3、在Service包下新建一个UserService.java接口和impl实现包,再在impl里写一个实现UserService的实现类,UserServiceImpl.java。代码放下面了。
4、在Controller包下新建一个UserController.java。
5、写一个index页面,注意:要在template目录里建。
一、创建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>
目录结构:
六、完整项目获取地址
有些朋友实在不想动手,就直接戳下方链接获取完整源码吧。