SpringBoot实践(二)——项目搭建(SSM基础)
前言
上一篇笔记中记录了搭建SpringBoot的基本操作,本篇笔记记录SpringBoot整合SSM的相关基本操作,因为是实践笔记,所以依旧保证上一篇笔记的风格:理论概念解释说明尽量在注释里,总结中会有相关理论总结以及实践时候的注意事项。
SpringBoot整合SSM
步骤
- 创建项目:为了快速可以直接使用Spring快速生成工具来创建SpringBoot项目;
- 引入相关依赖:
<!--SpringMVC-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.1</version>
</dependency>
<!--mysql连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--druid数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
- 书写配置文件:
server:
# 启动端口号
port: 8081
servlet:
# 项目启动名
context-path: /springboot-ssm
spring:
datasource:
# 数据库连接驱动配置
driver-class-name: com.mysql.cj.jdbc.Driver
# 数据库连接池类型
type: com.alibaba.druid.pool.DruidDataSource
# 数据库账户名
username: root
# 数据库账户密码
password: 123456
# 数据库名及连接参数相关配置
url: jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf-8
- 建立各层包:
【注】:第一张图中是基础的包路径配置结构,第二章是MyBatis映射文件的路径。要注意,MyBatis的接口路径和MyBatis的映射文件的路径必须同一层;映射文件一般放在resources中,在这里并没有new package操作,我们需要通过new directory 操作来生成目录,其中级联生成文件的路径名应该类似:com/xxx/mapper
,这一点尤为重要,否则会出问题。
- 定义实体,书写mapper接口:
在entity和mapper中定义和数据库表中对应的字段的实体类以及实体类对应的mapper接口。
- 生成MyBatis接口文件以及映射文件:
File -> Editor -> File and Code Templates
,然后点击+
就可以自定义文件模板了,MyBatis模板在下面,自行配置。
<?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="${NAMESPACE}" >
</mapper>
配置完成后就可以在新建下拉栏中找到我们自定的文件模板。
- 入口类中添加Mybatis接口扫描注释
@SpringBootApplication
// 该注释帮助扫描mapper接口
@MapperScan("com.xxx.mapper")
public class Springboot22115Application {
public static void main(String[] args) {
SpringApplication.run(Springboot22115Application.class, args);
}
}
-
将SSM中各层的类都准备完:
entity:
// 实体类实现的Serializable 接口是一种标记接口,它的作用是将数据库中查询到的数据注入到该类实现的对象中
@Component
public class Student implements Serializable{
private String sid;
private String sname;
private Integer sage;
private String tid;
public Student() {
}
public Student(String sid, String sname, Integer sage, String tid) {
this.sid = sid;
this.sname = sname;
this.sage = sage;
this.tid = tid;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Integer getSage() {
return sage;
}
public void setSage(Integer sage) {
this.sage = sage;
}
public String getTid() {
return tid;
}
public void setTid(String tid) {
this.tid = tid;
}
@Override
public String toString() {
return "Student{" +
"sid='" + sid + '\'' +
", sname='" + sname + '\'' +
", sage=" + sage +
", tid='" + tid + '\'' +
'}';
}
}
controller:
@RestController
public class TestStudent {
@Autowired
// 按照容器中的对象名来注入
@Qualifier(value = "testServiceImpl")
private TestService testService;
// 官方推荐用法
// @Autowired
// public TestStudent(TestService testService) {
// this.testService = testService;
// }
@RequestMapping("showAll")
public String showAll(){
List<Student> studentList = testService.showAll();
studentList.forEach(student-> System.out.println(student));
return "success";
}
}
service:
// 新建Service接口
public interface TestService {
List<Student> showAll();
}
// 新建Service实体类实现接口
@Service
public class TestServiceImpl implements TestService {
private TestMapper testMapper;
@Autowired
public TestServiceImpl(TestMapper testMapper) {
this.testMapper = testMapper;
}
@Override
public List<Student> showAll() {
return testMapper.selectAll();
}
}
mapper:
public interface TestMapper {
public List<Student> selectAll();
}
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.lee.mapper.TestMapper">
<select id="selectAll" resultType="com.lee.entity.Student">
select * from `student`
limit 0,10
</select>
</mapper>
到这里我们可以试一试我们的项目能否启动成功了,注意实体类和成员变量与自己的是否对应。
总结
- 如果引入了MySQL的依赖,则必须在配置文件中书写数据库连接参数,否则会报错;
- 现今MySQL连接驱动官方推荐使用
com.mysql.cj.jdbc.Driver
,用以前的也不会报错; - 使用MyBatis一定要在入口类上添加
MapperScan(“com.xxx.mapper”)
; - MyBatis接口文件和MyBatis映射文件一定要在同一个文件目录下,且resources下新建目录需要用
/
来分割; - Service接口层不要
@Service
,该注解要加载实际实现功能的Service实现类; - Serializable接口是一种标记接口,标记接口是不存在任何执行代码的接口,他的作用暂时按照注释中记录的功能来说,等到后面说明JVM底层原理的时候会对这一类型问题进行相关说明。