目录:

1、day01——1-基础环境;2-介绍;3-Maven的继承和聚合

2、day02- 01-数据库编程(了解);2、笔记;2-课堂笔记


1、day01——1、基础环境:

  1. 配置一定要配置jdk的环境
  • 下载jdk1.7/jdk1.8
  • 两种jdk,安装版本(windows dll注册表),绿色解压版本D:/java-env/jdk1.7+jdk1.8,
很多软件都有配置文件,在配置文件中强行指定JAVA_HOME的路径。Eclipse.ini,相当于设置了临时环境。就实现多个版本并存。
实际开发中在一台计算机上安装多个jdk,1.7+1.8
  • Eclipse中配置jdk。进入eclipse的window菜单,prefenrece菜单
绿色安装版本,所放置的目录中不应该含有中文或特殊字符,不应该有空格。
  1. 配置maven环境,给eclipse配置自己安装的不要用默认自带的,因为它有很多bug。
  • 官网或者镜像网站下载maven
  • 绿色解压放入目录即可D:\tts9\apache-maven-3.3.9
  • 配置到eclipse,不用它自带有Bug的版本
不用默认的,新增自己去现在绿色解压版的maven,选择它的根目录
创建完成,一定要打钩,否则eclipse并未启用。
  1. Maven骨架很烂,很多Bug,例如用着用着,骨架创建不了了。
骨架:quickstart 针对java工程/webapp 针对web工程。
遇到弹出一个框,提示骨架损坏了,无法继续创建。
解决方案:
  • 联网:把骨架删除,骨架就是本地的仓库中的jar。如果eclipse调用会自动去判断,如果jar包,自动去网上下载,就去中央仓库或者私服去下载。重写下载后就可以使用、
  • 没有联网:从一台同学好的仓库中把目录拷贝过来,重新启动eclipse即可。
骨架目录在哪里呢?
C:\Users\adminitartor\.m2\repository\org\apache\maven\archetypes
settings.xml
默认:中央仓库
可以配置镜像仓库(私服)
<mirrors>
<mirror>
<id>nexus</id>
<name>Tedu Maven</name>
<mirrorOf>*</mirrorOf>
<url>http://maven.tedu.cn/nexus/content/groups/public</url>
<!-- <url>http://maven.oschina.net/content/groups/public</url> -->
</mirror>
</mirrors>
配置到tedu的私服
Ts-parent 父工程pom,没有直接的骨架,先利用java骨架,然后修改pom.xml文件中工程类型由jar改成pom类型。
修改类型jar修改为pom,它就是一个父工程
父工程
Pom.xml
<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.ts</groupId>
<artifactId>ts2-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging><name>ts2-parent</name>
<url>http://maven.apache.org</url><properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties><dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.8.RELEASE</version>
</dependency><dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.8.RELEASE</version>
</dependency><dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency><dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency><dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency><dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency><dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency><dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency><dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.2.3</version>
</dependency><dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.2.3</version>
</dependency><dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.3</version>
</dependency><dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.2.8.RELEASE</version>
</dependency><dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.0</version>
</dependency><dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.8.0</version>
</dependency><dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency><dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency><!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency></dependencies>
</project>
配置完成后就应该立即发布
项目名称上点击右键,菜单中选择Run as中选择Maven install
它就执行eclipse配置的maven下的命令。
如果提示BUILD SUCCESS代表代码没有问题,通过。如果不是,代码有问题,根据错误提示进行修改。
工具类工程
ts2-common jar工程
权限管理聚合工程
ts2-manage jar工程修改为pom工程,选择parent父项目ts2-parent
创建聚合的子工程,选择Maven Module方式创建
ts2-manage-mapper依赖ts2-manage-pojo
Ts2-manage-web
除了修改jdk的两处外,还有额外的修改一处,总共3处
都要install,必须出现SUCCESS提示,否则找原因,修改。
传统方式,在eclipse配置servers,还要配置一个tomcat(server.xml中配置8080默认端口)。发布程序add/remove项目。
Maven提供简化方式,快速配置,快速启动。
http://localhost:8080/TeduStore/user/address.do
TeduStore 虚拟路径,可以自己配置虚拟路径的名称,如果不配置,eclipse默认设置的是项目名称。
<configuration>
<port>8090</port>               可以通过maven的tomcat插件,快速定义端口号
<path>/</path>                     可以通过maven的tomcat插件,快速定义虚拟路径,定义在根
</configuration>
本地仓库中就有了一个微缩版本的tomcat,不用自己下载一个tomcat。不用部署war到tomcat中。环境配置就非常迅速
C:\Users\adminitartor\.m2\repository
\org\apache\tomcat\maven\tomcat7-maven-plugin\2.2
怎么启动tomcat插件呢?
在eclipse的调试菜单上来配置环境,运行maven命令。
在调试要进行配置,配置一次即可
找到MavenBuild选项,然后右键菜单,选择new
创建运行快捷方式,选择运行项目(web项目)
选择要执行web项目,配置maven执行命令 tomcat7:run,会自动发布war,会自动启动tomcat(插件)
跟踪调试时,要进入到断点,需要多个的项目,例如:ts2-manage-service,ts2-manage-controller。要能进入到这个断点,必须在这里来设置。
虽然选项很多,只有一个起作用,Java Project。
选择时,为了简单,把这个项目web,相关的调用的所有的项目都选择。
最后一个选项,选择utf-8,防止中文乱码问题。
断点调试就非常方便,可以跨越多个工程。
回顾今天知识:
传统小型项目,特点:所有的业务模块都在一个项目中,例如:学子商城,包括:权限管理模块、订单模块、购物车模块等等。
开发人员统一拷贝复制整个项目代码,分小组去维护。一个团队分为多个小组。做权限模块的小组,做订单模块的小组,做购物车模块的小组。
因为项目小,所以所有的开发人员基本在一起。如果发生问题,当面沟通,迅速解决。修改的代码复制拷贝过来。有新的代码了。
大型项目,特点:人员众多。分散。项目庞大,京淘商城,后台系统,前台系统,单点登录SSO系统,购物车系统,订单系统,商品搜索系统,权限系统,支付系统等。
把一个大的系统分拆成很多小的系统,小的系统尽量单独维护。
分拆方式:
  1. 垂直拆分(纵向),按业务来拆分,把原来系统中的业务模块升级成子系统
  2. 水平拆分(横向),一个子系统内还很多内容,继续分拆。也分层体系架构来分拆。pojo/mapper/service/controller(web)
Maven诞生以后就更加方便这种分拆体系。
垂直分拆产生两个新的项目,这是以前就的方式中没有的内容。
Ts-parent 父项目,作用:统一管理jar。项目类型为:pom
Ts-common 工具类项目,作用:统一全局工具类工程,其它项目要调用工具类,依赖。项目类型为:jar
权限系统结构:
Ts-manage 聚合项目,作用:一键发布,更快更方便的编译,项目类型为:pom。它是一个特殊的父工程。如何判定一个项目是父工程还是聚合工程? 查看pom.xml,是否有<modules>,如果有聚合工程,如果没有就是一个普通的父工程。
问题:一个大型项目中有几个父工程?一个父工程足够。
问题:父工程中依赖jar,设定版本,其他子项目中能否还有这个jar的不同的版本?(父工程中设置junit 4.12,子工程如果需要junit3.8.1怎么办? Jar冲突。子工程用的是3.8.1没有使用4.12版本,Maven规定自己的pom.xml的jar版本优先,一旦遇到冲突,找到第一个出口即结束。)
列表:
Junit 3.8.1
Junit4.12
Maven通过简单方式就排除了jar冲突。简单原则就是。本地优先。
水平拆分:
把每个子系统都要横向的分拆。不要嫌麻烦。
字段有关系:total=num*price
从大型项目的构建来说:
属于聚合工程的子项目:
特点:
聚合的子项目会放在聚合项目目录下
Ts-manage-pojo          Pojo简单java对象类(property/get/set)
Ts-manage-mapper             mybatis特有mapper的映射接口
Ts-manage-service 业务层,业务逻辑实现,接口+实现类
Ts-manage-controller/web 视图层,jsp/controller,静态资源(js/css/image/html),配置文件
Tomcat的Maven插件
传统部署方式:安装tomcat,配置servers+tomcat,部署war到tomcat中,启动停止tomcat。操作繁琐,运行速度慢。
插件使用2步:
  1. pom.xml 中要依赖tomcat插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8090</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
注意:
  • 默认创建工程时,<build>标签会自动创建,pom.xml中只允许有一个bulid标签。要把旧的一定要删除
  • <port>8090</port> 不用去修改tomcat的server.xml文件来修改端口,而直接利用配置文件来修改,修改配置都方便很多
  • <path>/</path> 设置虚拟路径,/代表根目录,/TeduStore在访问时,在浏览器上地址栏输入虚拟路径。如果只是/就tomcat下就只能运行一个项目,如果各自有各自的虚拟路径,可以运行多个项目。
  • 配置maven的tomcat插件是一个微缩版,它没有考虑性能优化、安全等内容。所以小快。如果企业最终部署系统到生产环境,还必须用tomcat,war的发布方式。只是测试环境方便快速测试。
配置一个当前项目的启动快捷maven命令的方式:
  1. 配置一个命令,一次配置,都可以使用、
  2. 配置时大多实际开发中都需要断点跟踪,观察局部变量值,是不是正确。

2、介绍:

陈子枢,3天
day08:Maven继承、聚合;jedis,跟spring整合,整合地址信息
day09:mysql 存储过程,索引,优化:最左前缀特性,表设计
dya10:健身项目(分析需求),美发项目(分析需求)
Maven干什么用的?项目管理
项目团队100,软件研发50人,直接使用Maven基础即可
项目团队1000(人员众多,项目组的人员分散全球各地)
传统项目,人少,就一个项目,大而全,所有的内容都放在其中
包括:
SpringMVC+Spring+Mybatis
Mybatis层(持久层):接口(mapper),映射文件中(mappers)
Spring层(业务层):接口,实现类
SpringMVC层(控制层):Controller
其他配置:web.xml(spring)、spring-mvc.xml(springmvc)
在eclipse上配置servers(tomcat 8080),启动,停止
问题:
1)传统一个项目开发方式,不利于大型团队和异地团队开发(不同的业务交叉)
2)传统一个项目中各层交织,bean(pojo、domain)/mapper/service/controller
3)传统发布方式,要自己配置tomcat servers开发效率低
Maven管理大型团队的项目
1)业务垂直拆分(权限管理、订单、购物车...)
a.jar依赖会发生变化
2)业务的水平拆分(pojo/mapper/service/controller(web))
3) maven它有个tomcat插件,启动快
练习:
1)画把项目垂直拆分和水平拆分,定项目名称
2)尝试把每个项目的类型标识出来:
pom父工程+聚合工程/jar只有jar包/war带jsp页面
小总结:
1)ts-parent    pom    父工程,通用的jar都在父工程中管理
2)ts-common    jar    工具类工程
3)ts-manage    pom    聚合工程,作用?(水平拆分的子项目的集合)
4)ts-manage-pojo    jar    日常model对象
5)ts-manage-mapper    jar    持久层的接口文件
6)ts-manage-service    jar    业务层的文件接口、实现类
7)ts-manage-web    war        控制层,包括:controller,jsp,映射文件,其他的资源配置文件,静态的资源文件(js,css,image,html)
quickstart    创建jar类型骨架
webapp        创建war类型骨架
Maven项目中
1)父工程
2)聚合
3)各个工程直接依赖关系
Maven管理本地项目的jar/war和第三方的管理方式一样
其实本质就是在Maven的目录中创建坐标结构,把相应文件放入到对应目录中
Maven的右键菜单
1)clean当项目发布有问题,检查不是代码的问题,就先使用clean
2)install把项目发布,把相应文件放入到Maven仓库中
注意,
1)当ts-parent如果有jar依赖改变,必须install,否则其他工程引用时可能是旧的,程序就可能执行不正常
2)聚合工程上一次可以发布Install所有的子工程,按顺序调用
部署:
找一个tomcat,把war拷入,webapp工程引用的这些jar包怎么引用?
1)直接到Maven仓库中引用(错)
2)直接在war工程中的WEB-INF/lib目录下,所有引用的jar包(正确)

3、Maven的继承和聚合

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency><!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>

Maven垂直切分

ts-parent          -- 父工程,pom类型,统一管理公用jar依赖
ts-common          -- jar类型,通用的组件、工具类
ts-manage          -- pom类型,后台管理系统,管理商品、分类等功能
Maven水平切分
ts-manage-pojo      -- jar类型,后台持久类
ts-manage-mapper     -- jar类型,后台持久层接口
ts-manage-service     -- jar类型,后台业务层
ts-manage-web        -- war类型,后台的前台controller、jsp、映射文件
依赖关系
ts-manage-mapper     依赖pojo
ts-manage-service    依赖pojo,依赖mapper,依赖common
ts-manage-web        依赖pojo,依赖mapper,依赖service,依赖common
利用依赖的传递性简化
pojo依赖common,mapper依赖pojo,service依赖mapper,web依赖service
Maven和Tomcat整合 =========================
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8090</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>http://localhost:8090/main/index.do
jedis引入 =========================
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.0</version>
</dependency>package jedis;import java.util.ArrayList;
import java.util.List;import org.junit.Test;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;public class TestJedis {
@Test    //完成单实例链接
public void jedis(){
//Jedis jedis = new Jedis("192.168.27.113", 6379);
Jedis jedis = new Jedis("192.168.163.7", 6379);
//jedis.auth("123456");
jedis.set("name", "tony3");    //调用redis命令set
System.out.println(jedis.get("name"));
jedis.close();
}@Test
public void pool(){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(200);List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
JedisShardInfo info = new JedisShardInfo("192.168.163.7", 6379);
shards.add(info);ShardedJedisPool pool = new ShardedJedisPool(config, shards);
ShardedJedis jedis = pool.getResource();System.out.println(jedis.get("name"));
}
}

spring-redis.xml =========================

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"><!-- 构建连接池配置信息 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大连接数 -->
<property name="maxTotal" value="200"/>
</bean><!-- 定义集群连接池 -->
<bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool" destroy-method="close">
<!-- 第一个参数 -->
<constructor-arg index="0" ref="jedisPoolConfig"/>
<constructor-arg index="1">
<list>
<bean class="redis.clients.jedis.JedisShardInfo">
<constructor-arg index="0" value="192.168.163.7"/>
<constructor-arg type="int" index="1" value="6379"/>
</bean>
</list>
</constructor-arg>
</bean></beans>

DictServiceImpl ======================

package cn.tedu.store.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import cn.tedu.store.bean.dict.Area;
import cn.tedu.store.bean.dict.City;
import cn.tedu.store.bean.dict.Province;
import cn.tedu.store.mapper.DictMapper;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
@Service("dictService")
public class DictServiceImpl implements DictService {
@Resource
private DictMapper dictMapper;
@Resource
private ShardedJedisPool shardedJedisPool;
private static final ObjectMapper MAPPER = new ObjectMapper();
public List<Province> getProvinceList() {
return dictMapper.getProvinceList();
}
public List<City> getCityList(String provinceCode) {
ShardedJedis jedis = shardedJedisPool.getResource();
String RedisKey = "TS_CITY_"+provinceCode;
if(jedis.exists(RedisKey)){
Object obj = null;
try {
String json = jedis.get(RedisKey);
JsonNode jsonNode = MAPPER.readTree(json);
obj = MAPPER.readValue(jsonNode.traverse(),
MAPPER.getTypeFactory().constructCollectionType(List.class, City.class));
} catch (Exception e) {
e.printStackTrace();
}
return (List<City>) obj;
}else{
List<City> listCity = dictMapper.getCityList(provinceCode);
try {
String json = MAPPER.writeValueAsString(listCity);
jedis.set(RedisKey, json);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return listCity;
}
}
}

学子商场:

业务的垂直拆分

业务的水平拆分


2、day02- 01-数据库编程(了解)

数据库中可以编写并保存一段程序,做数据运算
l  视图 View
l  存储过程 Procudure
l  函数 Function
l  触发器 Trigger
mysql数据库编程能力较弱,很多功能无法实现

2   变量

2.1    用户会话变量

一个客户端与服务器连接期间的变量
set @v1 = 123;
select @v1;

2.2    局部变量

begin ... end; 是一对大括号,局部变量只能在 begin  end之间使用,end结束后,变量消失
使用 declare 关键字来定义局部变量
delimiter ;    结束符改成 ;
delimiter //      结束符改成//
创建复杂的存储过程中间会用到;结束符,如果几个;放在一起,MySQL只会识别第一个,以后的不会识别,这样会及其不完整
begin
   declare v2 int default 123;
   select v2;
   select @v1;
end//
(上面无法执行,只是参考)

3  视图

3.1    简单视图

视图本质就是一个查询语句
SELECT * FROM t_goodsWHERE category_id=238CREATE VIEW v_goods ASSELECT * FROM t_goodsWHERE category_id=238SELECT * FROM v_goods
DELIMITER $$  设定一个标识符,标识结束$$USE `tedu_store`$$    打开指定数据库tedu_storeDROP VIEW IF EXISTS `v_goods238`$$  如果此视图已经存在,就删除CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_goods238` AS
SELECT`t_goods`.`id`            AS `id`,`t_goods`.`category_id`   AS `category_id`,`t_goods`.`item_type`     AS `item_type`,`t_goods`.`title`         AS `title`,`t_goods`.`sell_point`    AS `sell_point`,`t_goods`.`price`         AS `price`,`t_goods`.`num`           AS `num`,`t_goods`.`barcode`       AS `barcode`,`t_goods`.`image`         AS `image`,`t_goods`.`status`        AS `status`,`t_goods`.`priority`      AS `priority`,`t_goods`.`created_time`  AS `created_time`,`t_goods`.`modified_time` AS `modified_time`,`t_goods`.`created_user`  AS `created_user`,`t_goods`.`modified_user` AS `modified_user`
FROM `t_goods`
WHERE (`t_goods`.`category_id` = 238)$$DELIMITER ;

3.1    多级关联视图

 CREATE VIEW v_cat_goods ASSELECT c.name,g.item_type,g.title FROM t_goods gLEFT JOIN t_goods_category cON g.category_id=c.idSELECT * FROM v_cat_goods视图在大型项目中被废除!!!!
视图过程是把查询所有的记录都查询回来,然后再过滤数据,过滤掉非238.
如果这张表中有一千万数据。数据量大时无法优化。
Java程序可以吗?mybatis它直接处理,返回结果数据。结果就比视图快。

4   存储过程

存储过程是存储在数据库服务器中的一段过程代码
优点:
Jsp-java-database(proc)
存储过程离数据库最近,所以它执行代码效率最高的。
Client(brower)-WebServer(tomcat)-DatabaseServer(mysql)
WebServerDatabaseServer,在企业中,WebServer一般服务器即可,但是DatabaseServer是所有服务器中最好的。甚至大型项目,小型机。Unix+Oracle
废除:
  1. 写数据库代码(存储过程-单独学习语法,无法断点,system.out没有输出,几乎无法调试。DBA),写java代码(人员众多,好调试)。后期维护。不好维护。Java好维护。
  2. 存储过程不好写,质量不好控制。

4.1    定义存储过程

--  修改结束符
delimiter //--  创建存储过程p1
create procedure p1()
begin  --  大括号开始-- 定义局部变量v2declare v2 int default 123;select v2; --  显示v2变量的值
end//  --  大括号结束

4.2    调用存储过程

call p1()//

4.3    查看存储过程

show procedure status\G
所有存储过程
show procedure status where db='db1'\G
查看指定库中的存储过程
show create procedure p1\G

4.4    删除存储过程

drop procedure if exists p1//

4.5    存储过程的参数

三种参数:
l  in       输入参数
l  out      输出参数
l  inout    既能输入又能输出
存储过程参数测试
--  向学生表和联系方式表同时插入数据
--  1) 插入学生数据
--  2) 得到新插入的自增主键值
--  3) 插入联系方式表
传统方式:
  1. 页面填写两张表的数据,学生名称,学生的电话,存在两个表中
  2. 学生表自增主键
  3. 联系表中和学生表的关联(一对一)
 
 
 
CREATE TABLE `t_student` (
  `stu_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
 
CREATE TABLE `t_tel` (
  `stu_id` int(11) NOT NULL,
  `tel` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
 
DELIMITER //
create procedure p_student_tel
(in name varchar(20),
in tel varchar(20), out id int)
begin
   declare v int;-- 定义临时变量用来存自增主键值
   --  插入学生数据
insert into t_student(name)
   values(name);
   --  获得新生成的自增主键值存到v
   set v = last_insert_id();
   --  插入联系方式数据
   insert into t_tel(stu_id,tel)
   values(v, tel);
   --  自增主键值存到输出参数id
   set id=v;
end//
 
 
--  调用
CALL p_student_tel('刘强东',13010100808,@id);
 
select from t_student;
select from t_tel;
select @stu_id;
 
5   流程控制
5.1    if
if 条件 then
代码
end if
if 条件 then
代码1
else
代码2
end if
5.2    case
case
   when 条件1 then ...
   when 条件2 then ...
   else ...
end case
case 变量或表达式
   when 1 then ...
   when 2 then ...
   else
end case
分支判断测试
delimiter //
 
drop procedure if exists p1//
 
create procedure p1(in v int)
begin
   if v=1 then
      select 'v的值是1';
   end if;
   case v
      when then select 'v的值是2';
      when then select 'v的值是3';
      else select 'v的值不是2,3';
   end case;
end//
 
call p1(1) //
call p1(2) //
call p1(3) //
call p1(4) //
 
 
5.3    while
while 条件 do
代码
end while
5.4    loop
--  lp: 循环命名,可以起任意的名字
lp: loop
   ...
   if 条件 then
      leave lp; --  指定离开哪个循环
   end if;
   ...
end loop;
5.5    repeat
repeat
代码
until 条件 end repeat;
循环测试
--  新建 tb1 
use db1 //
 
drop table if exists tb1 //
 
create table tb1(
   id int primary key auto_increment,
   num int
)engine=innodb charset=utf8 //
 
delimiter //
drop procedure if exists p2//
create procedure p2(in n int)
begin
   declare i int default 0;
   --  while
   while i<n do -- i的值从0递增到n-1
      insert into tb1(num) values(i+1);
      set i=i+1;
   end while
   --  loop
   set i=0;
   lp: loop
      insert into tb1(num) values(i+1);
      set i=i+1;
      if i=n then -- i等于n时退出loop循环
         leave lp;
      end if;
   end loop;
   --  repeat
set i=0;
   repeat
      insert into tb1(num) values(i+1);
      set i=i+1;
   until i=n end repeat; -- i等于n时退出repeat循环
end//
 
call p2(10) //
 
select from tb1 //
6   函数
l  函数有返回值
l  调用存储过程用call,调用函数直接调
函数不让?
分布式?又放在java
Zookeeper集群管理者,当一台服务的配置更新,zk会自动把配置改变信息更新到其它所有的机器上。
5.1    创建函数
create function fn()
returns varchar(100)
begin
执行代码运算产生计算结果
   return 计算结果;
end//
求平方的函数 fn_pow
DELIMITER //
drop function if exists fn_pow //
 
create function fn_pow(n int)
returns int -- 函数返回什么类型的数据
begin
   declare r int;
   set r = n*n;
   return r; -- 向调用位置返回计算结果
end //
 
select fn_pow(5) //
select *, fn_pow(num) from tb1 //
6.2    查看函数
show function status\G
show function status where db='test'\G
show create function fn_pow\G
5.3    删除函数
 drop function if exists fn_pow //
7   触发器
对表中的数据操作时,可以触发一段代码执行
三个数据操作:
l  insert
l  update
l  delete
两个触发时间:
l  before
l  after
一张表中最多可以有6个触发器
l  before insert
l  after insert
l  before update
l  after update
l  before delete
l  after delete
两个隐含对象
l  new
新的数据行
insertnew:要插入的新行
updatenew:修改后的新行
deletenew:没有
l  old
旧的数据行
insertold:没有
updateold:修改前的旧数据
deleteold:被删除的旧数据
l  访问新行或旧行数据:
new.id
new.name
old.age
old.tel
7.1    创建触发器
操作商品表insert,before,new
create trigger  触发时间 on 
for each row
being
代码
end;
用触发器自动更新updated字段
--  学生表添加 updated字段
alter table t_student
add created datetime //
--  添加触发器,插入数据时自动填入时间
--  before insert
DELIMITER //
CREATE TRIGGER tr_b_i
BEFORE INSERT ON t_student FOR EACH ROW
BEGIN
 SET new.created=NOW();
END //
 
insert into t_student(name)
values('tony') //
 
select from t_student //
 
--  添加触发器,修改数据时自动修改时间
 
alter table t_student
add updated datetime //
 
 
DELIMITER //
CREATE TRIGGER tr_b_u
BEFORE UPDATE ON t_student FOR EACH ROW
BEGIN
  SET new.updated = NOW();
END //
 
UPDATE t_student SET NAME='tina' WHERE stu_id=2
 
select from t_student //
 
 
--  级联删除,删除主表信息时利用触发器删除子表信息
--  before delete
DELIMITER //
CREATE TRIGGER tr_b_d
BEFORE DELETE ON t_student FOR EACH ROW
BEGIN
  DELETE FROM t_tel WHERE stu_id=old.stu_id;
END //
 
delete from t_student where name='a' //
7.2    查看触发器
进入系统库 information_schema
use information_schema //
查询 triggers 表中触发器信息
select * from triggers\G
7.3    删除触发器
drop trigger 触发器名
级联删除
删除主表的数据时,要先把子表的数据删除。
8   数据库的备份、恢复
备份方式:
  1. 冷备份(按月)
  2. 热备份
  • 定时任务Job (按周,日(凌晨2点),小时)、
  • 实时备份(主从复制,实时同步)
查看数据安装路径
SELECT @@basedir AS basePath FROM DUAL;
C:\Program Files\MySQL\MySQL Server 5.5\bin>
使用mysqldump命令备份数据库
使用mysql命令恢复数据库
8.1    备份
退出mysql,在系统命令行执行:
下面命令是一行代码,不能折行
mysqldump  -uroot -p
--default-character-set=utf8  //表中存的是什么编码
hr>d:\hr.sql  //>文件
数据库名
8.2    恢复
两步恢复:
1)  数据库中新建一个库
create database jtdb2 charset utf8;
2)  系统命令行执行恢复命令
下面命令是一行代码,不能折行
mysql -uroot -p
--default-character-set=utf8
jtdb2<d:\jtds.sql    
9   索引
9.1    存储过程产生大量数据
1)  创建一个内存表tm engine=memory
2)  创建一个磁盘表td
3)  在存储过程中,循环20000次向内存表插入随机字符串
4)  20000条数据,一批存入磁盘表
5)  清空内存表
 
--  内存表
drop table if exists tm;
create table tm(
   c varchar(20)
engine=memory charset=utf8;
 
--  磁盘表
drop table if exists td;
create table td(
   id int primary key auto_increment,
   c varchar(20)
engine=innodb charset=utf8;
 
--  存储过程
DROP PROCEDURE IF EXISTS gen_data;
DELIMITER //
CREATE PROCEDURE gen_data(IN n INT)
BEGIN
  DECLARE i INT DEFAULT 0;
  WHILE i<n DO
    INSERT INTO tm VALUES (UUID());
    SET i=i+1;
  END WHILE;
 
  INSERT INTO td(c) SELECT c FROM tm;
  DELETE FROM tm;
END //
 
 
CALL gen_data(1000) 
 
 
 
 
DROP PROCEDURE IF EXISTS test_insert;
DELIMITER //
CREATE PROCEDURE test_insert(cnt INT)
  BEGIN
    DECLARE i INT DEFAULT 0;
    START TRANSACTION;
    WHILE i<cnt
      DO
          INSERT INTO td(c) VALUES(UUID());
      SET i=i+1;
      END WHILE;
    COMMIT;
END //
 
 
9.2    索引优化
索引其本质是创建了一张索引表,现有表的拷贝
(索引需要代价,插入数据要重写排序)
只拷贝现有表的指定索引字段。重要是做了一件事情:
排序
为什么它要排序呢?为什么排序后就快了呢?
不创建索引,查询时,全表遍历。
折半算法
用索引提高数据查找效率
--  没有索引,花3.5秒查询
select * from td where c='ab' //
 
--  c字段创建索引,花140秒左右
create index td_c_index on td(c) //
 
--  有索引查询花费 0.00 
select * from td where c='ab' //
9.3 MySQL验证索引的使用-最左前缀特性
复合索引
通过EXPLAIN关键字可以判断查询SQL语句是否使用索引
Possible_keys如果有值就代表使用了哪个索引,如果null就代表查询没有使用索引,全表遍历。
SELECT * FROM tb1
WHERE user_id=100;
SELECT * FROM tb1
WHERE order_id=300;
SELECT * FROM tb1
WHERE user_id=100 AND order_id=300;
SELECT * FROM tb1
WHERE order_id=300 AND user_id=100 ;
没使用索引
EXPLAIN
SELECT * FROM t_goods
WHERE title LIKE '%皮面%'
使用索引
EXPLAIN
SELECT * FROM t_goods
WHERE title LIKE '皮面%'
没有使用索引
EXPLAIN
SELECT * FROM t_goods
WHERE title LIKE '%皮面'
EXPLAIN SELECT * FROM tb_cart WHERE user_id=1 AND item_id=1
EXPLAIN SELECT * FROM tb_cart WHERE user_id=1
EXPLAIN SELECT * FROM tb_cart WHERE item_id=1
查看SQL的执行计划,可以看出第一句、第二句SQL使用了索引,第三句 SQL未使用索引。很好的证明了索引左侧前缀特性
注意:
1)下面的语句违反了左侧前缀的特性,为何仍然可以使用索引呢?因为MYSQL对SQL语句有优化,它会重新组合where条件。
EXPLAIN SELECT * FROM tb_cart WHERE item_id=1 AND user_id=1
2)没有where条件的查询是不会使用索引的。
 
10   作业
商品表 tb_item
有什么品牌
最贵商品的品牌、名称、价格
分页查看商品
商品名和商品描述
商品分类表 tb_item_cat
查询所有的顶层分类
查询 161 下的二层分类
查询 162 下的三层分类
用户表
订单表
订单编号是 20161001490698615071
查询没中类别的商品数量
查询 类别 163 的商品
查询商品价格不大于100的商品名称列表
查询品牌是联想,且价格在40000以上的商品名称和价格
查询品牌是三木,或价格在10以上的商品名称和价格
查询品牌是三木、广博、齐心的商品名称和价格
查询品牌不是联想、戴尔的商品名称和价格
查找品牌是联想且价格大于10000的电脑名称
查询联想或戴尔的电脑名称列表
查询联想、戴尔、三木的商品名称列表
查询不是戴尔的电脑名称列表
查询所有是记事本的商品品牌、名称和价格
查询品牌是末尾字符是''的商品的品牌、名称和价格
名称中有联想字样的商品名称
查询卖点含有'爆款'电脑名称
查询开头字母是A的电脑名称
将地址表中的城市、地区、详细地址组合到一起,
获取订单编号为 20161001490698615071 中的每种商品的标题、单价、数量、总价
统计商品表中各个品牌的商品数量
统计商品表中各个品牌的商品数量,并且按照数量从少到多排序
统计商品表中各个品牌的商品数量,去除品牌为NULL的行,并且按照数量从少到多排序
查询不同品牌中最贵的商品价格
将不同品牌中最贵的商品按照价格降序排序
找出不同品牌中最贵的商品的前三名
查询订购了10000028商品的客户姓名和联系方式(三层子查询)
首先查询订单表,根据10000028这个商品编号找到有该商品的订单编号
然后查询订单表,根据上面得到的订单编号找到订购此订单的用户编号
最后查询用户表,根据第二部中查到的用户编号,找到对应的用户名和联系方式
查询没中类别的商品数量
    select cid,count(*) from tb_item group by cid
查询 类别 163 的商品
    select id,title,price from tb_item where cid=163;
查询商品价格不大于100的商品名称列表
    select id,title,price from tb_item where price<100;
查询品牌是联想,且价格在40000以上的商品名称和价格
    select id,title,price from tb_item where brand='联想' and price>40000;
查询品牌是三木,或价格在50以下的商品名称和价格
    select id,brand,title,price from tb_item where brand='三木' or price<50;
查询品牌是三木、广博、齐心的商品名称和价格
    select id,brand,title,price from tb_item where brand in('三木','广博','齐心');
查询品牌不是联想、戴尔的商品名称和价格
    select id,brand,title,price from tb_item where brand not in('联想','戴尔');
查找品牌是联想且价格大于10000的电脑名称
    select id,brand,title,price from tb_item where brand='联想' and price>10000;
查询联想或戴尔的电脑名称列表
    select id,brand,title,price from tb_item where brand='联想' or brand='戴尔';
查询联想、戴尔、三木的商品名称列表
    select id,brand,title,price from tb_item where brand in('联想','戴尔','三木');
查询不是戴尔的电脑名称列表
    select id,brand,title,price from tb_item where brand<>'戴尔';
查询所有是记事本的商品品牌、名称和价格
    select id,brand,title,price from tb_item where title like '%记事本%';
查询品牌是末尾字符是''的商品的品牌、名称和价格
    select id,brand,title,price from tb_item where brand like '%';
名称中有联想字样的商品名称
    select id,brand,title,price from tb_item where title like '%联想%';
查询卖点含有'爆款'电脑名称
    select id,brand,title,price from tb_item where cell_point like '%爆款%';
查询开头字母是A的电脑名称
    select id,brand,title,price from tb_item where title like 'A%';
将地址表中的城市、地区、详细地址组合到一起,
    select concat(receiver_city, receiver_district,receiver_address) addr from tb_address;
获取订单编号为 20161001490698615071 中的每种商品的标题、单价、数量、总价
    select title,price,num,total_fee from tb_order_item where order_id='20161001490698615071';
统计商品表中各个品牌的商品数量
    select brand,count(*) from tb_item group by brand;
统计商品表中各个品牌的商品数量,并且按照数量从少到多排序
    select brand,count(*) c from tb_item group by brand order by c;
统计商品表中各个品牌的商品数量,去除品牌为NULL的行,并且按照数量从少到多排序
    select brand,count(*) c from tb_item where brand is not null group by brand order by c;
查询不同品牌中最贵的商品价格
    select id,title,brand,price from tb_item where (brand,price) in(
      select brand,max(price) m from tb_item where brand is not null group by brand);
将不同品牌中最贵的商品按照价格降序排序
    select id,title,brand,price from tb_item where (brand,price) in(
      select brand,max(price) m from tb_item where brand is not null group by brand)
    order by price desc;
找出不同品牌中最贵的商品的前三名
    select id,title,brand,price from tb_item where (brand,price) in(
      select brand,max(price) m from tb_item where brand is not null group by brand)
    order by price desc
    limit 3;
查询订购了10000028商品的客户姓名和联系方式
首先查询订单表,根据10000028这个商品编号找到有该商品的订单编号
然后查询订单表,根据上面得到的订单编号找到订购此订单的用户编号
最后查询用户表,根据第二部中查到的用户编号,找到对应的用户名和联系方式
    select id, username, phone, email from tb_user where id in
      (select user_id from tb_order where order_id in
        (select order_id from tb_order_item where item_id=10000028))
    select
        distinct u.id, u.username, u.phone, u.email
    from
        tb_user u join tb_order o on u.id=o.user_id
                  join tb_order_item i on o.order_id=i.order_id
    where
i.                     item_id=10000028
商品表 tb_item
        select * from tb_item;
有什么品牌
        select distinct brand from tb_item;
最贵商品的品牌、名称、价格
        select brand,title,price
        from tb_item
        order by price desc
        limit 1;
分页查看商品
        select id,brand,title,price
        from tb_item
        order by price desc
        -- limit 0,10;
        -- limit 10,10;
        -- limit 20,10;
        limit 30,10;
商品名和商品描述
        select
            title,item_desc
        from
            tb_item i join tb_item_desc d
            on i.id=d.item_id
        limit 1;
商品分类表 tb_item_cat
        select * from tb_item_cat;
        select * from tb_item_cat
        where name like '%电脑%' or
              name like '%笔记本%' or
              name like '%手机%';
查询所有的顶层分类
        select * from tb_item_cat
        where is_parent=1 and parent_id is null;
``查询 161 下的二层分类
        select * from tb_item_cat
        where parent_id=161 order by sort_order;
查询 162 下的三层分类
        select * from tb_item_cat
        where parent_id=162 order by sort_order;
用户表
        select * from tb_user;
订单表
        select * from tb_order;
用户 id 14的订单
        select * from tb_order where user_id=14;
订单编号是 20161001490698615071
查询这个订单的所有商品
        select * from tb_order_item
        where order_id=20161001490698615071;

2-笔记
在实际开发中
jar包的版本是不是随便升级,显然不是。
软件团队中有一个灵魂人物,来决定jar引用哪些,
jar的版本。架构师。
ts-parent pom.xml会看即可,一般由团队资深架构师来搭建。
ts-common 把分散在各个子系统中的工具类。
高级程序员,核心代码编写。一般程序员会用。
ts-manage 聚合工程,小组的高级、中级程序员他来搭建聚合工程,包括聚合工程下的子项目。
ts-manage-pojo User.pojo,照猫画虎写其它模块
ts-manage-mapper
ts-manage-service
ts-manage-controller/web
Maven增强
项目间关系:依赖、继承、聚合
1)依赖,调用jar时,maven会自动去找这个jar依赖的相关的其它的jar包。例如:springmvc3.2.8,自动去找log4j 3.10。通过每个jar提供*.pom文件去找对应依赖
2)继承,jar管理,所有子项目中共有jar包,在此声明,版本升级就非常的方便。
3)聚合,在pom.xml中有一组module,管理多个子项目,一键编译。
测试(工作量非常大)和运维(部署)
2017年美国博士DevOpts开发运维一体化
Maven+GitHub版本控制+Jenkins
自动测试 JUnit @Test,会自动产生一个测试报告
自动运维 自动从GitHub下载新的代码,自动的编译,自动打包,自动部署到tomcat下,自动启动
ecshop网上开源商城代码,小型电商。
mysql增强?
在传统企业中由DBA数据库管理员,
写SQL,查询性能调优。
但是让大家只是了解?随着硬件和互联网,大数据的发展。例如:nosql 不仅仅是sql
关系型数据库:Oracle,SqlServer,MySQL
软肋,表的数据的关联关系非常的密切,多表联查,随着数据的增长,查询越来越慢。
数据量有一定限制!
Oracle单表可以支持到多少条数据?上亿
MySQL 1000万
nosql,最低亿级数据以上,mongodb,hbase
MySQL旧的方式在新的形势下被淘汰:
1)视图
2)存储过程,函数
3)触发器
旧的传统的企业,旧的系统还在使用这些旧的技术
我们面试时,会被问。
练习下面两个视图:============================================
CREATE VIEW v_goods238 AS
SELECT * FROM t_goods WHERE category_id=238
CREATE VIEW v_cat_goods AS
SELECT c.name,g.item_type,g.title FROM t_goods_category c
LEFT JOIN t_goods g
ON c.id=g.category_id
mysql增强,大型系统
1、【废除】视图,本质就是一个查询语句,作用把复杂SQL封装起来,调用中直接访问视图名称即可。这样调用者就非常方便。很难SQL就是DBA,系统分析师。
2、【废除】存储过程,本质脚本语言(弱)。性能高(在数据库上直接执行,它的服务器性能是所有服务器中最强)
数据库迁移oracle,mysql
3、【废除】函数,本质自定义函数,丰富业务算法(个性)。
数据库迁移oracle,mysql
4、【废除】触发器,本质类似拦截器。也很死板。
数据库迁移oracle,mysql
5、索引,复合索引,最左前缀特性
本质,就是提高查询效率
什么时候创建索引?用户抱怨时。
什么字段上创建索引?where,order
主键有索引吗?主键天生就有索引!!!!

选择组织机构的结构模板
小图标,全览
表设计
创建物理数据模型PDM,必须选择数据库类型,因为将来表可以自动生成建表的SQL语句。
Pd会自动产生创建表的sql语句
面试时怎么讲述项目?
  1. 你开发过什么项目?
  2. 你在开发团队中岗位是什么?负责业务模块是哪些?讲讲这些业务模块?
  3. 你未来职业规划?
美发管理系统
  1. 我做过美发管理系统,它是全国美发连锁的店的管理系统。这个系统是用来管理全国美发的各个店,包括:前台营业、会员管理、自助平台、服务与商品、库存管理、营业统计分析,还包括系统权限管理。
  2. 我是初级程序员,我负责库存管理和权限管理。库存管理主要管理美发相关产品,包括:产品入库、产品出库、库存盘点、库存的调拨、库存统计。
  3. 你做的库存盘点是什么意思?我做的库存盘点是指每天晚上打烊之前美发店会对产品进行人工的清点,然后和库存的系统比较。(把盘点的数据录入,只把异常信息录入),产生一张盘点表。上报到系统中。
  4. 你做的库存的调拨是什么意思?我做的库存调拨,当某个店产品不够用,这时又来不及从总店(物流)采购赶不上。这时看看其他的门店中有没有多余的产品。如果有,在咱们系统中下一个调拨单。从对方的门店申请调拨多个某产品过来。对方门店确认调拨单,把此产品就从他的门店的库存中减去。然后我们门店去他们门店取这些产品。调拨单如果很多,说明门店产品分配不够合理,提醒客户领导,他重新分配资源。根据往期数据可以进行更好的资源分配。
我在2018年在达内公司时开发了快乐运动健身系统,这个系统包括:数据魔方、预约签到、会员管理、课程管理、员工设置、场馆设置、统计报表、系统设置。
我在里面做了课程管理和系统设置。
我做的课程管理包括:团课、私教、评价系统这3个内容。团体来包场,一次20人作用,小班10人作用。包括所在场馆,是哪个教练,使用场地和课程的内容。
我们做这家健身俱乐部,他私教很多,有很多人定制私教课程。有私教管理。私教包括每个私教所能上的课程,包括所在场馆,场地,私教上课时间和预约人数。
你系统设置做了什么呢?权限管理,实现部门、用户、角色权限分配系统。让每个用户登录只能操作自己权限范围内的事情。限定哪些主菜单可以操作,哪些主菜单不可以操作。哪些模块的按钮能操作,哪些不能操作,例如:只能有新建的权利,不能有删除的权利。
Redis程序使用它?
Jedis 访问redis java api
Redis-server & //后台运行
防火墙要关闭
ts-parent的pom.xml加上jedis依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.0</version>
</dependency>
编写测试类
package jedis;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class TestJedis {
@Test
public void jedis(){
//连接redis服务器,ip+port
String ip = "192.168.27.113";
//获取到jedis对象
Jedis jedis = new Jedis(ip, 6379);
//调用redis set,key=name,value=tony
//jedis.set("name", "tony");
System.out.println(jedis.get("name"));
}
}
package jedis;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
public class TestJedis {
@Test
public void jedis(){
//连接redis服务器,ip+port
String ip = "192.168.27.113";
//获取到jedis对象
Jedis jedis = new Jedis(ip, 6379);
//调用redis set,key=name,value=tony
//jedis.set("name", "tony");
System.out.println(jedis.get("name"));
}
@Test        //分片Shard池化
public void sharded(){
//创建一个Sharded池配置对象
JedisPoolConfig config = new JedisPoolConfig();
//最大的连接数
config.setMaxTotal(50);
//连接多个redis节点,ip和port的信息
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
//一个的节点信息就ok
JedisShardInfo info1 =
new JedisShardInfo("192.168.27.113",6379);
shards.add(info1);
//创建分片池
ShardedJedisPool pool =
new ShardedJedisPool(config, shards);
//从池中获取一个jedis链接
ShardedJedis jedis = pool.getResource();
System.out.println(jedis.get("name"));
}
}
把jedis和spring框架整合
通过xml配置把jedis的对象创建交给spring框架。
在哪里使用缓存?
package cn.tedu.store.service;
import java.io.IOException;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import cn.tedu.store.bean.dict.Area;
import cn.tedu.store.bean.dict.City;
import cn.tedu.store.bean.dict.Province;
import cn.tedu.store.mapper.DictMapper;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
@Service("dictService")
public class DictServiceImpl implements DictService {
@Resource
private DictMapper dictMapper;
//获取spring框架创建的jedis对象
@Resource
private ShardedJedisPool shardedJedisPool;
//转换对象到json或者json到java对象工具类
private static final ObjectMapper MAPPER = new ObjectMapper();
public List<Province> getProvinceList() {
return dictMapper.getProvinceList();
}
public List<City> getCityList(String provinceCode){
List<City> cityList = null;
//设置redis key的规则
String KEY = "TS_CITY_"+provinceCode;
//由池中获取jedis对象
ShardedJedis jedis = shardedJedisPool.getResource();
//1.从redis中获取数据,如果有数据直接返回
//注意set设置2次就会被覆盖
if(jedis.exists(KEY)){   //判断key是否存在
String json = jedis.get(KEY);
JsonNode jsonNode;
try {
//从缓存中获取数据,然后把json转成java对象,然后直接返回,无需访问数据库
jsonNode = MAPPER.readTree(json);
Object obj = MAPPER.readValue(jsonNode.traverse(),
MAPPER.getTypeFactory().constructCollectionType(List.class, City.class));
return (List<City>) obj;      //减轻数据库访问压力
} catch (Exception e) {
e.printStackTrace();
}
}else{
//传统方式直接从数据库读取数据
cityList = dictMapper.getCityList(provinceCode);
//2.第一访问时redis没有值,必须从数据库中获取值后,把值放入redis
//把java list集合转成字符串json
try {
String json = MAPPER.writeValueAsString(cityList);
jedis.set(KEY, json);
return cityList;
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
public List<Area> getAreaList(String cityCode) {
return dictMapper.getAreaList(cityCode);
}
public String getProvinceNameByCode(String provinceCode) {
return dictMapper.getProvinceNameByCode(provinceCode);
}
public String getCityNameByCode(String cityCode) {
return dictMapper.getCityNameByCode(cityCode);
}
public String getAreaNameByCode(String areaCode) {
return dictMapper.getAreaNameByCode(areaCode);
}
}
Redis缓存应用注意点:
  1. 是不是所有的数据都能放在缓存中?
Reids能否替代mysql
当然不是,
缓存是存放热点数据,不会频繁修改的数据!!
内存掉电会有什么问题?
数据丢失。Redis每秒钟会自动存盘c++。MemCache

2-课堂笔记
目标:分析两个项目
两个项目界面原型
大家面试时能讲出业务需求。
业务需求包括:
1)项目(系统)结构图,系统中有哪些业务模块
2)描述清楚每个业务模块它的作用
如果要开发
3)表设计(概要设计)
4)详细设计
5)开发,写代码
6)测试
7)试运行(客户实际环境,没有正式运行,小范围测试8)正式上线
9)维护期
需求分析:
1)和客户“聊天”,派系统分析师+产品经理,调研,结果:《需求调研报告》
2)页面静态原型(静态网站)
美发店管理系统
day10\SalonMS\WebContent\index.html
快乐运动,健身系统
day10\yd\index.html

作者:Darren
电话:15110448224
QQ:603026148
以上内容归靳烨所有,如果有什么错误或者不足的地方请联系我,希望我们共同进步。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. [luogu] P1629 邮递员送信 反图+两遍最短路

    前言 好水。。 ,算是基础题了 传送门 &#xff1a; 思路 因为需要拿了之后又回去,因此我们还需要统计一遍 走回去的最小开销,但是其实没必要都跑一遍 我们只需要建立一个反图即可 CODE struct node {int to,val; }; vector<node> g[N],ung[N]; int dist[N],undist…...

    2024/5/9 7:52:26
  2. RobotFramework的使用

    1.RobotFramework的简介和特点 RF是一个基于Python语言开发的&#xff0c;可扩展的&#xff0c;是以关键字驱动模式的自动化测试框架&#xff0c;RF最新的版本是2019 年7月份发布&#xff0c;7月份之前只支持python2.7&#xff0c;7月之后支持3.X的版本补充&#xff1a;关键字驱…...

    2024/4/28 23:57:09
  3. js手写题

    1&#xff0c;函数防抖和函数节流 防抖和节流都是处理处理频繁调用的函数时的一个优化 函数防抖 在规定是一段时间内&#xff0c;只执行最后一次的函数调用&#xff0c;前面的不生效 场景&#xff1a;在搜索框发请求时&#xff0c;避免用户打字幅度较快而发送太多没有必要的…...

    2024/5/10 4:54:53
  4. ubuntu qt安装及快捷方式建立与opencv配置

    ubuntu qt安装及快捷方式建立与opencv配置 https://www.cnblogs.com/tianpeng-blog/p/14780223.html ubuntu下查询OpenCV版本以及路径 https://www.cnblogs.com/qilai/p/13663484.html...

    2024/4/15 11:42:49
  5. 2021-10一周自我总结

    一周的挫折 1&#xff0c;计算机组成原理没有听懂 2.操作系统一个实验写了两个周还有错&#xff0c;另外一个写了整整两天&#xff0c;还是运行不了 3.吃早餐的时候&#xff0c;有个傻逼一直盯着我&#xff1b; 一周做的好的地方 1.数据库认真学习了&#xff1b; 2.听讲比以…...

    2024/4/15 11:42:24
  6. 21天好习惯第九期09

    今天写的作业。 循环输出 26 个字母。 #include <stdio.h> int main() { char c; for(c ‘A’; c < ‘Z’; c) printf("%c ", c); return 0; }...

    2024/5/8 6:05:09
  7. Android 菜单

    android 中的菜单总结 1、option menu 选项菜单应该是我们最长用到的菜单了&#xff0c;它的使用也是最简单的。创建步骤如下 1、在res/menu目录下创建菜单资源文件,这里名为option_menu.xml <?xml version"1.0" encoding"utf-8"?> <menu xml…...

    2024/4/15 11:43:30
  8. 什么样的测试工程师更受HR青睐?

    同样是测试人员&#xff0c;交代的任务也能按时完成&#xff0c;为什么受欢迎的程度会有所不同呢&#xff1f; 先来说说不同的测试人员有什么不同吧。 1、责任心不同 对于一个测试人员来讲&#xff0c;责任心是很重要的一点。既然你测了这个功能&#xff0c;那么就要对这个功…...

    2024/5/7 17:33:39
  9. 链表元素的移除(包含重复元素和不重复元素)

    文章目录1. 删除排序链表中的重复元素2. 移除链表元素3. 删除排序链表中的重复元素 II1. 删除排序链表中的重复元素 我认为链表元素的关键之处在于在头节点之前添加一个结点。 1. 为什么要这样&#xff1f; 主要是将后面的去除过程都形成相同操作&#xff0c;进而使用循环实现…...

    2024/5/8 2:08:22
  10. UVA 508 java

    import java.util.Map; import java.util.Scanner; import java.util.TreeMap; public class Main {static String s;static String[] anew String[100010];//单词字典static Map<Character, String > qnew TreeMap<Character, String>();static Map<String, St…...

    2024/5/9 18:11:07
  11. ArrayList、HashTable到JSON

    学习MINIUI框架有几天了,今天算是弄明白数据传递的原理了。 要提到的两个东西是HashTable和ArrayList HashTable 是键值对的形式,通过键来访问值。 ArrayList集合 可以说是个对象数组,像数组一样通过索引来访问值。 下面通过这段代码,做测试,来了解其原理public stati…...

    2024/5/8 12:46:44
  12. java敏感异常有哪些

    java敏感异常有哪些 java.io.FileNotFoundException&#xff1a;泄露文件系统结构和文件名列举 java.util.jar.JarException&#xff1a;泄露文件系统结构 java.util.MissingResourceException&#xff1a;资源列举 java.security.acl.NotOwnerException&#xff1a;所有人列…...

    2024/5/9 11:00:41
  13. CSDN Markdown编辑器帮助文档

    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…...

    2024/5/10 4:51:22
  14. Java异常处理机制

    1、什么是Java异常 ​ 异常在我们的生活中就是一些跟往常不一样的&#xff0c;不太正常的现象。在Java中&#xff0c;异常就是指程序出现了一些错误&#xff0c;也就是说程序没有按照我们想要的方向走。就比如说&#xff1a;我们写的一个模块传入的数据不符合你的要求&#xf…...

    2024/4/15 11:43:35
  15. Jupyternote Book使用虚拟环境并实现自动补全

    ##使用虚拟环境 -创建虚拟环境&#xff0c;并为虚拟环境安装jupyter内核 pip install ipykernel python -m ipykernel install --user --name envname -查看内核 jupyter kernelspec list -删除kernel jupyter kernelspec remove envname ##使用自动补全方法 -在相应的虚…...

    2024/4/15 11:43:35
  16. 刷题知识点总结

    文章目录一.位运算一.位运算 1.偶数个数相异或&#xff0c;结果一定为0...

    2024/4/20 4:41:36
  17. LeetCode 575.分糖果

    一. 解题过程 由于最近一直在看哈希表、map相关的知识点&#xff0c;看到这个题第一想法是开一个map映射&#xff0c;key-value即糖果种类-此种糖果的数量&#xff0c;存每种糖果有多少个。&#xff08;有了map之后确实觉得标记数组的写法傻傻的&#xff09; class Solution …...

    2024/4/30 10:04:32
  18. 【EduCoder】泛型程序设计——比较

    泛型程序设计1本关任务-定义泛型类提示注意过关提示编程要求答案代码:2本关任务-泛型使用相关知识编程要求答案代码泛型是一种抽象级别较高的程序设计机制&#xff0c;它可以将不同类型对象的同一种操作加以抽象、封装&#xff0c;使其有更广泛的代码重用性。是对不同类型数据实…...

    2024/4/15 11:43:25
  19. 关于EntityManager

    一、实体的状态 ① 新建状态 NEW 新创建的状态&#xff0c;尚未拥有持久性主键 实际上就是new了一个普通的JavaBean对象 ② 持久化状态 已经拥有持久化主键并和持久化建立了上下文环境 当处在托管状态的实体Bean被管理器flush了&#xff0c;那么就在极短暂的时间进入了持久化状…...

    2024/5/8 8:48:28
  20. 在 VS Code 中使用 Git 进行版本控制

    在 VS Code 中使用 Git 进行版本控制 参考: Using Version Control in VS Code 文章目录在 VS Code 中使用 Git 进行版本控制初始化(init)克隆(clone)提交(Commit)版本比对初始化(init) 功能: 将文件夹初始化为git仓库(实际就是在文件夹下创建一个.git的隐藏文件夹) 方法一: …...

    2024/4/15 11:43:25

最新文章

  1. 官宣:vAsterNOS正式发布!开放网络操作系统免费试用!

    近期&#xff0c;vAsterNOS&#xff08;设备模拟器&#xff09;正式发布&#xff0c;可以满足用户快速了解 AsterNOS、体验实际操作、搭建模拟网络的需求&#xff0c;可运行在GNS3、EVE-NG等网络虚拟软件中。 AsterNOS 网络操作系统是星融元为人工智能、机器学习、高性能计算、…...

    2024/5/10 5:13:42
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/9 21:23:04
  3. 红豆Cat 1开源|项目三: 从0-1设计一款HTTP版本RTU(支持GNSS)产品的软硬件全过程

    HTTP版RTU&#xff08;支持GNSS&#xff09;项目概述 RTU&#xff08;Remote Terminal Unit&#xff09;&#xff0c;中文即远程终端控制系统&#xff0c;负责对现场信号、工业设备的监测和控制。RTU是构成企业综合自动化系统的核心装置&#xff0c;通常由信号输入/出模块、微…...

    2024/5/5 21:31:41
  4. Vue3学习笔记+报错记录

    文章目录 1.创建Vue3.0工程1.1使用vue-cli创建1.2 使用vite创建工程1.3.分析Vue3工程结构 2.常用Composition2.1 拉开序幕的setup2.2 ref函数_处理基本类型2.3 ref函数_处理对象类型2.4 ref函数使用总结 1.创建Vue3.0工程 1.1使用vue-cli创建 查看vue/cli版本&#xff0c;确保…...

    2024/5/9 10:02:08
  5. 增加网站搜索引擎排名的6个准则

    怎样提高网站排名首页 在竞争激烈的网络世界中&#xff0c;网站的排名对于吸引流量和提升曝光至关重要。登上搜索引擎结果页面的首页&#xff0c;意味着更多的曝光和点击率。以下是一些方法&#xff0c;可以帮助您提高网站在搜索引擎中的排名&#xff0c;让其跻身首页&#xf…...

    2024/5/10 0:09:59
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/8 6:01:22
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/9 15:10:32
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/9 4:20:59
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/8 20:48:49
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/8 19:33:07
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/8 20:38:49
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/9 7:32:17
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/9 17:11:10
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57