<!--引入数据库驱动 -->
<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>
#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).删除数据库
2).导入数据库
3).数据库导入
在左侧区域,点击鼠标右键,选择sql导入
4).选择jtdb.sql文件实现数据库导入
5).数据库导入完成之后,需要重新刷新数据库信息
理解: 通过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>
说明:在主启动类中添加@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);
}
}
@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).spring容器启动根据@mapperScan注解为所有的mapper接口创建对象(代理对象)
2).当程序通过测试方法@Test注解执行时,利用@Autowired为类中的对象进行赋值操作
3).当测试方法执行时,首先执行userMapper的findAll方法
4).根据findAll方法的路径com.jt.mapper.UserMapper.findAll(),去匹配xml的映射文件
对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示着额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。
知识点:
1.描述对象和数据库之间映射关系
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语句.现在操作数据库利用对象的方式实现操作.**
userMapper.insert(user对象); API方法
insert into user表(表中的字段) values (获取属性的值.....)
userMapper.insert(person对象); API方法
insert into user表(表中的字段) values (获取属性的值.....) 通用
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 操作智能分析阻断,也可自定义拦截规则,预防误操作
说明:MP中引入jar包文件会与原来Mybatis的包产生冲突,所以需要将原来的包注释
<!--spring整合mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
//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;
}
配置说明:需要将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.测试MP方式查询数据库
@Test
public void testSelectAll() {
List<User> userList = userMapper.selectList(null);
System.out.println(userList);
}
说明:在yml配置文件最后添加日志操作.
#配置日志
logging:
level:
com.jt.mapper: debug
//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);
}
/**
* 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);
}
@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);
}
注意事项: 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>
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文件
业务需求: 用户通过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
业务需求: 用户通过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";
}
}
@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";
}
}
核心: 局部刷新,异步访问.
实际意义: 让用户体验更好.
<%@ 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>
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 += ""+id+" "+name+" "+age+" "+sex+" "
})
$("#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的区别和作用