SpringBoot整合SSM实战教程
作者:渡汪洋
一、SpringBoot整合Spring、SpringMVC案例的搭建
(一)创建启动类
Springboot启动tomcat是需要启动类的,可以创建在第三级,通常类名和项目名一致。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootMavenDemo {
public static void main(String [] args){
SpringApplication.run(SpringBootMavenDemo.class,args);
}
}需要用到
@SpringBootApplication注解(相当于下边三个注解加在一起)
·@SpringBootConfiguration标明配置类
·@EnableAutoConfiguration自动加载、自动装配、自动创建 bean
·@ComponentScan自动扫描当前包及子包下所有的管理注解
主方法里写SpringApplication.run(SpringBootMavenDemo.class,args);
对于主方法里的参数解释
args
·arguments(参数)
·是一个字符串数组(String[]),用来接受在命令行运行程序时,传递给程序的参数
例子:
运行 java MyProgram 张三 123
在main方法里:
·arg[0]就等于”张三”
·arg[1]就等于”123”
(二)配置application.yaml
- 配置端口号
- 配置视图解析器
server:
port: 8085
spring:
mvc:
view:
prefix: /templates/
suffix: .html(三)HelloController
package com.qcby.springboot_maven_demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/say")
public class HelloController {
@RequestMapping("/hello")
public String sayHello(){
System.out.println("SpringBoot的接口访问成功!!");
return "suc";
}
}(四)suc.html
在resources下边创建templates目录,在这个目录下放页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SpringBoot访问成功</title>
</head>
<body>
<h1>SpringBoot访问成功!!!</h1>
</body>
</html>(五)启动启动类,在浏览器调用接口

二、SpringBoot整合 MyBaits案例
以前边的模板为基础,我们需要用springboot框架来整合MyBaits操作数据库
(一)先导入依赖
既然要使用MyBaits,就要导入MyBaits的依赖
<!--整合mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency>
既然要操作数据库,就要导入mysql的依赖
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
Maven视图:

可见mybatis-start里有jdbc的依赖...
(二)application.properties配置文件
1.配置数据源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring_db?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
username: root
password: 2020
type: com.zaxxer.hikari.HikariDataSourceapplication.properties的编写只能用空格来间隔,不能用tab键代替
driver-class-name:
- 高版本的mysql依赖:com.mysql.cj.jdbc.Driver
- 低版本的mysql依赖:com.mysql.jdbc.Driver
url:
- 高版本mysql:jdbc:mysql://localhost:3306/数据库名?时区
- 低版本mysql:jdbc:mysql://localhost:3306/数据库名
- username
- password
type:数据源类型
2.配置mybatis的信息
mybatis:
mapper-locations: classpath:mappers/*.xml
type-aliases-package: com.qcby.springbootdemo_maven.entity
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImplmapper-locations:指出你书写sql的mapper文件在哪里
type-aliases-package:实体类别名包扫描配置,专门简化mapper.xml里的实体类全类名
实体类:com.qcby.entity.User
配置后:User或user
configuration:
log-impl:配置好myBatis开启控制台SQL打印日志
(三)log4j.properties
配log4j日志信息
log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
(四)根据数据库字段编写实体类Account
package com.qcby.springbootdemo_maven.entity;
import java.io.Serializable;
public class Account implements Serializable { //实现序列化
private Integer id;
private String name;
private Double money;
//有参+无参构造器
//Getter&Setter方法
//toString()方法
}为什么要加Serializable实现 序列化?
作用:开启Java对象序列化功能,把内存里的Java对象转成二进制字节,方便传输、存储、缓存。
序列化是什么?
序列化:对象->字节数组(存/发)
反序列化:字节数组->还原Java对象(取/收)
什么时候必须写?
1.存入Session会话(登录信息放session)
2.Redis缓存对象(SpringCache存实体类)
3.远程调用传输对象(RPC、微服务传参)
4.对象写入文件/网络传输
5.MyBaits缓存、二级缓存
为什么实体类要写?
SpringBoot+MyBatis项目约定习惯:
数据库映射实体类统一实现序列化,避免以后用到缓存、session、远程调用报错。
不加上会怎么样?
如果只是普通的增删改查,单纯查询数据库而不涉及缓存,那么不实现序列化也能正常运行。
但一旦需要将对象存入 Session、Redis 缓存或进行远程传输,就会直接抛出序列化异常。
总结
实体类实现Serializable 接口是为了实现 Java 序列化,让对象能够序列化转为二进制数据,支持存入 Session、Redis 缓存、网络远程传输,防止程序运行时抛出序列化异常,同时添加版本号保证实体类字段修改后反序列化兼容。
(五)编写持久层的AccountMapper接口
在AccountMapper里编写findAll方法,并且在接口上边加上@Mapper注解
package com.qcby.springbootdemo_maven.mapper;
import com.qcby.springbootdemo_maven.entity.Account;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface AccountMapper {
List<Account> findAll();
}@Mapper注解:
把当前接口 交给MyBaits管理,自动生成Mapper代理对象,无需实现类
(六)mappers下的AccountMapper
<?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.qcby.springbootdemo_maven.mapper.AccountMapper">
<select id="findAll" resultType="Account">
select * from account
</select>
</mapper>(七)编写服务层 AccountService接口和AccountServiceImpl实现类
我们要实现对数据库spring_db的account表的查询,在service接口里编写findAll方法
package com.qcby.springbootdemo_maven.service;
public interface AccountService {
public void findAll();
}让实现类AccountServiceImpl来实现AccountService的findAll方法
package com.qcby.springbootdemo_maven.service.impl;
import com.qcby.springbootdemo_maven.entity.Account;
import com.qcby.springbootdemo_maven.mapper.AccountMapper;
import com.qcby.springbootdemo_maven.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountMapper accountMapper;
@Override
public void findAll() {
System.out.println("AccountServiceImpl的findAll方法执行了!!!");
List<Account> accounts = accountMapper.findAll();
for (Account account : accounts) {
System.out.println(account);
}
}
}在Impl里自动注入AccountMapper对象,然后在findAll方法中通过accountMapper对象调用findAll()方法,拿到结果,最后遍历结果打印到控制台。
(八)表现层AccountController的编写
我们在表现层里具体配置 一二级路径和实现方法,在访问浏览器的时候就能映射到对应方法然后执行。
package com.qcby.springbootdemo_maven.controller;
import com.qcby.springbootdemo_maven.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/account")
public class HelloController {
@Autowired
private AccountService accountService;
@RequestMapping("/hello")
public String sayHello(){
System.out.println("表现层HelloController!!");
return "suc";
}
@RequestMapping("/findAll")
public String findAll(){
accountService.findAll();
return "suc";
}
}(九)SpringBootDemo_Maven启动类
在@SpringBootApplication注解下加上第二个注解
@MapperScan(“包1”,”包2”)
@MapperScan("com.qcby.springbootdemo_maven.mapper")·@MapperScan:批量扫描整个Mapper包,不用每个Dao(Mapper)接口都手动写@Mapper
直接扫描整个mapper下所有接口,全部交给MyBatis生成动态代理对象
(十)启动然后在浏览器访问路径来调用方法
/account/hello

/account/findAll


以上就是SpringBoot整合SSM实战教程的详细内容,更多关于SpringBoot整合SSM的资料请关注脚本之家其它相关文章!
