京淘实训Day06-MybatisPlus

1.SpringBoot整合Mybatis

1.1引入jar包文件

<!--引入数据库驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
			<!--数据库高可用,数据库代理  -->
			<version>5.1.32</version>
		</dependency>

		<!--springBoot数据库连接 
			jdbc负责与数据库进行数据交互
			具体操作数据库的API(工具方法)
			缺点: 操作数据库时步骤繁琐复杂 不利于开发
		-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<!--spring整合mybatis 暂时
			Mybatis在底层封装了JDBC.使得用户操作数据库的方式变得更加简单.
			虽然表面上用户操作的是Mybatis但是在底层实现过程中,mybatis将数据通过
			JDBC的方式进行交互.
		 -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>

1.2编辑YML配置文件

#SpringYML配置文件写法
spring:
  datasource:   #数据源
    driver-class-name: com.mysql.jdbc.Driver
    #链接数据库地址
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

#SpringBoot整合Mybatis
mybatis:
  #定义别名包
  type-aliases-package: com.jt.pojo
  #mapperxml映射文件路径
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

1.3 导入jtdb数据库

1).删除数据库
在这里插入图片描述
2).导入数据库
在这里插入图片描述
3).数据库导入
在左侧区域,点击鼠标右键,选择sql导入

在这里插入图片描述
4).选择jtdb.sql文件实现数据库导入
在这里插入图片描述
5).数据库导入完成之后,需要重新刷新数据库信息
在这里插入图片描述

1.4编辑UserMapper接口/UserMapper.xml的映射文件

理解: 通过Mybatis的方式要操作数据库中的表. 如果操作某一张表,则必须新建一个Mapper接口和.xml映射文件-----规范
1).新建Mapper接口

public interface UserMapper {
	//userMapper接口,是程序操作user表的唯一入口.
	
	//1.查询所有的用户表数据.   1.返回值结果     2.方法名称
	List<User> findAll();
	
}

2).定义mapper.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">
<!--上边的操作暂时可以忽略   mybatis操作都有所以可以忽略   -->
<!-- namespace是区分mapper映射文件的唯一标识
	命名规范: mapper接口的包路径
 -->			
<mapper namespace="com.jt.mapper.UserMapper">
	
	<!--定义sql标签
		1.查询   select
		2.新增   insert
		3.修改   update
		4.删除   delete
		
		规则: 
			id属性:mapper接口的方法名称
			resultType属性: 查询数据库之后的返回值对象/路径的概念
	  -->
	<select id="findAll" resultType="User">
		<!--sql语法  
			关键字      字段信息    from  表名
		-->
		select * from user
	</select>

</mapper>

1.5将mapper接口交给Spring容器管理

说明:在主启动类中添加@mapperScan的注解,实现了SpringBoot整合Mybatis
//package:文件的目录    class .java 目录中具体的内容
@SpringBootApplication	//springBoot的主启动类的注解
						//该类是程序的唯一入口.
@MapperScan("com.jt.mapper")
						//利用scan的包扫描的方式,扫描所有的mapper接口
public class SpringbootDemo1Application {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootDemo1Application.class, args);
	}

}

1.6 利用SpringBoot测试API检查代码是否正确

@SpringBootTest		//测试类注解 该注解标识spring容器,测试方法运行时,表示Spring容器启动
class SpringbootDemo1ApplicationTests {
	
	//1.引入mapper接口
	@Autowired	//依赖注入
	private UserMapper userMapper;
	
	//2.完成代码测试
	@Test
	public void testFind() {
		List<User> userList = userMapper.findAll();
		System.out.println(userList);
	}
	
}

1.7 Mybatis程序调用流程

1).spring容器启动根据@mapperScan注解为所有的mapper接口创建对象(代理对象)
2).当程序通过测试方法@Test注解执行时,利用@Autowired为类中的对象进行赋值操作
3).当测试方法执行时,首先执行userMapper的findAll方法
4).根据findAll方法的路径com.jt.mapper.UserMapper.findAll(),去匹配xml的映射文件
在这里插入图片描述

2.MybatisPlus

2.1 ORM思想

对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示着额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。
知识点:
1.描述对象和数据库之间映射关系
2.以面向对象的方式来操作数据库.

2.2 面向对象操作方式说明

例子:新增用户为例 向user表中新增一个用户数据. name=“张三” age=18 sex=女

1).面向过程的语言

Sql:   insert into  user(id,name,age,sex)  values(null,"张三",18,);    

2).面向对象的方式

	User user = new User("张三",18,"女"); //对象的封装
	userMapper.insert(user对象);			 //调用工具API方法实现入库.  程序员只需要编辑这些就够了.
	userMapper.delete(xxxx)
上述操作,程序员需要编辑,但是其中与数据库的交互的过程,程序员无需干预.会根据对象自动的生成sql语句.实现入库操作.而这些操作都由固定的**API**动态生成.所以以后用户只需要操作对象即可实现入库操作.

**总结:之前操作数据库时需要自己手写sql语句.现在操作数据库利用对象的方式实现操作.**

2.3 面向对象操作的原理

  1. 对象与数据表进行关联 user对象 -------user表形成绑定.
  2. 对象的属性与表中的字段一一映射. user对象(id/name/age/sex)------映射关系 user表(id/name/age/sex)等字段
  3. 封装操作的API 该API中包含了几乎所有的单表操作方法. 用户操作的是API(方法)
  4. 数据库只能识别sql语句所以需要将API方法通过拼接形成Sql语句.
		userMapper.insert(user对象);	  API方法
		insert into user表(表中的字段)  values (获取属性的值.....)
		userMapper.insert(person对象); API方法
		insert into user表(表中的字段)  values (获取属性的值.....)  通用

2.4MybatisPlus介绍

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
在这里插入图片描述
特点:
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

3. MP入门案例

3.1 导入MP包

说明:MP中引入jar包文件会与原来Mybatis的包产生冲突,所以需要将原来的包注释

<!--spring整合mybatis-plus -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.2.0</version>
		</dependency>

3.2POJO属性映射

	//user表示实体对象 一般与数据库中的表进行关联.
@Data	//证明lombok引入成功
@Accessors(chain=true)	//链式加载
@NoArgsConstructor		//定义无参构造方法  如果什么都不写,默认添加无参构造
@AllArgsConstructor		//定义全参构造方法  如果添加了全参构造,必须先添加无参构造
						//为什么呢?  解释:乌龟的屁股!!!! 龟腚(规定)


//MP的原则如果对象名称和属性名称与表和字段一一映射,则可以忽略不写.
@TableName		//标识对象与user表一一映射.
public class User {
	@TableId(type=IdType.AUTO)	//定义主键自增
	private Integer id;			//整数   一般用Integer/Long 区间>Integer
	//@TableField(value="name")	//属性与字段进行标识
	private String name;		//String  一般写字符串
	private Integer age;
	private String sex;
}

3.3 继承Mapper接口

在这里插入图片描述

3.4修改YML配置文件

配置说明:需要将mybatis改为mybatis-plus即可

	#语法       1.key: (空格)value  
#       2.缩进   代表层级关系
server:
  port: 8080      #tomcat服务器默认端口号都是8080
                  #类比: java运行环境JDK   
                  #      项目运行环境服务器(软件) tomcat

#YML配置文件在SpringBoot(Spring+SpringMVC等)程序中启动时 会被默认加载                  
#为属性赋值   如果操作时有红线则不管.
#如果将大量的业务代码保存到YML配置文件中时,会造成代码结构混乱
my:
  food: 番茄炒蛋     #k-v
  book: java编程思想

#SpringYML配置文件写法
spring:
  datasource:   #数据源
    driver-class-name: com.mysql.jdbc.Driver
    #链接数据库地址
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

#SpringBoot整合Mybatis
mybatis-plus:
  #定义别名包
  type-aliases-package: com.jt.pojo
  #mapperxml映射文件路径
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

3.5MP入门案例

//3.测试MP方式查询数据库
	@Test
	public void testSelectAll() {
		
		List<User> userList = userMapper.selectList(null);
		System.out.println(userList);
	}

3.6添加sql日志

说明:在yml配置文件最后添加日志操作.


#配置日志
logging:
  level:
    com.jt.mapper: debug

3.7 测试案例

	//3.测试MP方式查询数据库
	@Test
	public void testSelectAll() {
		//面向对象的方式操作数据库
		List<User> userList = userMapper.selectList(null);
		System.out.println(userList);
	}
	
	@Test
	public void testInsert() {
		User user = new User(null,"新冠病毒",7, "其他");
		userMapper.insert(user);
	}

3.8MP使用

/**
	 * MP案例1:  查询name="王昭君"的用户
	 * 注意事项:  1.查询的结果有几个???
	 * 			 2.查询的条件
	 * sql: select * from user where name = "王昭君"
	 * 语法:	eq =,   gt >,  lt < , ge>= ,le <=
	 */
	@Test
	public void testSelect01() {
		//定义条件构造器  作用:拼接where条件
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		queryWrapper.eq("name", "王昭君");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}
	
	/**
	 * MP案例2:  name属性中包含"精"的数据,并且为女性
	 * sql: select * from user where name like "%精%" and  sex="女"
	 */
	@Test
	public void testSelect02() {
		//定义条件构造器  作用:拼接where条件
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		queryWrapper.like("name", "精")	//默认采用and的方式进行链接
					.eq("sex", "女");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}
		
	/**
	 * MP案例3: 查询年龄在18-35之间的女性用户.
	 * Sql语句: SELECT id,sex,name,age FROM user WHERE (age BETWEEN ? AND ? AND sex = ?) 
	 */
	@Test
	public void testSelect03() {
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		queryWrapper.between("age", 18, 35)
		.eq("sex","女");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}

	/**
	 * MP案例4: 查询年龄大于100岁的,并且按照年龄降序排列,如果年龄相同按照Id降序排列
	 * Sql语句: 
	 * 	SELECT id,sex,name,age FROM user WHERE (age > ?) 
	 * 							ORDER BY age DESC , id DESC  
	 */
	@Test
	public void testSelect04() {
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		queryWrapper.gt("age", 100)
		.orderByDesc("age","id");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}


	/**
	 * MP案例5:查询age < 100岁的用户,
	 * 		    并且性别与name="孙尚香"的性别相同的的用户数据. 
	 * Sql语句: 
	 * SELECT id,sex,name,age FROM user WHERE 
	 * 			(age < ? AND sex IN (SELECT sex FROM USER WHERE NAME = '孙尚香')) 
	 */
	@Test
	public void testSelect05() {
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		queryWrapper.lt("age", 100)
					.inSql("sex", "SELECT sex FROM USER WHERE NAME = '孙尚香'");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}
	
	//根据ID查询数据   id=11的用户  ID是主键 主键不能重复
	@Test
	public void testSelect06() {
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		queryWrapper.eq("id", 11);
		User user = userMapper.selectOne(queryWrapper);
		System.out.println(user);

		User user2 = userMapper.selectById(11);	//根据主键进行查询
		System.out.println(user2);
	}

	//批量查询   查询id=1,3,5,6等用户信息
	//sql:SELECT id,sex,name,age FROM user WHERE id IN ( ? , ? , ? , ? ) 
	@Test
	public void testSelect07() {
		Integer[] ids = {1,3,5,6};
		List<Integer> idList = Arrays.asList(ids);
		List<User> userList = 
				userMapper.selectBatchIds(idList);
		System.out.println(userList);
	}

3.8 MP更新操作

	@Test
	public void testInsert2() {
		User user = new User(null,"新冠病毒",7, "其他");
		userMapper.insert(user);
	}
	
	
	/**
	 * 案例:删除name为null的数据
	 * sql:DELETE FROM user WHERE (name IS NULL)
	 */
	@Test
	public void testDelete() {
		
		//userMapper.deleteById(100);	//删除id的值为100的用户数据
		//userMapper.deleteBatchIds(idList);//可以进行批量的删除
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		queryWrapper.isNull("name");
		userMapper.delete(queryWrapper);
	}
	
	
	/**
	 * 需求:将id=228的数据,name改为实训课程,age=3  sex=其他
	 * 原则: 根据对象中不为null的属性当作更新要素.
	 * 		ById: 代表根据具体的主键的值更新数据.  就是where条件
	 * Sql: update xxxxxxx where id = 主键值
	 */
	@Test
	public void testUpdate() {
		User user = new User();
		user.setName("实训课程")
			.setAge(3)
			.setSex("其他")
			.setId(228);
		userMapper.updateById(user);
	}
	
	
	/**
	 * 需求2: 更新name="新冠病毒"的数据改为  
	 * 						name="疫苗正在路上"  age=1 sex=其他
	 * Sql:   update user set name="xxx",age=1,sex="其他"
	 * 		  where name="新冠病毒"
	 * 
	 * 参数说明:
	 * 		entity: 修改的值
	 * 		updateWrapper: 修改的条件构造器
	 */
	@Test
	public void testUpdate2() {
		User user = new User(null, "疫苗正在路上", 1, "其他");
		UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
		updateWrapper.eq("name", "新冠病毒");
		userMapper.update(user, updateWrapper);
	}

4 SpringBoot整合JSP

4.1 新建项目

1).新建项目
在这里插入图片描述
2).选择war包
在这里插入图片描述

4.2修改POM.xml配置文件

注意事项: 1.parent标签 2.properties信息 3.依赖信息 4.插件信息

<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>com.jt.vip</groupId>
	<artifactId>springboot_demo_2</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<!--1.parent标签 jar包文件(工具) 通过parent标签,将springBoot中所有依赖的jar包,进行了统一的定义. -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.0.RELEASE</version>	<!--2.3.0最新版本包 -->
		<relativePath /> <!-- lookup parent from repository -->
	</parent>



	<!--引入新的配置 maven环境中的配置信息 一般都是固定的 -->
	<properties>
		<java.version>1.8</java.version>
		<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
		<skipTests>true</skipTests>
	</properties>


	<!-- dependencies表示依赖. 需要什么包,添加什么依赖!!!! -->
	<dependencies>

		<!--原理: spring-boot-starter 启动器 代表者自动的配置和部署,可以直接使用 其中的功能 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<!-- web表示springMVC框架 -->
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<!--支持热部署 只要添加了依赖包,则springBoot程序启动时, 就会自动的加载运行. 对于用户而言,可以直接使用其服务. -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>

		<!--引入插件lombok 自动的set/get/构造方法插件 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>

		<!--引入数据库驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
			<!--数据库高可用,数据库代理 -->
			<version>5.1.32</version>
		</dependency>

		<!--springBoot数据库连接 jdbc负责与数据库进行数据交互 具体操作数据库的API(工具方法) 缺点: 操作数据库时步骤繁琐复杂 
			不利于开发 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<!--spring整合mybatis 暂时 Mybatis在底层封装了JDBC.使得用户操作数据库的方式变得更加简单. 虽然表面上用户操作的是Mybatis但是在底层实现过程中,mybatis将数据通过 
			JDBC的方式进行交互. -->
		<!-- <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> 
			<version>1.3.2</version> </dependency> -->

		<!--spring整合mybatis-plus -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.2.0</version>
		</dependency>
		
		<!--springBoot整合JSP添加依赖  -->
		<!--servlet依赖 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
		</dependency>

		<!--jstl依赖 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
		</dependency>

		<!--使jsp页面生效 -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
		</dependency>
	</dependencies>

	<!--build是负责项目打包部署 一般将项目开发完成之后,需要进行服务器部署(Linux) -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

4.3切换视图

1说明:如果需要复制大量的代码,则一般通过Navigator视图的形式进行操作.
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020061515592498.
png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE2ODA0ODQ3,size_16,color_FFFFFF,t_70)
2).导入src文件
在这里插入图片描述

4.4添加web资源

在这里插入图片描述
页面效果:
在这里插入图片描述

4.5 配置视图解析器

业务需求: 用户通过http://localhost:8080/findAll请求获取usreList.jsp页面
配置视图解析器规则: 为需要跳转的页面添加 前缀/后缀

server:
  port: 8080

#SpringYML配置文件写法
spring:
  datasource:   #数据源
    driver-class-name: com.mysql.jdbc.Driver
    #链接数据库地址
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

  mvc:         #引入mvn配置
    view:
      prefix: /WEB-INF/     # /默认代表根目录 src/main/webapp
      suffix: .jsp
      
      
#SpringBoot整合Mybatis
mybatis-plus:
  #定义别名包
  type-aliases-package: com.jt.pojo
  #mapperxml映射文件路径
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

#配置日志
logging:
  level:
    com.jt.mapper: debug

4.6编辑UserController实现页面跳转

业务需求: 用户通过http://localhost:8080/findAll请求获取usreList.jsp页面

	@Controller		//该controller表示默认条件下返回的是页面逻辑名称
public class UserController {
	
	/**
	 * 业务需求: 
	 * 用户通过http://localhost:8080/findAll请求获取usreList.jsp页面
	 * @return
	 */

	@RequestMapping("/findAll")
	public String findAll() {
				
		return "userList";
	}
}

4.7 同步方式实现用户列表展现

4.7.1 编辑UserController

@Controller		//该controller表示默认条件下返回的是页面逻辑名称
public class UserController {
	
	@Autowired
	private UserService userService;
	
	/**
	 * 业务需求: 
	 * 用户通过http://localhost:8080/findAll请求获取usreList.jsp页面
	 * 查询userList用户信息,并且展现页面数据.
	 * 
	 * 页面取值说明:${userList},JSP中从域中获取数据,之后页面展现.
	 * 关于jsp中的四大作用域.
	 * 1. page域(只对当前页面有效)   小
	 * 2. request域(对请求有效)     最常用的域对象
	 * 3. session域(当前会话有效)   如果需要实现数据共享时使用.
	 * 4.application域     一个tomcat服务器中共享数据   大
	 * 
	 * @return
	 */
	@RequestMapping("/findAll")
	public String findAll(Model model) {
		
		//1.获取userList数据
		List<User> userList = userService.findAll();
		model.addAttribute("userList", userList);
		//model在底层操作的就是request域.
		return "userList";
	}

}

4.7.2 页面效果展现

在这里插入图片描述

4.8 AJAX

4.8 什么是ajax

核心: 局部刷新,异步访问.
实际意义: 让用户体验更好.

4.9 ajax异步请求的原理

4.9.1同步请求的说明

在这里插入图片描述

4.9.2异步请求的说明

在这里插入图片描述

4.10 利用ajax实现用户列表展现

4.10.1 准备ajax页面

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>您好Springboot</title>
</head>
<body>
	<table border="1px" width="65%" align="center">
		<tr>
			<td colspan="6" align="center"><h3>学生信息</h3></td>
		</tr>
		<tr>
			<th>编号</th>
			<th>姓名</th>
			<th>年龄</th>
			<th>性别</th>
			<th></th>
		</tr>
	</table>
</body>
</html>

4.10.2 实现页面跳转

jQuery的地址:https://jquery.cuishifeng.cn/jQuery.Ajax.html
1).编辑UserController

	//跳转ajax页面
	@RequestMapping("/ajax")
	public String ajax() {
	
		return "ajax";
	}
	
	/**
	 * url:接收用户ajax请求    /ajaxUser
	 * 参数:  没有参数
	 * 返回值结果: 一般都是json串
	 */
	@RequestMapping("/ajaxUser")
	@ResponseBody	//表示返回值为json串
	public List<User> ajaxUser(){
		
		return userService.findAll();
	}

2.编辑页面JS

	<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!--需要导入js函数类库  -->
<script type="text/javascript" src="/js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
	//校验jQuery是否引入正确.
	$(function() {

		var id = null;
		var tr = null;
		//万能操作方式 $.get $.post $.getJSON
		$.ajax({
			url : "/ajaxUser", //请求路径地址
			method : "get", //定义请求的方式  type/method
			//data : {"id" : id}, //定义参数
			//dataType : "json", //定义返回值类型  可以省略不写
			success : function(data) {
				if (data.status == 201) {
					alert("服务器调用异常");
				}

				var tr = null;
				$(data.data).each(function(index,user){
					var id = user.id;
					var name = user.name;
					var age = user.age;
					var sex = user.sex;
					tr += "<tr align='center'><td>"+id+"</td><td>"+name+"</td><td>"+age+"</td><td>"+sex+"</td></tr>"
				})
				$("#tab1").append(tr);
			},
				
			error : function(data){	 //当请求有误时调用
				alert("请求有误,请检查!!!!!");	
			},
			cache: false, 			//是否使用ajax缓存 默认条件下为true
			async: false			//请求的同步  默认为true 为异步
		});
	})
</script>
<title>ajax的操作方式</title>
</head>
<body>
	<table id="tab1" border="1px" width="65%" align="center">
		<tr>
			<td colspan="6" align="center"><h3>学生信息</h3></td>
		</tr>
		<tr>
			<th>编号</th>
			<th>姓名</th>
			<th>年龄</th>
			<th>性别</th>
		</tr>
	</table>
</body>
</html>

作业

1.基于jQuery实现用户列表展现
2.了解
$.get()
$.post()
$.getJSON的区别和作用

猜你喜欢

转载自blog.csdn.net/qq_16804847/article/details/106755770
今日推荐