java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot整合SSM

SpringBoot整合SSM实战教程

作者:渡汪洋

还在为SpringBoot整合Spring、SpringMVC和MyBatis发愁吗,本文手把手教你从零搭建项目,包括启动类、配置文件、实体类序列化、Mapper接口与扫描等核心要点,让你轻松掌握SpringBoot开发全流程,需要的朋友可以参考下

一、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.HikariDataSource

application.properties的编写只能用空格来间隔,不能用tab键代替

driver-class-name:

url:

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.StdOutImpl

mapper-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的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文