自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(186)
  • 收藏
  • 关注

原创 MyBatis传参数

MyBatis传参数传入参数从java代码中把数据传入到mapper文件的sql语句中1)parameterType :写在mapper文件中的一个属性;表示dao接口中方法的参数的数据类型​ 例如 :StudentDao接口​ public Student selectStudentById(Integer id)2)一个简单类型的参数:​ 简单类型:mybatis把java的基本数据类型和String都叫简单类型​ 在mapper文件获取简单类型的一个参数的值,使用 #{任意字

2021-05-14 16:41:14 203

原创 MyBatis的动态代理总结

MyBatis的动态代理动态代理mybatis创建了dao接口的实现类,在实现类中调用SqlSession的方法执行sql语句使用SqlSession.getMapper(dao接口.class) 获取这个dao接口的对象使用动态代理方式获取SqlSession对象,SqlSessionFactory.openSession()使用getMapper方法获取某个接口的对象,sqlSession.getMapper(接口.class)使用dao接口的方法,调用方法就执行了mapper文件中的

2021-05-14 13:44:11 183

原创 MyBatis 主要类介绍

MyBatis 主要类介绍Resources :mybatis中的一个类,负责读取主配置文件InputStream in = Resources.getResourceAsStream("mybatis.xml");SqlSessionFactoryBuilder读取全局配置文件,得到数据源信息,创建连接工厂SqlSessionFactory。它的特点是,当创建了SqlSessionFactory对象之后,这个类就不需要了。因此,它的最佳范围是存在于方法体内,也就是局部变量注意:是一个类

2021-05-14 13:25:52 393

原创 三层架构

三层架构mvc : web开发中,使用mvc架构模式。m : 数据,v: 视图,c: 控制器​ c控制器:接受请求,调用service对象,显示请求的处理结果。当前使用Servlet作为控制器​ v视图:现在使用jsp,html,css,js。显示请求的处理结果,把m中数据显示出来​ m数据:来自数据库MySQL,来自文件,来自网络mvc作用: 1. 实现解耦合 2. 让mvc各负其职 3. 使系统扩展更好、更容易维护三层架构界面层(视图层):接收用户的请求,

2021-05-13 16:49:55 188 1

原创 Tomcat 简单了解

Tomcat概念Tomcat服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下普遍使用,是开发和调试Servlet、JSP程序的首选原理Tomcat主要组件:服务器Server,服务Service,连接器Connector、容器Container连接器Connector和容器Container是Tomcat的核心一个Container容器和一个或多个Connector组合在一起,加上其他一些支持的组件共同组成一个Service服务,有了Service服务便可以对外提供能力

2021-05-12 13:49:42 189

原创 Maven 介绍

Maven介绍maven概念模型Maven是Apache下的一个开源项目,它是一个创新的项目管理工具,它用于对Java项目进行项目构建、依赖管理及项目信息管理Maven包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑项目对象模型(Project Ob

2021-05-12 13:45:00 149

原创 JDBC 悲观锁和乐观锁

并发控制当程序中可能出现并发操作的情况时,就需要保证在并发操作的情况下数据的准确性,以此确保当前用户和其他用户一起操作时,所得到的结果和某个用户单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的目的是保证一个用户的操作不会对另一个用户的操作结果产生不合理的影响。如果没有做好并发控制,就可能导致数据脏读、幻读和不可重复读等问题。并发控制,一般都和数据库管理系统(DBMS)有关。在 DBMS 中的并发控制的任务,是为了确保在多个事务同时存取数据库中的同一数据时,不破坏事务的隔离性、一致性和数据

2021-05-11 16:59:06 205

原创 JDBC 事务机制

/*JDBC事务机制 1.JDBC中的事务是自动提交的 自动提交——只要执行任意一条DML语句,则自动提交一次。这是JDBC默认的事务行动 在实际的业务当中,通常都是N条DML语句共同联合才能完成的,必须保证他们这些DML语句在同一个事务中同时成功会同时失败 2.设置为自动提交的重点三行代码 conn.setAutoCommit(false); conn.commit(); conn.rollback();*/public class JDBCTest02{ publi

2021-05-11 15:58:21 136

原创 JDBC PreparedStatement简单操作

public class JDBCTest02{ public static void main(String[] args){ Connection conn = null; PreparedStatement ps = null;//使用PreparedStatement(预编译的数据库操作对象) ResultSet rs = null; try{ //1.注册驱动 Class.for

2021-05-11 15:48:25 80

原创 JDBC登录实践和SQL注入解决方法

登录实践操作/*1.会出现SQL注入操作2.测试结果 用户名:fff 密码:fff' or '1'='1 登录成功*/public class JDBCTest01{ public static void main(String[] args){ //初始化一个界面 Map<String,String> userLoginInfo = initUI(); //验证用户名和密码 boolean loginSuc

2021-05-11 13:25:29 148

原创 JDBC 的简单操作(增删改查)

JDBC的操作步骤1.加载数据库驱动2.通过DriverManager获得连接3.通过Connection创建Statement对象4.使用Statement执行SQL语句5.操作结果集6.关闭资源JDBC 的简单操作(增删改查)增加在标准SQL语句中insert语句是插入语句,通过Statement接口的executeUpdate()方法可执行插入操作insert语句的语法格式为 :​ INSERT INTO 表名[(字段名1,字段名2…)] VALUES(属性值1,属性值

2021-05-10 16:02:39 2391

原创 JDBC 使用

JDBC 使用JDBC 简介JDBC(Java DataBase Connectivity)是Java与数据库的接口规范,由Java 语言编写的类和接口组成,大致分为两类:针对Java程序员的JDBC API和针对数据库开发商的低层的JDBC driver API。而JDBC驱动程序由实施了这些接口的类组成java数据库连接,即使用java代码发送sql语句的技术,为多种关系型数据库提供统一访问JDBC 架构分为双层架构和三层架构双层 :作用 :此架构中,java Applet 或应用直接访

2021-05-10 13:18:22 212 1

原创 MySQL锁机制

MySQL锁机制为了保证数据并发访问时的一致性和有效性,任何一个数据库都存在锁机制。锁机制的优劣直接影响到数据库的并发处理能力和系统性能,所以锁机制也就成为了各种数据库的核心技术之一。锁机制是为了解决数据库的并发控制问题而产生的。如在同一时刻,客户端对同一个表做更新或查询操作,为了保证数据的一致性,必须对并发操作进行控制。同时,锁机制也为实现 MySQL 的各个隔离级别提供了保证。可以将锁机制理解为使各种资源在被并发访问时变得有序所设计的一种规则。如何保证数据并发访问的一致性、有效性是所有数据库必须

2021-05-06 11:27:07 97

原创 mysql事务

MySQL事务事务的作用事务可以将一系列的数据操作捆绑成一个整体进行统一管理,如果某一事务执行成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分。如果事务执行时遇到错误,则就必须取消或回滚。取消或回滚后,数据将全部恢复到操作前的状态,所有数据的更改均被清除MySQL 通过事务保证了数据的一致性事务的概念和特点数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么

2021-05-06 11:24:35 137

原创 触发器

触发器概念MySQL 的触发器和存储过程一样,都是嵌入到 MySQL 中的一段程序,是 MySQL 中管理数据的有力工具。不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句来调用,也不需要手工启动,而是通过对数据表的相关操作来触发、激活从而实现执行。比如当对 student 表进行操作(INSERT,DELETE 或 UPDATE)时就会激活它执行。触发器与数据表关系密切,主要用于保护表中的数据。特别是当有多个表具有一定的相互联系的时候,触发器能够让不同的表保持

2021-04-27 14:56:31 1833

原创 MySQL存储过程

存储过程存储过程存储过程是一组为了完成特定功能的 SQL 语句集合。使用存储过程的目的是将常用或复杂的工作预先用 SQL 语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程。当以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用“CALL存储过程名字”即可自动完成。常用操作数据库的 SQL 语句在执行的时候需要先编译,然后执行。存储过程则采用另一种方式来执行 SQL 语句。一个存储过程是一个可编程的函数,它在数据库中创建并保存,一般由 SQL

2021-04-26 16:52:30 139

原创 MySQL索引

MySQL索引索引概念索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列。否则,数据库系统将读取每条记录的所有信息进行匹配。可以把索引比作新华字典的音序表。例如,要查“库”字,如果不使用音序,就需要从字典的 400 页中逐页来找。但是,如果提取拼音出来,构成音序表,就只需要从 10 多页的音序表中直接查找。这样就可以大大节省时间。因此,使用索引可以很大程度上提高数据库的查询速度,还有效

2021-04-26 15:29:47 225

原创 MySQL视图

视图视图概念视图在数据库中的作用类似于窗户,用户可以通过这个窗口看到只对自己有用的数据。既保障了数据的安全性,又大大提高了查询效率MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中。使用视图查询数据时,数据库会从真实表中取出对应的数据。因此,视图中的数据是依赖于真实表中

2021-04-26 09:37:35 275

原创 MySQL 数据表查询语句

MySQL 数据表查询语句在 MySQL 中,使用 SELECT 语句来查询数据。查询数据是指从数据库中根据需求,使用不同的查询方式来获取不同的数据,是使用频率最高、最重要的操作。SELECT 的语法格式如下:SELECT{* | <字段列名>}[FROM <表 1>, <表 2>…[WHERE <表达式>[GROUP BY <group by definition>[HAVING <expression> [{&lt

2021-04-25 17:08:25 2934

原创 MySQL运算符

MySQL常用运算符概述在 MySQL 中,可以通过运算符来获取表结构以外的另一种数据。例如,学生表中存在一个 birth 字段,这个字段表示学生的出生年份。如果想得到这个学生的实际年龄,可以使用 MySQL 中的算术运算符用当前的年份减学生出生的年份,求出的结果就是这个学生的实际年龄了。MySQL 所提供的运算符可以直接对表中数据或字段进行运算,进而实现用户的新需求,增强了 MySQL 的功能。每种数据库都支持 SQL 语句,但是它们也都有各自支持的运算符。我们除了需要学会使用 SQL 语句外

2021-04-25 09:39:31 988

原创 MySQL函数

MySQL函数简介MySQL 函数是 MySQL 数据库提供的内部函数,这些内部函数可以帮助用户更加方便地处理表中的数据。函数就像预定的公式一样存放在数据库里,每个用户都可以调用已经存在的函数来完成某些功能。提示:函数就是输入值然后得到相应的输出结果,输入值称为参数(parameter),输出值称为返回值。函数可以很方便的地实现业务逻辑的重用,并且 MySQL 数据库允许用户自己创建函数,以适应实际的业务操作。正确使用函数会让读者在编写 SQL 语句时起到事半功倍的效果。MySQL 函数用来对数据表

2021-04-25 09:13:49 152

原创 MySQL约束

MySQL约束MySQL约束概述MySQL约束是一种限制,它通过限制表中的数据,来确保数据的完整性和唯一性。使用约束来限定表中的数据是很有必要的。在 MySQL 中,约束是指对表中数据的一种约束,能够帮助数据库管理员更好地管理数据库,并且能够确保数据库中数据的正确性和有效性。例如,在数据表中存放年龄的值时,如果存入 200、300 这些无效的值就毫无意义了。因此,使用约束来限定表中的数据范围是很有必要的。在 MySQL 中,主要支持以下 6 种约束:1)主键约束主键约束是使用最频繁的约束。

2021-04-23 16:54:55 804

原创 MySQL数据表的基本操作

MySQL数据表的基本操作数据表是数据库的重要组成部分,每一个数据库都是由若干个数据表组成的。换句话说,没有数据表就无法在数据库中存放数据。比如,在电脑中创建一个空文件夹,如果要把“Hello C语言中文网”存放到文件夹中,必须把它写在 Word 文档、记事本或其它能存放文本的文档中。这里的空文件夹就相当于数据库,存放文本的文档就相当于数据表。数据表的基本操作,主要包括创建数据表、查看数据表结构、修改数据表和删除数据表等。MySQL创建数据表在创建数据库之后,接下来就要在数据库中创建数据表。所谓创

2021-04-22 16:48:05 328

原创 MySQL存储引擎

MySQL存储引擎数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。简而言之,存储引擎就是指表的类型。数据库的存储引擎决定了表在计算机中的存储方式。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。现在许多数据库管理系统都支持多种不同的存储引擎。MySQL 的核心就是存储引擎。MySQL 提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,不需要在整个服务器中使

2021-04-22 16:24:06 165

原创 MySQL的数据类型

MySQL数据类型数据表由多个字段组成,每个字段在进行数据定义的时候都要确定不同的数据类型。向每个字段插入的数据内容决定了该字段的数据类型。MySQL 提供了丰富的数据类型,根据实际需求,用户可以选择不同的数据类型。不同的数据类型,存储方式是不同的。MySQL数据类型简介数据类型(data_type)是指系统中所允许的数据的类型。MySQL 数据类型定义了列中可以存储什么数据以及该数据怎样存储的规则。数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据。例如,列中存储的为数字,则相

2021-04-21 17:14:01 357

原创 MySQL的基本操作

MySQL查看&显示数据库数据库可以看作是一个专门存储数据对象的容器,每一个数据库都有唯一的名称,并且数据库的名称都是有实际意义的,这样就可以清晰的看出每个数据库用来存放什么数据。在 MySQL 数据库中存在系统数据库和自定义数据库,系统数据库是在安装 MySQL 后系统自带的数据库,自定义数据库是用户定义创建的数据库。在 MySQL 中,可使用 SHOW DATABASES 语句来查看或显示当前用户权限范围以内的数据库。查看数据库的语法格式为:show databases [like '数据

2021-04-21 15:51:19 220

原创 Scalac入门

Scala简介Scala是一门类Java的多范式语言,它整合了面向对象编程和函数式编程的最佳特性。Scala运行于Java虚拟机(JVM)之上,并且兼容现有的Java程序Scala是一门纯粹的面向对象的语言Scala也是一门函数式语言马丁 · 奥德斯基( Scala之父)Scala特性1.与java无缝对接2.类型自动判断(val与var)3.支持并发和分布式(Actor)4.将java中接口与抽象类整合(Trait)5.模式匹配(Match)6.高阶函数,面向函数式编程Scala

2021-04-21 09:01:00 479

原创 MySQL是什么

MySQLMySQL是一种开放源代码的关系型数据库管理系统,使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理mysql 的优势由于 MySQL 数据库体积小、速度快、总体拥有成本低、开放源代码,其有着广泛的应用,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,因此搭配 PHP 和 Apache 服务器可组成良好的开发环境。主要的优势有以下几点MySQL 是开放源代码的数据库,任何人都可以获取该数据库的源代码。这就使得任何人都可以修正 MySQL

2021-04-20 22:11:05 8696

原创 数据管理技术的3个发展阶段

数据管理技术的3个发展阶段在目前阶段,存储和管理数据都离不开数据库。当数据存储到数据库后,数据库管理系统就会对这些数据进行组织和管理。数据管理就是对各种数据进行分类、组织、编码、查询和维护,主要经历了 3 个阶段,即人工管理阶段、文件系统阶段和数据库系统阶段。每一个阶段都是以减小数据冗余、增强数据独立性和方便操作数据为目的进行发展。数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象。人工管理阶段在计算机出现之前,人们主要利用纸张和计算工具(如算盘和计算尺)来进行数据的记录

2021-04-20 22:00:21 7088

原创 什么是数据库

数据存储方式计算机数据(Data)的存储一般以硬盘为数据存储空间资源,从而保证计算机内的数据能够持续保存。采用数据库的管理模式不仅提供了数据的存储效率,而且在存储的层面上提高了数据的安全性,并方便查询数据概念描述事物的符号称为数据,是数据库中存储的基本对象,是按一定顺序排列组合的物理符号。数据有多种变现形式,可以为数字、文字、图像、图形、声音、语言等它们经过数字化后(经过进制转化为数字)存入计算机中。数据的描述形式还不能完全表达其内容,需要经过解释,例如“20201678,王文,5300”,了解其

2021-04-20 21:49:17 507

原创 SpringMVC组件说明

SpringMVC 组件说明DispatcherServlet :前端控制器,也称为中央控制器,它是整个请求响应的控制中心,组件的调用由它统一调度,DispatcherServlet 的存在降低了组件之间的耦合性HandlerMapping :处理器映射器,它根据用户访问的 URL 映射到对应的后端处理器 Handler。也就是说它知道处理用户请求的后端处理器,但是它并不执行后端处理器,而是将处理器告诉给中央处理器Handler:处理器,是继DispatcherServlet前端控制

2021-01-12 00:20:34 124

原创 SpringMVC工作流程

SpringMVCSpringMVC是一个机遇模型 (M)-视图 (V)-控制层 ©-Web框架MVC模式使应用程序的不同方面(输入逻辑、业务逻辑和UI逻辑)分离,同时提供这些元素之间的松耦合模型(Model)封装了应用程序数据,通常他们将有POJO类组成视图(View)负责渲染模型数据,一般来说他生成客户端浏览器可以解释HTML输出控制器(Controller)负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染SpringMVC 工作流程SpringMVC是Spring的一个模块

2021-01-06 00:24:32 186

原创 热部署

所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用对于Java应用程序来说,热部署就是在运行时更新Java类文件。在基于Java的应用服务器实现热部署的过程中,类装入器扮演着重要的角色。大多数基于Java的应用服务器,包括EJB服务器和Servlet容器,都支持热部署。类装入器不能重新装入一个已经装入的类,但只要使用一个新的类装入器实例,就可以将类再次装入一个正在运行的应用程序Tomcat的热部署Tomcat的热部署(以后就不用重启了)没有热部署和有热部署的开发效率是天差地别的。这个

2020-09-29 09:54:53 203

原创 MongoDB的文档数据模型

MongoDB的文档数据模型首先,文件系统中的文件基本上对应于某个应用程序。当不同的应用程序所需要的数据部分相同时,也必须建立各自的文件,而不能共享数据,而文档数据库可以共享相同的数据。因此,文件系统比文档数据库数据冗余度更大,更浪费存储空间,且更难于管理维护其次,文件系统中的文件是为某一特定应用服务的,因此,要想对现有的数据再增加一些新的应用是很困难的,系统难以扩展,数据和程序缺乏独立性。而文档数据库具有数据的物理独立性和逻辑独立性,数据和程序分离NoSQL 中的文档数据库NoSQL 中的文档数据

2020-09-11 11:06:47 902

原创 MongoDB

MongoDB 是一个开源的文档数据库,它基于 C++ 语言编写,性能高,可用性强,能够自动扩展MongoDB 是最流行的 NoSQL 数据库之一,原生支持分布式集群架构,特别适合处理大数据,阿里巴巴、腾讯、头条、Twitter、Google、Facebook 等一线互联网公司都在使用 MongoDB 数据库与 HBase 相比,MongoDB 可以存储具有更加复杂的数据结构的数据,具有很强的数据描述能力。MongoDB 提供了丰富的作功能,但是它没有类似于 SQL 的操作语言,语法规则相对比较复杂M

2020-09-11 10:25:03 282

原创 Redis的数据类型

Redis 支持 5 种基础数据类型和 3 种特殊数据类型,它们分别是字符串(String)、哈希结构(hash)、列表(List)、集合(set)、有序集合(zset)和基数(HyperLogLog)、GEO(geospatial)、位图(bitmap)Redis 定义的这数据类型是十分有用的,它除了提供简单的存储功能,还能对存储的数据进行一些计算STRING(字符串):可以是保存字符串、整数和浮点数 ,可以对字符串进行操作比如增加字符或者求子串:如果是整数或者浮点数,可以实现计算,比如自增

2020-09-09 14:31:30 177

原创 Redis

Redis是一个由 Salvatore Sanfilippo 写的 key_value 存储系统,是当前互联网世界最为流行的NoSQL数据库。NoSQL在互联网系统中的作用很大,因为他可以在很大程度上提高互联网系统的性能Redis 开源免费,提供了 java,C/C++,C#,PHP 等客户端,使用方便。主要应用于内容缓存 和 处理大量数据的高访问负载Redis 具备一定持久层的功能,也可以作为一种缓存工具。对于NoSQL数据库而言,作为持久层,它存储的数据是半结构化的,这就意味着计算机在读入内存中有

2020-09-09 11:24:50 180

原创 集合框架(容器)

集合框架1.List集合下的ArrayList、Lin用到kedList2.Set集合下的HashSet、TreeSet3.Map集合常用的是HashMap、TreeMap,要是涉及到线程安全问题的会用到ConcurrentHashMapList、Set 和 Map集合的区别List、Set 和 Map集合它们都是Collection 接口下的子接口,它们的区别是 :1.List集合存储的是一组,有序的、可重复的对象2.Set集合存储的是一组,无序的、不重复的对象3.Map集合使用键值对(

2020-09-08 22:03:21 241

原创 原型模式

在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单原型模式的定义与特点原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。原型模式的结构与实现由于 Java 提供了对象的 clone() 方法,所以用

2020-09-08 17:09:09 137

原创 单例模式

单例模式在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。单例模式的定义与特点单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务

2020-09-08 16:54:04 185

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除