springboot开始

springmvc
	@Cacheable(cacheNames="缓存名")   缓存方法的返回结果,如果缓存中有,不执行方法
	public 返回值 控制器方法(int id){		
	}	
	@CacheEvict(cacheNames="缓存名", allEntries=true)  让某个缓存的内容失效
	public 返回值 增删改(){		
	}	
	@CachePut(cacheNames="缓存名")  替换更新缓存内容
	public 返回值 增删改(int id){		
	}

ehcache, redis

ajax
几种技术的结合a(asynchronous 异步的xhr), j(javascript), x(xml) json
var xhr = new XMLHttpRequest();
特点 1. xhr不会导致页面跳转(整体刷新)局部刷新
2. xhr 可以发送异步请求
同步,异步请求

xhr.open("请求方式", "请求url", true(异步)|false(同步));
xhr.send();
异步请求下接收响应
xhr.onload = function(){
   var obj = JSON.parse(xhr.responseText); // 一般结果是json字符串,需要转为js对象
}

发送post请求

xhr.open("post", "请求url", true);
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded"); // 指表单格式 名=值&名=值
xhr.setRequestHeader("content-type", "multipart/form-data"); // 指多部分表单格式(常用于上传文件)
xhr.setRequestHeader("content-type", "application/json");  // 指是json字符串  {属性名:属性值}
xhr.send("内容");

JSON.stringfy(js对象) ==> json 字符串

@RequestMapping // @RequestBody用来接收请求体是json字符串的情况
public void 控制器方法(@RequestBody User user) {
}

========================================================================================

1. 无刷新上传文件

var xhr = …
var formData = new FormData(document.getElementById(“表单id”))
xhr.send(formData); // 发送时请求体格式 multipart/form-data 所以服务器需要配置文件上传解析器,即:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>

图片文件的预览

var fileInput = document.getElementById("文件上传框id");
fileInput.files; // 获取所有选中的文件
var file = fileInput.files[0];
var fileReader = new FileReader();
fileReader.onload = function(){
	fileReader.result; // 得到读取结果, 把它赋值给img的src
};
fileReader.read(file);

2. 采用第三方库发送ajax请求

2.1 jquery中使用ajax

$.ajax({
	url:"请求url地址",
	type:"get|post|put|delete",
	data:"请求参数",
	dataType:"服务器返回的响应格式,一般不用设置", 取值// json,html,text,xml..
	success: function(结果){}, // 响应成功后调用的函数
	error: function(){}, // 请求和响应过程中出错了调用的函数
});

$.get("请求url地址", "请求参数").done(function(结果){}).fail(function(xhr){});
// done 是成功时的回调函数, fail是失败时的回调函数

$.post("请求url地址", "请求参数").done(function(结果){});

2.2 ajax中的注意事项

ajax默认不支持跨域调用 (不同的域名,不同ip之间 默认不可以使用ajax来发送请求接收响应)
192.168.10.240
controller

192.168.10.100 另一台机器
$.ajax
xhr

要支持跨域
方法1:jsonp 方式 需要服务器端的配合
方法2:cors 方式

3. springboot

对spring,springmvc的再次封装, 目的简化配置文件, 降低spring框架的入门门槛

application.properties

springboot 集成了tomcat

3.1 创建springboot项目

方法1: 在线创建springboot项目
注意:springboot 推荐打jar包,而不是war
src
|- main
|- java
|- resources
|- static 静态资源 css, js, 图片…
|- templates 模板文件 等价于jsp页面
|- application.properties 配置文件

入口类 必须加@SpringbootApplication注解
入口类中包含 主方法:
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}

方法2:手动建一个maven项目,修改pom.xml文件即可

注意:

  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

3.2 常见问题

  1. 配置端口号
    在application.properties 添加
    servlet.port=新端口号

也可以在启动时 Run Configuration 中配置 Override parameters来改动端口号

  1. 配置日志
    logging.level.包名=级别

自己输出日志
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
logger对象中有error, warn, info, debug 用他们来记录不同重要程度的信息

  1. 加速启动工具
    添加依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>

然后再idea编辑器中用 build module 让改动生效
内部是使用了一些类加载机制加速项目的重新启动

  1. thymeleaf视图
    首先加入依赖:
<!-- 视图(模板)技术 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- 让thymeleaf 在解析html时能采用不严格的语法 -->
<dependency>
	<groupId>net.sourceforge.nekohtml</groupId>
	<artifactId>nekohtml</artifactId>
	<version>1.9.22</version>
</dependency>

然后在application.properties中配置

# 配置thymeleaf
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
# 解析html时,不要用严格模式
spring.thymeleaf.mode=LEGACYHTML5

最后编写thymeleaf视图页面,都是以*.html结尾的文件,默认放在resources/templates目录下
在页面上使用th命名空间,在配合th:属性输出动态内容,例如输出标签文本可以使用:

<p th:text="${模型变量}"></p>
  1. 打包和运行
    在idea 中找到 maven 菜单 life cycle ==> package
    可以点击maven菜单的skip tests忽略单元测试,否则有一个测试失败,会导致打包不成功

运行jar的命令:

java -jar springboot-0.0.1-SNAPSHOT.jar --server.port=7070

--后的参数会覆盖掉 application.properties中的同名参数

好处:不用目标机器安装tomcat环境,因为springboot已经内嵌的tomcat服务器

jquery对ajax

$.ajax({
	url:"请求地址",
	data:请求参数,js对象,
	dataType: 响应类型 text,html,json,jsonp只有jsonp需要特殊指定
	success: function(结果){}, 响应成功回调
	error: function(xhr){}, 请求和响应出错时回调
	type: "get|post"
});
$.get("请求地址", 请求参数).done(function(结果){}).fail(function(xhr){});
$.post();

xhr请求不能跨域(另一种叫做cors)
jsonp script
发送请求是<script src="请求地址"></script>
callback=函数名
服务器生成script : 函数名(结果)

springboot

  • https://start.spring.io/ 到此地址按照向导生成项目
  • 也可以手动创建maven项目,在pom文件中加入springboot的依赖

程序入口

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

@Mapper, @Service, @Controller
入口类要放在其他类的外层
在application.properties文件中可以配置

  • 配置连接数据库的信息
  • 修改web程序端口
  • 配置某个日志的输出
  • 配置thymeleaf

===============================================================================================

1. 自定义连接池

commons dbcp 是apache的项目
c3p0
druid

可以使用 @Bean 注解定义spring容器对象,它的功能类似于<bean>标签

@Bean // @Bean注解的作用是把方法返回的结果,纳入spring容器的管理, 把方法名当做bean的id, 默认这个bean对象也是单例的
public DataSource dataSource() {
	DruidDataSource dataSource = new DruidDataSource();
	dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
	dataSource.setUrl("jdbc:mysql://localhost:3306/eshop?serverTimezone=GMT%2B8&useSSL=false&useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true&useCursorFetch=true&defaultFetchSize=100&allowPublicKeyRetrieval=true");
	dataSource.setUsername("root");
	dataSource.setPassword("root");
	dataSource.setMaxActive(8);
	dataSource.setMinIdle(1);
	return dataSource;
}

2. 自定义配置信息

  1. 提供一些自定义的配置信息,写入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.maxActive=8
westos.druid.minIdle=1
  1. 读取这些信息需要提供一个 以Properties 结尾的类
@Component // 让spring容器扫描到它并管理
@ConfigurationProperties(prefix = "westos.druid") // 用来读取*.properties配置文件中的信息
public class DruidDataSourceProperties {

    private String driverClassName;
    private String url;
    private String username;
    private String password;
    private int maxActive;
    private int minIdle;
...
  1. 使用这个配置类,可以采用 @Autowried依赖注入
  2. 让编写*.properties 时有提示功能
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

3. lombok

可以用它生成实体的get,set方法等
@Data // 帮我们生成 getter, setter, equals, hashCode toString…
@NoArgsConstructor // 生成无参构造的
@AllArgsConstructor // 生成有参构造的

还可以使用 @Slf4j 生成日志对象

4. 测试

可以在单元测试类中使用spring的依赖注入特性,注入要测试的类

@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());
    }


}

5. Oracle

5.1 后台的服务

OracleService服务名 OracleServiceXE 数据库主服务
Oracle服务名TNSListener OracleXETNSListener 监听服务 1521

5.2 连接oracle服务

  1. 用命令行(黑窗口)
    权限最高的用户 Sys
    管理员用户 System
    sqlplus 用户名/密码
  2. 用网页管理
    http://127.0.0.1:8080/apex/f?p=4950
  3. 用第三方的工具
    plsql developer

修改oracle(web)服务的端口号
exec dbms_xdb.sethttpport(8083);
查看oracle(web)服务的端口号
select dbms_xdb.gethttpport() from dual;

5.3 oracle存储结构

表空间 - 逻辑单位
SYSTEM 表空间,用来存储系统表
TEMP 表空间,临时表空间
USERS 表空间,应用程序使用空间
表空间下在存储具体的表

5.4 创建和管理用户

create user 用户名 identified by 密码;

create user scott identified by tiger;

刚创建的用户没有权限,需要授权
grant 权限 to 用户名;

grant connect, resource to scott;

5.5 测试用户 hr

解锁hr用户
alter user hr account unlock;
alter user hr identified by hr;

5.6 查看有哪些表

select table_name from user_tables; 查询系统视图

5.7 查看表结构

desc 表名

5.8 建表

create table 表名(
列名 数据类型 约束,

);
数字类型: 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数据库中没有自增列

5.9 序列 sequence

create sequence 序列名;
从序列中获取值
select 序列名.nextval from dual;
插入时数据时使用序列
insert into 表(id, …) values (序列名.nextval, …);

5.10 dual 表

只有一行一列, 使用场景:当某个计算或某个函数只想调用一次的时候,必须配合dual表

select 1+1 from countries; // 返回多行2 ,太浪费
select 1+1 from dual; // 只会返回一个2

5.11 rownum 行号

作用,可以给查询结果做个一编号,
可以被看做特殊的列(伪列)

例子: 与 order by 使用时需要注意, 是先编号,再排序,所以结果与我们期望的不同

(select region_name from regions order by region_name) a

select rownum, a.region_name from (select region_name from regions order by region_name)a;

例子: 可以用做比较条件, 只能是< , <= 但不能是=, >, >=

Argentina
Australia
Belgium
Brazil
Canada
Switzerland
China
Germany
Denmark
Egypt

select rownum, country_name from countries where rownum<10;

rownum 的应用: 分页

select c.* from countries c where rownum<=5;

(select c.*, rownum rn from countries c where rownum <=10) b

select * from (select c.*, rownum rn from countries c where rownum <=10) b where b.rn > 5;

完整的写法:三层嵌套子查询配合rownum实现分页
select * from 
(select a.*, rownum rn from 
   (select * from 表 c order by 排序列) a
 where rownum <= 页号*每页记录数) b
where b.rn > (页号-1)*每页记录数


select * from 
(select a.*, rownum rn from 
   (select * from countries c order by country_name) a
 where rownum <= 15) b
where b.rn > 10;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

phial03

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

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

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

打赏作者

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

抵扣说明:

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

余额充值