目录

1.SpringMVC

1.1基本介绍

1.2具体实例:展示汽车数据

1.2.1需求

1.2.3测试

1.3其他知识点

GET方式

POST方式

RESTFul方式(推荐)

1.4 总结:

2.Spring

2.1spring介绍

2.2具体实例结构:

2.2 .1.loc的XML案例

2.创建applicationContext.xml

2.2.2 DI依赖注入

2.编辑dept.java

3.编辑user.java

4.编辑TestDI.java

自动装配

3.mybatis

3.1mybatis介绍

3.2 具体实例结构--汽车数据的入库

4.springMvc三大框架整合

4.1 整合结构

4.2整合案例--表单数据的传入的更新

4.2.1 前端数据界面

4.2.2 后端代码及调用

5.springMvc 三大框架整合升级版

5.1 mybatis-plus 替代mybayis

5.2 MP 整合升级后的案例

5.2.1 项目结构:

5.3 MP整合案例总结


1.SpringMVC

1.1基本介绍

功能:连接前端服务器与java,使得网页提交的数据可以被java获取

核心:三层模型:model ,view,control

工作原理:前端控制器DispatcherServlet 将网页发送请求分发给不同处理器处理,以此得出数据后返回视图解析器进行渲染

Spring Boot与SSM框架_spring

1.2具体实例:展示汽车数据

1.2.1需求

访问链接: http://localhost:8080/car/get

得到JSON数据: {"id":718,"name":"保时捷","type":"Cayman T","color":"红色","price":641000.0}

1.2.2 具体代码

pom.xml

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

主启动类RunApp

@SpringBootApplication
@Controller
public class RunApp {
    public static void main(String[] args) {
        SpringApplication.run(RunApp.class, args);
    }
}

pojo类 car.java

说明:lombok工具类封装了各种方法,可用注解方式编程

package com.jt.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data  //get ,set ,tostring
@NoArgsConstructor  //无参构造
@AllArgsConstructor  //全参构造
@Accessors (chain = true)
public class Car {
    private String name;
    private String brand;
    private Double price;
    private String color;
    
}

controller层: CarController.java

@RestController
@RequestMapping("/car")
public class CarController {
    @RequestMapping("/get")
    public Car get(){
        Car car=new Car();
        car.setId(12).setName("保时捷t280").setBrand("保时捷")
                .setPrice(230000.00).setColor("red");
        return car;
    }

1.2.3测试

  • 1访问http ://localHost:8080/car/get

执行结果:

{"id":12,"name":"保时捷t718","brand":"保时捷","color":"red","price":23000.0}

1.3其他知识点

请求参数的形式有8种,重点三种

GET方式

POST方式

RESTFul方式(推荐)

1.4 总结:

SpringMVC常用的注解
@Controller 标识是一个Controller,Spring包扫描创建实例

@RequestMapping 请求后的映射路径

@PathVariable 标识接收单个参数

@ResponseBody 返回对象利用jackson工具类转换为json字符串

@RequestParam 参数名和请求参数名称不同时使用,可以设置默认值
 

2.Spring

2.1spring介绍

Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。Spring框架的不光是技术牛,而是它的核心思想更牛,它不重复发明轮子,而是"拿来主义",把业界做的最好的技术黏合起来形成一个强大的企业级的应用框架。

功能:管理前后端交互的对象,通过bean工厂,储存和管理前后端交互的对象

核心:依赖注入DI  和控制反转 Ioc

控制反转:Ioc,即将创建对象的权利交给第三方,交给spring中的bean工厂进行管理

依赖注入DI;DI实现对象关系管理

2.2具体实例结构:

2.2 .1.loc的XML案例

1.创建hello.java

public class Hello {
    public void hi(){
        System.out.println("hello world!!");
    }
}

2.创建applicationContext.xml

Spring Boot与SSM框架_数据_02

 3.创建TestIoC.java

package spring;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestIoC {
	@Test
	public void bean() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		Hello h1 = new Hello();
		System.out.println(h1);
		h1.hi();
		//根据id获取bean
        //Spring就是一个大工厂(容器)专门生成bean,bean就是对象
		Hello hello = (Hello)ac.getBean("Hello");
		System.out.println(hello);
		hello.hi();
	}
}

4.测试代码

2.2.2 DI依赖注入

1.导入依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>cn.tedu</groupId>
	<artifactId>spring</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<!-- 集中定义依赖版本号 -->
	<properties>
		<junit.version>4.10</junit.version>
		<spring.version>4.1.3.RELEASE</spring.version>
	</properties>

	<dependencies>
		<!-- 单元测试 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>

		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>

	</dependencies>
</project>

2.编辑dept.java

@Component
public class Dept {
	 String name = "java开发部";

    @Override
    public String toString() {
        return "Dept{" +
                "name='" + name + '\'' +
                '}';
    }

3.编辑user.java

@Component
public class User {
	String name = "jack";
    @Autowired  //相当于框架完成了:new User().setDept(new Dept());
    Dept dept;

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", dept=" + dept +
                '}';
    }
}

4.编辑TestDI.java

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import spring.pojo.Dept;
import spring.pojo.User;

public class TestDI {
	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		Dept d = (Dept)ac.getBean("dept");
		User u = (User)ac.getBean("user");
		
		System.out.println(d);
		System.out.println(u);
		
		System.out.println(u.dept.name);
	}
}

自动装配

利用注解方式,我们只需要写@Autowired注解,底层就会去容器中找对应的对象,如果有获取到,反射调用其对应的set方法,设置。而这个调用过程都是自动,我们没有手工去写set方法。所以这个过程也称为自动装配。

3.mybatis

3.1mybatis介绍

java连接数据库,操作数据库的框架。

功能:连接数据库,对里边的数据进行增删改减操作

核心:sql 语句

3.2 具体实例结构--汽车数据的入库

项目结构:

Spring Boot与SSM框架_Spring Boot与SSM框架_03

启动类:

@SpringBootApplication
public class RunApp {
    public static void main(String[] args) {
        SpringApplication.run(RunApp.class);
    }
}

pojo类

@Data
@Accessors(chain=true)
public class User implements Serializable {
    //序列化:保证数据传输完成
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
}

yml文件

server:
  port: 8090
#  \ No newline at end of file
#port: 8090

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: lydon
    #如果数据库密码以数字0开头 则必须使用""号包裹
    #password: "01234"

#SpringBoot整合Mybatis配置
mybatis:
  #定义别名包:实现对象映射
  type-aliases-package: com.jt.pojo #别名包
  #加载映射文件:一个接口对应一个映射文件
  mapper-locations: classpath:/mybatis/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

#不打印日志
debug: false

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">
<!--规则:namespace必须于接口一一对应-->
<mapper namespace="com.jt.mapper.UserMapper">

    <!--CRUD-->
    <!--定义别名包:添加别名包后-->
    <!--单表封装,resultType 多表封装resultMap-->
    <select id="getAll" resultType="com.jt.pojo.User">
        select * from demo_user
    </select>
<!--驼峰命名规则
    表字段:  user_id,user_name
    对象的属性:userId,userName
    resultType:保证属性与字段名必须一致.
    Mybaits提供了驼峰命名规则:
    -->
</mapper>

接口文件

public interface UserMapper {
    //查询所有demo_user表的数据
    List<User> getAll();

}

说明:接口文件会对xml文件进行一个映射,以或取xml文件中的sql语句

测试类

/**测试类的要求
 * 需求:1.测试包路径必须在主启动类的同包以及子包中
 * 2.从Spring容器可以获取对象进行调用*/
@SpringBootTest
@MapperScan("com.jt,mapper")
//spring容器内部为接口创建代理对象
//jdk的动态对象
public class TestSpringBoot {
    /**调用mapper  service  controller !!!单元测试~~*/
    @Autowired//注入错误!!!!????
    private UserMapper userMapper;
    /**
     * 需要:需要动态注入UserMapper接口<之后实现getAll的测试!!!
     * */
    @Test
    public void testGetAll(){
        System.out.println(userMapper.getClass());
        List<User> userlist =userMapper.getAll();
        System.out.println(userlist);
    }

}

4.springMvc三大框架整合

4.1 整合结构

Spring Boot与SSM框架_Spring Boot与SSM框架_04

整合结构说明:ssm框架整合的实质是springBoot整合SpringMvc,spring,mybtis的功能

将数据从前端传递到数据库,再从数据库传回前端的一个过程,其具体的流程图如下:

4.2整合案例--表单数据的传入的更新

4.2.1 前端数据界面

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>SSM整合</title>
	</head>
	<body>
		<a href="http://localhost:8080/car/get">点我获取数据</a>	
		<form method="post" action="http://localhost:8080/car/add">
			<table align="center">
				<th>汽车数据提交表</th>
				<tr><td>
						请输入你要输入的汽车品牌:
						<input type="text" value="" name="name"/>
					</td></tr>
				<tr><td>
						请输入你要输入的汽车颜色
						<input type="text" value="" name="color"/>
					</td></tr>
				<tr><td>
						请输入你要输入的汽车价格
						<input type="text" value="" name="price"/>
						</td></tr>
				<tr align="center">	<td>
				<input type="submit" value="搜索"/>
				<input type="reset" value="重置"/>
				</td></tr>
			</table>
		</form>
		<a href="http://localhost:8080/car/get01">点我获取数据</a>
	</body>
</html>

说明:前端页面的第一个按钮获取数据。可将后端查询的数据传递到网址上:具体如下图

当提交数据s时,页面的数据会传递到后端,存入数据库之中。

4.2.2 后端代码及调用

1.pojo类

@Data
@Accessors(chain = true)
@TableName("demo_user")
public class User implements Serializable {
    @TableId(type=IdType.AUTO)//id 代表主键
    //拓展:uuid
    //主键自增
    private Integer id;
    //@TableField("name")
    //如果属性与字段同名(包括驼峰规则) 注解可以省略
    private String name;
    private Integer age;
    private String sex;
}

2 . controller 层(控制层)

@RestController
@CrossOrigin//跨域
public class UserController {
    @Autowired
    private UserService userService;

    /**需求:查询全部用户信息
     * URL:/getAll
     * 返回值:List<User>*/
    @RequestMapping("/getAll")
    public List<User> getAll(){

        return userService.getAll();
    }

说明:控制层接受网页传来的请求和数据,通过调用传递给server层

3.service层(服务层)

@Service//服务层
public class UserServiceImp  implements UserService{
    @Autowired
    private UserMapper userMapper;

   @Override
   public List<User> getAll(){
       return userMapper.selectList(null);
   }
}

说明:service层实现类实现了接口方法的处理,对其中的数据进行了一定的处理

4.mapper层

@Component
//注意事项:继承接口时,必须添加泛型对象,否则映射表报错
public interface UserMapper extends BaseMapper<User>{
    //Mp规则: 对象的方式操作数据库 curd操作
    List<User> getAll();
}

说明:mapper层做了xml文件的一个映射,通过获取文件中的sql语句,对于文件数据进行操作

<mapper namespace="com.jt.mapper.UserMapper">
    <!--驼峰命名规则
       表字段:  user_id,user_name
       对象的属性: userId,userName
       resultType: 保证属性与字段名称必须一致.
       Mybatis提供了驼峰命名规则:
       规则:  字段user_id~~~去除_线~~~之后映射对象的属性userId-->

    <select id="getAll" resultType="User">
        select * from demo_user
    </select>

5.核心配置文件yml

server:
  port: 2375
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: lydon
#SpringBoot整合mp配置
mybatis-plus:
  type-aliases-package: com.jt.pojo
  mapper-locations: classpath:/mybatis/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true
#不打印日志
##debug: false

#Mapper接口执行 打印Sql日志
logging:
  level:
    com.jt.mapper: debug

说明:核心配置文件完成了数据库的连接,定义了日志的一些打印规则

6.框架调用说明

Spring Boot与SSM框架_restful_05

说明:ssm框架在传输数据时,一直沿用的是层层调用的原理,通过一层一层的调用,将数据从数据库取出或者传入数据库。

5.springMvc 三大框架整合升级版

5.1 mybatis-plus 替代mybayis

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

Spring Boot与SSM框架_Spring Boot与SSM框架_06

其有以下特性:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题

MP的强大性在于将繁琐的数据库查询语言进行了类似ApI的封装,通过对于数据库常用的增删改查操作的封装,极大的便利了操作者的使用。

5.2 MP 整合升级后的案例

5.2.1 项目结构:

Spring Boot与SSM框架_java_07

说明:配置文件中的代码和sql语句大幅度减少,只做一些特殊的sql语句查询

5.2.2 变化的代码--mapper层

@Component
public interface UserMapper extends BaseMapper<User> {
    List<User> getAll();
}

说明:mapper层继承了MP中的一些api,封装了大量基础的sql语句,我们只需要动态的输入参数即可。

<?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">
<!--规则: namespace必须与接口一一对应  -->
<mapper namespace="com.jt.mapper.UserMapper">
    <sql id="cols">
        id,name,age,sex
    </sql>
    <!--CRUD
        定义别名包: 添加了别名包之后可以简化resultType编辑.
    -->
    <select id="getAll" resultType="User">
        select * from demo_user
    </select>
</mapper>

其中。xml文件可保留,用于写一些特殊的sql语句

5.2.3 变化的代码--service层

@Service
public class UserserviceImp implements UserService{
    @Autowired
    private UserMapper userMapper;
    @Override
    public List<User> getAll() {
        return userMapper.selectList(null);
    }
}

5.3 MP整合案例实例

5.3.1  根据ID查询数据

5.3.2  条件构造器-对象封装

5.3.3  条件构造器-特殊字符查询

5.3.4 条件构造器-like关键字

5.3.5条件构造器-orderBy

5.3.6 条件构造器-in关键字

5.3.7  条件构造器-动态Sql

5.3.8 MP的更新操作

5.4 MP用法总结

MP整合的案例在很大程度上增强了程序的可用性,也为大批量业务代码的书写带来了很多便利,MP整合后的三大框架,在代码编写上能更轻松,也能为业务节省了很多思考的时间,使得程序员更好的优化业务逻辑,完成项目的优化。