Spring、SpringMVC、Mybatis框架整合配置SSM模板

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

**开源地址:https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB **

<context:component-scan base-package=“com.sangeng”>

<context:exclude-filter type=“annotation” expression=“org.springframework.stereotype.Controller”></context:exclude-filter>

</context:component-scan>

<context:property-placeholder location=“classpath:jdbc.properties”></context:property-placeholder>

aop:aspectj-autoproxy</aop:aspectj-autoproxy>

<tx:annotation-driven transaction-manager=“transactionManager”></tx:annotation-driven>

  • 这里 mapper 扫描配置的是扫描 com.sangeng.dao 这个包,所以我们新建 dao 包

在这里插入图片描述

  1. 在resources目录下创建jdbc.properties 文件,内容如下:

在这里插入图片描述

在这里插入图片描述

jdbc.url=jdbc:mysql://localhost:3306/mybatis_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC

jdbc.driver=com.mysql.jdbc.Driver

jdbc.username=root

jdbc.password=123456

  1. 在resources目录下创建mybatis-config.xml ,内容如下:

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>

  • 配置里面为 com.sangeng.domain 包配置了别名,所以我们在 com.sangeng 下建一个 domain 包

在这里插入图片描述

  1. 在resources目录下创建log4j.properties ,内容如下:

在这里插入图片描述

在这里插入图片描述

#将等级为DEBUG的日志信息输出到stdout,stdout定义在下面的代码

log4j.rootLogger=debug, stdout

#控制台输出的相关设置

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

#文件输出的相关设置

log4j.appender.file=org.apache.log4j.FileAppender

log4j.appender.file.File=./log/mylog.log

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

②SpringMVC引入

  1. 在resources目录下创建spring-mvc.xml ,内容如下:

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:context=“http://www.springframework.org/schema/context”

xmlns:mvc=“http://www.springframework.org/schema/mvc”

xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd”>

<context:component-scan base-package=“com.sangeng.controller”/>

mvc:default-servlet-handler/

mvc:annotation-driven

mvc:message-converters

</mvc:message-converters>

</mvc:annotation-driven>

  • 上方配置了 SpringMVC 扫描 controller包 ,所以我们要在 sangeng 下新建包 controller

在这里插入图片描述

  1. 最后修改web.xml文件
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns=“http://xmlns.jcp.org/xml/ns/javaee”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd”

version=“4.0”>

DispatcherServlet

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:spring-mvc.xml

1

DispatcherServlet

/

CharacterEncodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

CharacterEncodingFilter

/*

③Spring整合入web项目

让web项目启动的时候就能够创建Spring容器。可以使用Spring提供的监听器ContextLoaderListener,所以我们需要再 web.xml 中配置这个监听器,并且配置上Spring配置文件的路径。

在这里插入图片描述

contextConfigLocation

classpath:applicationContext.xml

org.springframework.web.context.ContextLoaderListener

这样我们的SSM整合配置层面就已经完成了,接下来我们编写测试

1.4、编写Controller,Service,Dao


我们来编写根据id查询用户的接口来进行测试

先有 Controller,请求过来被 Controller 里面的 Handler 所处理,在 Handler中 通过 Service 处理,Service 内部又会依赖 dao 去进行数据库的查询,dao 是使用 Mybatis 的写法

所以我们先写 Controller, 再写Service接口,实现Service接口中的方法,并且在Service实现类中注入dao,再去写dao,再去写对应的xml映射文件

1.4.1、编写实体类domain

  • com.sangeng.domain.User.java 代码如下

@Data

@NoArgsConstructor

@AllArgsConstructor

public class User {

// 这里的属性和我们数据库的属性是一一对应的

private Integer id;

private String username;

private Integer age;

private String address;

}

1.4.2、编写Service

  • com.sangeng.service.UserService 接口 ,代码如下

public interface UserService {

User findById(Integer id);

}

  • com.sangeng.service.impl.UserServiceImpl 实现类代码如下

@Service

public class UserServiceImpl implements UserService {

@Autowired

private UserDao userDao;

public User findById(Integer id) {

return userDao.findById(id);

}

}

  • @Service 注解使用在Service层类上用于实例化Bean,设置该类为spring管理的bean

  • @Autowired 注解使用在字段上上用于根据类型依赖注入,为了从Spring容器中获得此对象

1.4.3、编写dao

  • com.sangeng.dao.UserDao接口,代码如下

public interface UserDao {

/**

  • 根据id查询用户

  • @param id

  • @return

*/

User findById(Integer id);

}

  • 针对接口生成对应的 mapper 映射文件,resources -> 右键 -> new Directory 生成对应的 mapper 目录

在这里插入图片描述

  • 插件的存在可以帮我们一键生成 mapper.xml 映射文件,alt+回车 ,选择插件

在这里插入图片描述

  • 选择 mapper.xml 生成的位置

在这里插入图片描述

  • 之后继续在方法上 alt + 回车

在这里插入图片描述

  • 这样我们只需要在生成的 mapper.xml 中写 sql 语句即可

在这里插入图片描述

  • 所以 resources/com/sangeng/dao/UserDao.xml 代码如下:
<?xml version="1.0" encoding="UTF-8" ?>

select * from user where id = #{id}

1.4.4、1.4.4、编写Controller

需求:根据 id 去查询用户

  • Controller 是没法查询数据库的,需要依赖 service,所以需要先创建 service接口和实现类

  • service 实现类需要依赖 dao 层去查询数据库

  • dao 是用 mybatis 来查询数据库的操作


  • 所以 com.sangeng.controller.UserController ,代码如下:

// @Controller + @ResponseBody = @RestController

@RestController

public class UserController {

@Autowired

private UserService userService;

@GetMapping(“/user/{id}”)

public User findById(@PathVariable Integer id){

User user = userService.findById(id);

return user;

}

}

  • @Controller 注解使用在web层类上用于实例化Bean,设置该类为springMVC管理的bean

  • @ResponseBody 注解把返回值转换成 Json 格式放到响应体中。

  • @Controller + @ResponseBody = @RestController

  • @RequestMapping 注解是为了设置请求路径

  • @Autowired 注解使用在字段上上用于根据类型依赖注入,为了从Spring容器中获得此对象

  • @PathVariable 注解是获取请求路径的参数

  • 最后我们在 pom.xml 中配置一下 tomcat插件

org.apache.tomcat.maven

tomcat7-maven-plugin

2.1

80

/

utf-8

在这里插入图片描述

访问测试:

在这里插入图片描述

当然我们也可以不配置 tomcat 插件,而是将 tomcat 集成到 IDEA 中启动

在这里插入图片描述

2、案例

======================================================================

2.1、响应格式统一


我们要保证一个项目中所有接口返回的数据格式的统一。这样无论是前端还是移动端开发获取到我们的数据后都能更方便的进行统一处理。我们这里是将所有的数据格式统一为 json 格式。

所以我们定义以下结果封装类 ResponseResult,由于格式统一是公用的,所以我们可以在 com.sangeng 下创建一个公共 common 包,在包下创建结果封装类 ResponseResult

  • @JsonInclude(JsonInclude.Include.NON_NULL) 注解表示如果某个属性的值不为NULL,才会将其转化为Json格式

// 加上此注解,如果某个属性的值不为NULL,才会将其转化为Json格式

@JsonInclude(JsonInclude.Include.NON_NULL)

public class ResponseResult {

/**

  • 状态码

*/

private Integer code;

/**

  • 提示信息,如果有错误时,前端可以获取该字段进行提示

*/

private String msg;

/**

  • 查询到的结果数据(不同接口查询的类型不一样,所以我们可以设为泛型)

*/

private T data;

// 三个参数的有参构造(查询操作需要返回查询的数据data)

public ResponseResult(Integer code, String msg, T data) {

this.code = code;

this.msg = msg;

this.data = data;

}

// 两个参数的有参构造(状态码和提示信息)

public ResponseResult(Integer code, String msg) {

this.code = code;

this.msg = msg;

}

// 两个参数的有参构造(状态码和数据)

public ResponseResult(Integer code, T data) {

this.code = code;

this.data = data;

}

public Integer getCode() {

return code;

}

public void setCode(Integer code) {

this.code = code;

}

public String getMsg() {

return msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

public T getData() {

return data;

}

public void setData(T data) {

this.data = data;

}

}

所以我们将之前的 controller 查询 id 为1返回的查询数据进行封装,修改代码如下 :

  • 返回类型为我们封装的结果集 ResponseResult 类型

@RestController

public class UserController {

@Autowired

private UserService userService;

@GetMapping(“/user/{id}”)

public ResponseResult findById(@PathVariable(“id”) Integer id){

User user = userService.findById(id);

if(user==null){

//说明没有对应的用户

return new ResponseResult(500,“没有该用户”);

}

return new ResponseResult(200,“操作成功”,user);

}

}

访问测试:

  • tomcat 插件启动展示:

在这里插入图片描述

  • IDEA 集成 tomcat 展示:

在这里插入图片描述

在这里插入图片描述

2.2、查询所有用户


  • 在Controller层调用Service中的方法

@RestController

public class UserController {

@Autowired

private UserService userService;

// 查询所有用户

@GetMapping(“/user”)

public ResponseResult findAll(){

List list = userService.findAll();

return new ResponseResult(200,“操作成功”,list);

}

}

  • Service接口如下

public interface UserService {

// 根据 id 查询用户

User findById(Integer id);

// 查询所有用户

List findAll();

}

  • 在Service实现类中调用dao中的方法

@Service

public class UserServiceImpl implements UserService {

@Autowired

private UserDao userDao;

//省略其他无关代码

public List findAll() {

return userDao.findAll();

}

}

  • dao层接口如下:

public interface UserDao {

// 查询所有用户

List findAll();

}

  • dao层利用插件生成 mapper.xml 文件如下
<?xml version="1.0" encoding="UTF-8" ?>

select * from user

tomcat 插件启动展示:

在这里插入图片描述

IDEA 集成 tomcat 展示:

在这里插入图片描述

2.3、分页查询用户


分页查询的结果除了要包含查到的用户数据外还要有当前页数,每页条数,总记录数这些分页数据。

所以我们在 common 包下新建分页封装类 PageResult,代码如下:

在这里插入图片描述

public class PageResult {

// 当前页数

private Integer currentPage;

// 每页条数

private Integer pageSize;

// 总记录数

private Integer total;

// 分页数据

private List data;

public PageResult(Integer currentPage, Integer pageSize, Integer total, List data) {

this.currentPage = currentPage;

this.pageSize = pageSize;

this.total = total;

this.data = data;

}

public Integer getCurrentPage() {

return currentPage;

}

public void setCurrentPage(Integer currentPage) {

this.currentPage = currentPage;

}

public Integer getPageSize() {

return pageSize;

}

public void setPageSize(Integer pageSize) {

this.pageSize = pageSize;

}

public Integer getTotal() {

return total;

}

public void setTotal(Integer total) {

this.total = total;

}

public List getData() {

return data;

}

public void setData(List data) {

this.data = data;

}

}

  • 编写Controller类,调用Service层的方法

@RestController

public class UserController {

@Autowired

private UserService userService;

@GetMapping(“/user/{pageSize}/{pageNum}”)

public ResponseResult findByPage(@PathVariable(“pageSize”) Integer pageSize,@PathVariable(“pageNum”) Integer pageNum){

PageResult pageResult = userService.findByPage(pageSize,pageNum);

return new ResponseResult(200,“操作成功”,pageResult);

}

}

  • 编写Service实现类,调用Dao层的方法

@Service

public class UserServiceImpl implements UserService {

@Autowired

private UserDao userDao;

public PageResult findByPage(Integer pageSize, Integer pageNum) {

PageHelper.startPage(pageNum,pageSize);

List list = userDao.findAll();

PageInfo pageInfo = new PageInfo(list);

PageResult pageResult = new PageResult(pageInfo.getPageNum(),pageInfo.getPageSize(), (int) pageInfo.getTotal(),list);

return pageResult;

}

}

在这里插入图片描述

在这里插入图片描述

2.4、插入用户


①编写 Controller 层,调用 service 层方法

  • 我们是在请求体中传入Json格式的数据,@RequestBody 注解可以获取请求体中的数据

// 插入用Post请求

@PostMapping(“/user”)

public ResponseResult insertUser(@RequestBody User user){

userService.insertUser(user);

return new ResponseResult(200,“操作成功”);

}

②编写 Service 层,在 service 实现类中调用 dao 方法

  • 在Service接口中增加方法定义

void insertUser(User user);

  • 实现类中实现该方法:

public void insertUser(User user) {

userDao.insertUser(user);

}

③编写 Dao 层,使用插件生成 mapper.xml 映射文件

  • 在接口中定义方法

void insertUser(User user);

  • 在mapper映射文件中
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值