Springboot整合——创建一个项目并打通前后端
1.创建一个SpringBoot项目
参考博客:https://www.cnblogs.com/worthmove/p/16677878.html
2.完善文件结构
在新建项目基础上我们把文件结构完善成这个样子
3.新建数据库及其表文件
这部分不做过多介绍,新建的表结构如下:
4.完善pom.xml文件中的依赖
自动生成的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.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>bootdemo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>bootdemo</name> <description>bootdemo</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
我们在此基础上增加如下依赖:
分别为Mybatis相关依赖以及Mysql相关依赖。
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
5.在application.properties中添加数据库数据源等设置
#驱动的设置可以省略,sb内部会根据数据库自动设置启动 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/example spring.datasource.username=root spring.datasource.password=root #设置别名,mapper.xml中就不需要再写全路径名了 mybatis.type-aliases-package=com.example.bean #设置mapper.xml文件的路径 mybatis.mapper-locations=classpath:mybatis/mapper/*.xml #设置tomcat端口号,默认是8080 server.port=8080
6.新建AppConfig类,作为Spring IOC容器
创建路径为com.example。
因为我们可以用@SpringBootApplication下的@ComponentScan注解来自动将@Controller、@Service等类注册为bean。所以这个类暂时用不到。
@Configuration public class AppConfig { }
7.创建bean类
com.example.bean下创建Books类,代码如下:
package com.example.bean; public class Books { private int bookId; private String bookName; private int bookCount; private String detail; public int getBookId() { return bookId; } public void setBookId(int bookId) { this.bookId = bookId; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public int getBookCount() { return bookCount; } public void setBookCount(int bookCount) { this.bookCount = bookCount; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } }
8.创建BookMapper接口
在com.example.dao文件下创建BookMapper接口,代码如下:
@Mapper
@Repository(这里也可以使用@Component) public interface BookMapper { int addBook(Books book); List<Books> getAllBooks(); Books getBookById(int bookId); int deleteBook(int bookId); int updateBook(Books book); }
@Mapper注解是由Mybatis框架中定义的一个描述数据层接口的注解,注解往往起到的都是一个描述性作用,用于告诉sprigng框架此接口的实现类由Mybatis负责创建,并将其实现类对象存储到spring容器中。
9.创建BookMapper.xml文件
在Resources/mybatis/mapper/文件夹下新建BookMapper.xml文件,这里要注意的是,创建文件夹时mybatis.mapper这个文件夹一定要分层创建,不能创建一个文件夹直接写mybatis.mapper,这样就成了一个文件夹叫这个名字而不是分级目录了,内容如下:
<?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"> <!-- 这里的namespace是BookMapper接口所在路径--> <mapper namespace="com.example.dao.BookMapper"> <!-- 这里Books不用写路径时因为设置了别名 --> <!-- 这个方法的返回值为int,是基本类型所以不用resultType参数,引用类型需要用--> <insert id="addBook" parameterType="Books"> insert into example.books(bookName,bookCounts,detail) values (#{bookName},#{bookCounts},#{detai}); </insert> <delete id="deleteBook" parameterType="Integer"> delete from example.books where bookId = #{id}; </delete> <update id="updateBook" parameterType="Books"> update example.books set <if test="bookName != null"> bookName = #{bookName} </if> <if test="bookName != null"> ,bookCounts = #{bookCounts} </if> <if test="bookName != null"> ,detail = #{detail} </if> where bookId = #{bookId}; </update> <select id="getBookById" parameterType="int" resultType="Books"> select * from example.books where bookId = #{id}; </select> <select id="getAllBooks" resultType="Books"> select * from example.books; </select> </mapper>
10.创建service层的类
service接口代码如下:
public interface BookService { int addBook(Books book); List<Books> getAllBooks(); Books getBookById(int bookId); int deleteBook(int bookId); int updateBook(Books book); }
service接口实现类代码如下:
@Service("bookService") public class BookServiceImpl implements BookService{ @Autowired private BookMapper bookMapper; public int addBook(Books book) { return bookMapper.addBook(book); } public List<Books> getAllBooks() { return bookMapper.getAllBooks(); } public Books getBookById(int bookId) { return bookMapper.getBookById(bookId); } public int deleteBook(int bookId) { return bookMapper.deleteBook(bookId); } public int updateBook(Books book) { return bookMapper.updateBook(book); } }
11.创建controller层的类
@RestController @RequestMapping("/book") public class BookController { //@Autowired是按照类型来注入的;@Qualifier是按照名称来注入的,本属性是与@Service对应来使用的 //如果是用xml或者类的方式而不是用扫描的话,会有name属性和类名的 @Autowired @Qualifier("bookService") private BookService bookService; @RequestMapping("/getBooks") public List<Books> getBooks() { return bookService.getAllBooks(); } }
12.在浏览器中尝试运行