Springboot整合SSM

SpringBoot企业级开发

课程介绍
主要内容:构建SpringBoot项目、核心配置与注解、数据访问
1.第一章:Spring Boot开发入门

1.学习目标
了解Spring Boot的优点。
掌握Spring Boot的项目构建。
熟悉Spring Boot的自动化配置原理以及执行流程。
掌握Spring Boot 的单元测试和热部署。

2.Spring Boot 概述
Spring Boot是Spring家族的一个子项目,其设计初衷是为了简化Spring配置,从而可以轻松构建独立运行的程序,并极大提高开发效率。
Spring Boot是基于Spring框架开发的全新框架,其设计目的是简化Spring应用的初始化搭建和开发过程。
Spring Boot整合了许多框架和第三方库配置,几乎可以达到“开箱即用”。
Spring Boot 优点
可快速构建独立的Spring应用
直接嵌入Tomcat、Jetty服务器(无需部署WAR文件)
提供依赖启动器简化构建配置
极大程度的自动化配置Spring和第三方库

使用Springboot整合SSM开发项目
一、创建一个SprigBoot项目
1、使用maven创建springboot项目
2、在idea创建springboot项目时,选择web和myabtis等组件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

创建项目成功后,直接启动,看运行日志。
遇到下面错误:
在这里插入图片描述

那么就在File->settings里面设置:

在这里插入图片描述

启动后发现报错:
Description:

Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class
报错的原因是:添加了mybatis组件,但是没有对其进行配置数据源。
注意:如果在Idea里面无法创建SpringBoot项目,那么我们可以使用网页在线创建SpringBoot项目,然后在导入到Idea中,步骤如下:

然后把demo.Zip下载,解压,导入到Idea中,在点击Maven->reimport重新导入依赖包。这样就创建好一个springboot项目

二、配置mybatis数据源
1)在主配置application.properties文件里面进行配置

#mysql8.0+
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#mysql8.0一下版本
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/cdcd?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
如果编译时遇到下面报错:

那么修改pom.xml文件,添加指定maven编译版本

在这里插入图片描述

重新启动,发现启动成功
1)写一个简单的controller进行测试
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(“/user”)
public class UserController {
@RequestMapping(“/show”)
@ResponseBody
public String show(){
return “hello springboot”;
}
@RequestMapping(“/show_register_page”)
public String show_register_page(){
return “register”;
}
}

三、添加支持jsp
1.在pom.xml文件中添加依赖

org.springframework.boot spring-boot-starter-tomcat provided javax.servlet javax.servlet-api javax.servlet jstl org.apache.tomcat.embed tomcat-embed-jasper org.apache.tomcat tomcat-jsp-api

注意:重新reimport一下
2.设置Springmvc
在主配置文件里面添加设置
#mvc设置
spring.mvc.view.prefix=/jsp/
spring.mvc.view.suffix=.jsp

3 src/main下面创建一个文件目录webapp/jsp,然后添加一个register.jsp文件
3.测试
重启后,访问测试
1)http://localhost:8081/user/show

2)http://localhost:8081/user/show_register_page

四、添加mybatis配置
1、在application.properties配置mybats
#mybatis配置
#配置实体类别名包路径
mybatis.type-aliases-package=com.example.demo.entity

配置mapper映射文件的路径

mybatis.mapper-locations=classpath:mapper/*.xml

配置后台打印日志

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#开启驼峰映射
mybatis.configuration.map-underscore-to-camel-case=true
2、添加server、mapper和实体类
1)添加entity目录,并在里面添加一个user类

2)添加一个service目录,并在里面添加一个UserService接口,然后在添加一个impl目录,并在这个目录下面添加一个UserServiceImpl类实现UserService接口,然后写上2个方法
public User findById(int id)
public void create(User user)

3)创建一个mapper,然后添加一个UserMapper接口

注意:为了方便,我们可以在启动类上面添加一个注解@MapperScan,这样就可以不要在每个Mapper接口类上面添加@Mapper了,如下:

然后在UserServiceImpl调用UserMapper接口方法

在resources里面添加一个mapper目录,然后在下面添加一个UserMapper.xml文件,添加mybatis语句

3、创建表

4、测试
注册用户成功
5、更新数据
步骤1:新建一个jsp页面edituser.jsp

<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

<title>管理员注册</title>

<script>
    function checkPwd(){
        // var pwd=document.frm.pwd.value;
        // var pwd_confirm=document.frm.pwd_confirm.value;
        // if(pwd!=pwd_confirm){
        //     alert("两次密码不一致!");
        //     return false;
        // }
        // return true;
    }
</script>

<style>
    .register_top{
        background-color: #383d41;
        height: 50px;
        color: white;
    }
    .container{
        margin-top: 10%;
        width: 35%;
    }
    .btn-primary{
        background-color: #007bff;
        border-color: #0b2e13;
    }
    label{
        font-size: large;
    }
</style>
图书馆管理系统 登录

修改管理员信息

<form name="frm" action="/user/doedituser" method="post" onsubmit="return checkPwd();">
    <div>
        <table>
            <tr><td width="30%"><label>姓&nbsp;&nbsp;&nbsp;&nbsp;名:</label></td><td width="70%"><input type="text" value="${user.username}" name="username" required  maxlength="50"></td></tr>
            <tr><td width="30%"><label>昵&nbsp;&nbsp;&nbsp;&nbsp;称:</label></td><td width="70%"><input type="text" value="${user.nickName}" name="nickName" required  maxlength="20"></td></tr>
            <tr><td><label>电&nbsp;&nbsp;&nbsp;&nbsp;话:</label></td><td><input type="text" value="${user.tel}" name="tel" required  maxlength="50"></td></tr>
            <tr><td><label>密&nbsp;&nbsp;&nbsp;&nbsp;码:</label></td><td><input type="password" value="${user.password}" name="password" required  maxlength="50"></td></tr>
            <tr><td><label>性&nbsp;&nbsp;&nbsp;&nbsp;别:</label></td><td><input type="text" value="${user.sex}" name="sex" required  maxlength="50"></td></tr>
            <tr><td colspan="2">&nbsp;</td></tr>
            <tr><td colspan="2">&nbsp; <span style="color: red">${error_msg}</span></td></tr>
            <tr><td></td><td>
                <input type="hidden" name="id" value="${user.id}">
                <button class="btn btn-log btn-primary btn-dark" type="submit" >更新</button></td></tr>
        </table>
    </div>
</form>

步骤2:UserController里面编写更新函数,Service层自己写
// http://localhost:8081/user/edituserpage?id=3
@RequestMapping(“/edituserpage”)
public String showEditUserPage(int id, Map<String,Object> map){
User dbUser = userService.findById(id);
if(dbUser!=null){
map.put(“user”,dbUser);
}
return “edituser”;
}

@RequestMapping(“/doedituser”)
@ResponseBody
public String doEditUser(User user){
User dbUser = userService.findById(user.getId());
if(dbUser!=null){
userService.update(user);
}
return “修改用户信息成功”;
}
步骤3:UserMapper.xml里面编程执行sql

update user set
username=#{username},
password=#{password},
nick_name=#{nickName},
sex=#{sex},
tel=#{tel}
where
id=#{id}

6、删除数据
步骤1:UserController新增删除方法,Service层自己写
// http://localhost:8081/user/dodeleteuesr?id=3
@RequestMapping(“/dodeleteuesr”)
@ResponseBody
public String doDeleteUser(int id){
userService.deleteUserById(id);
return “删除用户信息成功”;
}
步骤2:UserMapper.java里面添加执行删除的语句
@Delete(“delete from user where id=#{id}”)
public void deleteUserById(int id);

7、解决注入mapper标红
在mapper接口上加上@Component注解,如下:

注意:如果在启动项目的时候出现下面的报错,那么需要到启动类里面,点击右键选择启动。或者再次启动项目。

注意:

Mapper.xml里面的命名课件值填写的时候,不能有前后空格,否则会报错
五、添加springmvc配置

1、在Springboot里面添加自定义的拦截器
步骤:1)添加一个拦截器,编写拦截的业务,2)添加一个配置类MyConfig,然后现实WebMvcConfigurer接口。
//步骤1:写一个Interceptor
public class AdminAuthInterceptor implements HandlerInterceptor {

//拦截前:进入controller控制器之前执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println(“AdminAuthIntercepter preHandle”);
return true;
}

//拦截后:controller控制器执行之后
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println(“AdminAuthIntercepter postHandle”);
}

//返回内容之后执行
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println(“AdminAuthIntercepter afterCompletion”);
}

}
//步骤2:写一个配置类com.hwadee.netstore.config.MyConfig
//步骤3:在这个配置类里面注册自定义的拦截器

//步骤3.1:添加一个配置类,并现实WebMvcConfigurer
@Configuration //@Configuration声明这是一个配置类
public class MyConfig implements WebMvcConfigurer {

// 步骤3.2:注册自定义拦截器
@Bean // @Bean 的作用:声明这个方法返回一个bean实例,并把这个bean交给spring容器管理
public AdminAuthInterceptor adminAuthInterceptor(){
return new AdminAuthInterceptor();
}

// 步骤3.3 把自定义的拦截器添加到springmvc拦截器链里面
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(adminAuthInterceptor()).addPathPatterns(“/admin/**”);
}

2、在Springboot里面添加自定义的转换器
步骤1:写一个转换器
package com.example.demo.converter;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

//自定义日期转换器
//Converter<String, Date>: 泛型接口,其String表示指定输入参数类型,Date表示指定输出值的数据类型
public class MyDateConverter implements Converter<String, Date> {

//2021-02-01
//2021-02-01 12:21:59
@Override
public Date convert(String strDate) {
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

// trim():去掉字符串的前后空格
if(strDate!=null && strDate.trim().length()>0){
//2021-02-01 12:21:59
if(strDate.trim().length()>10){
sdf=new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
}
try {
Date date=sdf.parse(strDate);
return date;
} catch (ParseException e) {
System.out.println(“MyDateConverter.convert() 日期转换报错:转换目标=”+strDate);
}
}else{
System.out.println(“MyDateConverter.convert() 日期转换失败:转换目标为空”);
}
return null;
}
}

步骤2:写一个配置类com.hwadee.netstore.config.MyConfig
步骤3:在这个配置类里面注册自定义的转换器

// 注册自定义转换器
@Bean // @Bean 的作用:声明这个方法返回一个bean实例,并把这个bean交给spring容器管理
public MyDateConverter findMyDateConverter(){
return new MyDateConverter();
}

// 添加自定义转换器
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(findMyDateConverter());
}

3、在Springboot里面添加自定义的过滤器

1)使用注解写一个过滤器
package com.hwadee.train.filter;

import com.hwadee.train.entity.Admin;
import com.hwadee.train.sessionparameter.SeesionParmeter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//自定义过滤器步骤:
//步骤1:写一个普通类
//步骤2:implements Filter
//步骤3:添加@WebFilter,并且配置过滤条件
//步骤4:写过滤业务
//步骤5:在启动类上面添加@ServletComponentScan 注解

@WebFilter(“/*”)
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse,
FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest hsr=(HttpServletRequest)servletRequest;
HttpServletResponse hsrp=(HttpServletResponse)servletResponse;

    String contextPath = hsr.getContextPath();

// http://localhost:8080/login
String requestURI = hsr.getRequestURI();
if(requestURI.contains(“login”)
||requestURI.contains(“login”)
|| requestURI.contains(“style”)){
// 不过滤的url,直接放行
filterChain.doFilter(servletRequest,servletResponse);
}else{
Object attribute = hsr.getSession().getAttribute(SeesionParmeter.ADMIN_INFO);
if(attribute!=null && attribute instanceof Admin){
// 已经登录
filterChain.doFilter(servletRequest,servletResponse);
}else{
// 没有登录,跳转到登录页面
hsrp.sendRedirect(“login”);
}
}
}

}
2)在启动类添加@ServletComponentScan注解
@SpringBootApplication
@MapperScan(“com.hwadee.netstore.mapper”)
@ServletComponentScan
public class NetstoreApplication { … }

4、在Springboot里面添加自定义的监听器
步骤1:使用注解写一个listener
@WebListener
public class TestListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
System.out.println(“项目启动成功:TestListener contextInitialized”);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
System.out.println(“项目关闭成功TestListener contextDestroyed”);
}
}

步骤2:在启动类里面添加注解 @ServletComponentScan
@SpringBootApplication
@MapperScan(“com.hwadee.netstore.mapper”)
@ServletComponentScan
public class NetstoreApplication { …}

六、SpringBoot单元测试
1)Junit4
可以使用Junit4或者Junit5,下面介绍4的使用方法:

2)Junit5
下面介绍5的使用方法:

七、事务管理
比如:银行转账业务,1需要对支付方账号减少金额,2需要对收入方账户增加金额。这个各操作缺一不可,要么全部失败,要么全部成功。如果是一条sql语句执行,那么这个执行操作就是一个原子操作。
添加 注解方式:
步骤1:

步骤2:在业务层写转账业务:

//账号转账业务
@Transactional //@Transactional事务管理注解
public void changeAmount(int fromUserId,int toUserId,double amount){
System.out.println(“转账业务开始…”);
subAmount(fromUserId,amount);
addAmount(toUserId,amount);
System.out.println(“转账业务成功结束…”);
}

//账号减少金额
public void subAmount(int userId,double amount){
   User user= userMapper.findById(userId);
   double newAmount= user.getAmount()-amount;
   userMapper.updateUserAmount(userId,newAmount);
    System.out.println("减少金额成功......");
}
//账号增加金额
public void addAmount(int userId,double amount){
    User user= userMapper.findById(userId);

// user=null;
double newAmount= user.getAmount()+amount;
userMapper.updateUserAmount(userId,newAmount);
System.out.println(“增加金额成功…”);
}
步骤3:查看数据库数据变化:

八、Springboot添加分页插件
1、在pom.xml文件里面添加

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.3.0</version>
    </dependency>

2、代码中使用:
// 使用分页插件
// currentPage:当前页
// pageSize:分页大小
PageHelper.startPage(currentPage,pageSize);

九、打包部署
idea默认打成jar包
1 打包方式
① Jar
② War

如果前端页面使用jsp,那么需要打war.
在pom.xml里面指定打包方式为war
war

步骤:
1)把test单元测试跳过,打包的时候不需要,
2)然后点击packpage打包

上面就是打包成功后的包位置和包名称
2:运行war包
把这个包copy到E盘等其他位置,cmd里面执行java -jar 包名称,这样就可以直接运行了。注意:需要能够运行java程序的环境。

然后可以在浏览器里面正常访问。
在cmd里面,使用Ctrl+c关闭应用。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_41126680

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值