使用第三方库(JQuery)发送ajax请求:
1)导入 JQuery 的库:
<script src="js/jquery-3.2.1.min.js"></script>
2)用法:
$.ajax({
url:"请求url地址",
type:"get|post|put|delete",
data:"请求参数",
dataType:"服务器返回的响应格式,一般不用设置", 取值// json,html,text,xml..
success: function(结果){}, // 响应成功后调用的函数
error: function(){}, // 请求和响应过程中出错了调用的函数
});
测试代码:
function test(){
$.ajax({
url:"/test",
type:"get",
data:{content:$("#c").val()},
success: function(obj){ // obj代表服务器返回的结果, 如果是json会转换成对象传递过来
var c = obj.content;
$("#d1").text(c);
},
error:function (xhr) {
if(xhr.status==404) {
$("#d1").text("该路径不存在");
} else if(xhr.status==500) {
$("#d1").text("服务器内部错误");
}
}
});
}
Jquery中使用ajax发送请求的另外几种方式:
1)只发送 " Get " ajax请求:
$.get("请求url地址", "请求参数").done(function(结果){ 请求成功 }).fail(function(xhr){ 请求失败 });
**** 注意: done 是成功时的回调函数, fail是失败时的回调函数
2)只发送 " Post " ajax请求:
$.post("请求url地址", "请求参数").done(function(结果){ 请求成功 }).fail(function(xhr){ 请求失败 });
***注意: Ajax 默认不支持跨域调用(不同域名,不同ip之间不可以使用ajax来发送请求)
支持跨域调用的两种方式:
方法1:jsonp 方式 需要服务器端的配合
方法2:cors 方式
SpringBoot :
首先Spring Boot不是一个框架,它是一种用来轻松创建具有最小或零配置的独立应用程序的方式。这是方法用来开发基于Spring的应用,但只需非常少的配置。它提供了默认的代码和注释配置,快速启动新的Spring项目而不需要太多时间。它利用现有的Spring项目以及第三方项目来开发生产就绪(投入生产)的应用程序。它提供了一组Starter Pom或gradle构建文件,可以使用它们添加所需的依赖项,并且还便于自动配置。 Spring Boot根据其类路径上的库自动配置所需的类。假设应用程序想要与数据库交互,如果在类路径上有Spring数据库,那么它会自动建立与数据源类的连接。
创建一个Springboot项目的基本配置:
1)创建 Springboot 项目:
方式一: https://start.spring.io/ 到官方地址按照向导生成相应的项目
方式二: 手动创建 maven 项目,在 pom.xml 中 添加相应的 Springboot 的依赖
方式一:
选项: 工程(maven) 语言(java) SpringBoot版本(2.1.0)
Group填组名 右侧Dependencies 可以选择相应的依赖,因为我们要构建web项目,所以可以添加web的依赖Artifact填模块名 点击 Generate Project 生成下载项目。
2)将生成的压缩文件解压之后用 IDEA打开:
springboot的项目结构: (***注意:springboot 推荐打jar包,而不是war)
3)程序入口,启动程序:
可以看到springboot启动的服务端口为 8080:因为它内嵌了 tomcat
4) 创建Controller demo测试:
package com.chen.Springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class DemoController {
@RequestMapping("hello")
@ResponseBody
public String demo(Model model){
model.addAttribute("text","hello");
return "hello";
}
}
5)启动项目:
- 在idea中,直接运行SpringBootApplication.java 文件。
- 把项目通过maven命令 mvn package 打成jar包,通过命令 java -jar demo-0.0.1-SNAPSHOT.jar 直接执行jar包
- 借助maven插件,执行mvn spring-boot:run 即可运行项目。
6) 效果:
****注意:
1. 入口类的包级别要比其他的controller ,service , mapper高
2. 但入口类包不能没有,否则会出现java.io.FileNotFoundException: class path resource [org/springframework/social/config/annotation/SocialConfigurerAdapter.class] cannot be opened because it does not exist
SpringBoot的基本配置:(基本配置都在文件 application.properties 中配置)
1)配置端口号: (也可以在启动时 Run Configuration 中配置 Override parameters来改动端口号)
# 修改web程序端口
server.port=9090
2)配置日志:
#logging.level.包名=级别
# 配置某个日志的输出
logging.level.com.chen.springboot.mapper=debug
logging.level.com.chen.springboot.controller=debug
自己输出日志
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
logger对象中有error, warn, info, debug 用他们来记录不同重要程度的信息
@Controller
public class UserController {
// logback 是日志实现, 一般用它的接口 slf4j--> Logger 对象
// 定义日志对象
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserService userService;
@RequestMapping("/byId")
@ResponseBody
public User findById(int id) {
try {
// 输出日志信息, 选择日志级别 error > warn > info > debug > trace
// 不要记录敏感信息 password
logger.debug("进入了findById方法 id的值是:{}...................", id);
// int i = 1/0;
return userService.findUserById(id);
} catch (Exception e) {
logger.error("进入了findById方法出现问题:", e);
return null;
}
}
}
3) 配置连接数据库的信息:
#配置连接数据库的信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/eshop?serverTimezone=GMT%2B8&useSSL=false&useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true&useCursorFetch=true&defaultFetchSize=100&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root
4)修改 默认的数据库连接池(dbcp),使用自定义的连接池(druid)
1.在 pom.xml 文件中导入 druid 的依赖:
<!-- 加入连接池实现 druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.7</version>
</dependency>
2. 自定义一个数据库连接信息的实体类
package com.westos.springboot.druid;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component // 让spring容器扫描到它并管理
@ConfigurationProperties(prefix = "westos.druid") // 用来读取*.properties配置文件中的信息
public class DruidDataSourceProperties {
private String driverClassName;
private String url;
private String username;
private String password;
/**
* max connection count
* @param maxActive
*/
private int maxActive;
private int minIdle;
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getMaxActive() {
return maxActive;
}
public void setMaxActive(int maxActive) {
this.maxActive = maxActive;
}
public int getMinIdle() {
return minIdle;
}
public void setMinIdle(int minIdle) {
this.minIdle = minIdle;
}
}
3. 在 application.properties 文件中配置连接数据库的信息
westos.druid.driver-class-name=com.mysql.cj.jdbc.Driver
westos.druid.url=jdbc:mysql://localhost:3306/eshop?serverTimezone=GMT%2B8&useSSL=false&useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true&useCursorFetch=true&defaultFetchSize=100&allowPublicKeyRetrieval=true
westos.druid.username=root
westos.druid.password=root
westos.druid.max-active=8
westos.druid.min-idle=1
使用注解配置测试类:利用spring的依赖注入特性,注入要测试的类
package com.westos.springboot;
import com.westos.springboot.domain.User;
import com.westos.springboot.mapper.UserMapper;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestSpringBoot {
@Autowired
private UserMapper userMapper;
@Test
public void test1() {
User user = userMapper.findUserById(1);
// System.out.println(user);
Assert.assertTrue( user != null);
Assert.assertEquals(1,user.getId());
Assert.assertEquals("zhangsan",user.getName());
}
}
Oracle基本使用:
1)后台的服务
OracleService服务名 OracleServiceXE 数据库主服务
Oracle服务名TNSListener OracleXETNSListener 监听服务 1521
2) 连接oracle服务
1) 用命令行(黑窗口)
权限最高的用户 Sys
管理员用户 System
sqlplus 用户名/密码
2) 用网页管理
http://127.0.0.1:8080/apex/f?p=4950
3) 用第三方的工具
plsql developer
3) oracle存储结构:表空间下在存储具体的表
表空间 - 逻辑单位
SYSTEM 表空间,用来存储系统表
TEMP 表空间,临时表空间
USERS 表空间,应用程序使用空间
4) 基本命令:
修改oracle(web)服务的端口号
exec dbms_xdb.sethttpport(8083);
查看oracle(web)服务的端口号
select dbms_xdb.gethttpport() from dual;
创建和管理用户
create user 用户名 identified by 密码;
例: create user scott identified by tiger;
刚创建的用户没有权限,需要授权
grant 权限 to 用户名;
例:grant connect, resource to scott;
测试用户 hr
解锁hr用户
alter user hr account unlock;
修改hr用户的密码:
alter user hr identified by hr;
查看有哪些表
select table_name from user_tables; 查询系统视图
查看表结构
desc 表名
建表
create table 表名(
列名 数据类型 约束,
...
);
Oracel中的数据类型:
数字类型: Number(有效数字最大位数, 小数点后位数)
Number(10) 长度最大为10的整数
Number(10,2) 整数部分最大8位,小数2位
可变字符类型
VARCHAR2(最大长度) 注意最大长度按字节处理, 一个汉字一般占3个字节(底层是utf-8)
NVARCHAR2(最大长度) 这回最大长度按字符为单位处理
日期
DATE 可以保存年月日,时分秒
TIMESTAMP 保留的日期信息更多
获取当前时间:sysdate, systimestamp
布尔值:
一般用 number(1) 代表布尔值,0代表false, 非0代表true
*****注意:oracle数据库中没有自增列
序列 sequence
create sequence 序列名;
从序列中获取值
select 序列名.nextval from dual;
插入时数据时使用序列
insert into 表(id, ...) values (序列名.nextval, ...);
dual 表
只有一行一列, 使用场景:当某个计算或某个函数只想调用一次的时候,必须配合dual表
select 1+1 from countries; // 返回多行2 ,太浪费
select 1+1 from dual; // 只会返回一个2
rownum 行号
作用:可以给查询结果做个一编号,可以被看做特殊的列(伪列)
****注意:rownum 可以用做比较条件, 只能是`< , <= `但不能是`=, >, >=`
例子: 与 order by 使用时需要注意, 是先编号,再排序,所以结果与我们期望的不同
解决办法(子查询):select rownum, a.region_name from (select region_name from regions order by region_name) a;
rownum 应用:
分页:三层嵌套子查询配合rownum实现分页 (rownum rn: 此时的rownum 并不是 伪列,而是真实存在的)
格式: select * from
(select a.*, rownum rn from (select * from 表 c order by 排序列) a where rownum <= 页号*每页记录数) b
where b.rn > (页号-1)*每页记录数
例: 查出第2页,每页10条记录
select * from
(select a.*, rownum rn from (select * from countries c order by country_name) a where rownum <= 20) b
where b.rn > 10;