- 博客(216)
- 收藏
- 关注
原创 00 Mybatis之简介与入门
文章目录1 什么是MyBatis2 分析原生态JDBC程序中存在的问题3 MyBatis框架设计与核心对象3.1 MyBatis框架图3.2 MyBatis核心对象4 MyBatis的执行过程安装从XML中构建SqlSessionFactory3 不使用XML构建SqlSessionFactory4 从SqlSessionFactory中获取SqlSession5 作用域(Scope)和生命周期6 总结1 什么是MyBatisMyBatis的读音是:[mai’bətɪs],中文音译:麦-波蒂斯,MyBa
2020-08-09 11:15:49
760
原创 11 05Spring之AOP编程
文章目录1 AOP编程简介2 AOP基本操作Spring中两大核心组成:IOC&DI、AOP。AOP最大的用处在于事务处理上。1 AOP编程简介如果你使用MyEclipse开发项目,对于所有的AOP几乎不需要做太多的处理。由开发工具帮助用户完成了。在学习的时候,掌握AOP的编程的核心理念要比实现更为重要。在整个的开发之中,业务层在项目之中要负责以下的操作:(1)调用数据层进行处理;(2)进行事务的处理;(3)关闭数据库的操作连接。如果说现在以一个数据的增加操作为例。那么这样的结构
2020-07-26 18:50:53
378
原创 00 深入了解Java中的继承与多态
文章目录1 多态1.1 多态实现的必要条件1.2 多态学习原文链接:原文面向对象的三大特性:封装、继承、多态。在这三个特性里面,如果没有封装和继承,也就没有多态。那么多态实现的途径和必要条件是什么呢?以及多态中的重写和重载在JVM中的表现是怎么样?在Java中是如何展现继承的特性呢?对于子类继承于父类时,又有什么限制呢?1 多态多态是同一个行为具有多种不同表现形式或形态的能力。举个栗子,一只鸡可以做成白切鸡、鼓油鸡、吊烧鸡、茶油鸡、盐焗鸡、葱油鸡、清蒸鸡、叫花鸡、啤酒鸡、口水鸡、香菇滑鸡、盐水鸡
2020-07-26 13:47:40
333
原创 11 04Spring之表达式语言
文章目录1 表达式入门2 表达式的处理原理3 自定义分隔符4 基本表达式4.1 字面表达式4.2 数学表达式4.3 关系表达式4.4 逻辑表达式4.5 字符串操作4.6 三目运算符4.7 正则运算4.8 括号表达式5 Class类型表达式6 变量操作SpEL(Spring Expression Language,Spring的表达式语言),这种语言类似于JSP中学习到的EL,但是在整个的Spring之中其表达式语言要更加的复杂,而且其支持度更加的广泛,,最为重要的是,它还可以进行方法调用、对象实例化、集合
2020-07-17 19:35:27
356
原创 11 03Spring之资源访问
文章目录1 读取不同资源2 ResourceLoader接口3 注入Resource4 路径通配符如果要想进行磁盘文件的读取操作,首先想到的一定是java.io包中提供的一系列类,还可以继续深入想到:InputStream、OutputStream、Scanner、PrintStream、BufferedReader等核心的处理操作类。但是现在有如下几个问题:(1)这几个类的互相操作难度太高,很多人实际上对于IO的领悟并不是很彻底;(2)IO支持的读取有限且复杂:|————读取jar包里面的文件呢?
2020-07-15 15:07:24
165
原创 12 00jQuery之简介
如果说现在要想实现页面的动态操作,那么自然可以想象到要使用JavaScript+DOM操作技术实现,但是JavaScript+DOM开发的模式,并不适合于所有的开发者,也就是说如果现在是一个非专业的技术人员,例如:网页美工,对于现在的开发要求来讲,一个优秀的美工人员除了要求会使用HTML+DIV+CSS等基本操作之外,必须要能够掌握复杂的DOM操作,于是这些人就废了。并且就算是会使用DOM操作的开发人员也会觉得异常的麻烦。例如,如果要创建一个元素:document.createElement(),随后还需要
2020-07-14 21:20:32
117
原创 11 02Spring之依赖注入
文章目录1 构造方法注入2 利用setter注入3 注入集合数据Spring只有两大核心技术:Ioc和DI(控制反转和依赖注入)、AOP(面向切面编程)。所谓的依赖注入指的就是利用配置文件的关系来决定类之间的引用关系以及数据的设置操作。1 构造方法注入默认情况下如果在applicationContext.xml文件之中配置的程序都可以自动的通过Spring容器加载时自动的进行对象的实例化操作。但是自动进行初始化的时候调用的是类中的无参构造方法,而且我们通过反射机制应该知道,如果类中提供有无参构造方法
2020-07-14 17:25:47
166
原创 11 01Spring之控制反转
控制反转IOC(Inversion Of Control),是一种包装技术类型,它本身不属于新的内容,说的再简单一点:所有对象的实例化的处理操作都不再需要关键字new了(反射机制)。那么为什么现在的代码之中需要编写控制反转的操作呢?为了更好的解释这个问题,下面编写一个实际的程序分析。如果员工出差,那么员工所需要做的核心处理——办理核心的操作业务,出差的目的,但是发现要想实现这个目的现在有了困难,所有的一切都要求由用户自己来负责处理。那么这样的操作形式就好比是最早自己手工编写代码的时候必须明确的处理关键
2020-07-14 10:32:10
93
原创 11 00Spring框架简介
任何的Java的开发框架其产生都只有一个前提目的:为了更方便的MVC开发。对于MVC的技术开发不得不去讨论的几个问题:显示层控制层业务层数据层1、负责数据的页面显示2、联合HTML、CSS、JavaScript1、服务器端验证2、数据的接收与POJO转换3、调用业务层4、进行显示层跳转1、负责数据库的打开和关闭2、调用数据层并且整理数据3、处理事务1、只是负责数据的CRUDJSP+EL+JSTL+AJAX+JavaScript+DOMServletJava原生编码
2020-07-08 16:56:08
139
原创 10 20Hibernate之数据关联(多对多)
文章目录1 基于`*.hbm.xml`文件的配置2 基于Annotation的配置多对多是一种在项目开发之中使用较多的操作情况,例如,在最为常见的管理员的权限处理过程之中,一定会存在有管理员的角色以及对应的的管理员组,而一个管理员角色可以具备多个管理员组,反之一个管理员组也可以同时被多个角色所使用。但是在真正使用之前必须首先明确一个问题:在角色和权限组的操作过程之中,角色应该作为主控方,也就是说所有权限组的维护都应该以角色为主。范例:数据库脚本-- 一、删除数据表-- 1、删除角色-权限组信息表
2020-07-08 15:34:56
178
原创 10 19Hibernate之数据关联(一对多)
文章目录1 基于`*.hbm.xml`文件配置2 基于Annotation的配置一对多是数据库第三设计范式的主要描述点,而在实际的工作之中,一对多的关系使用的一定是最多的,像“类型-子类型”就属于一对多的关系。范例:数据库的创建脚本-- 删除数据表DROP TABLE IF EXISTS subitem;DROP TABLE IF EXISTS item;-- 创建数据表CREATE TABLE item( iid INT AUTO_INCREMENT, ititle VARCHAR(32
2020-07-07 15:32:25
144
原创 10 18Hibernate之数据关联(一对一)
文章目录1 基于`*.hbm.xml`文件实现在数据库的关系模型之中一共有三种数据关系:一对一、一对多、多对多,其中如果做过项目应该知道一对多使用的是最多的,其次是多对多,而一对一的关系相对出现较少。例如,如果说现在有一个用户的注册功能,这个注册功能可能要涉及到10个字段的信息的填写,那么这个时候如果让用户上来就直接填写10个信息,那么可能注册的人就会少了,那么现在的开发往往会出现一个快速注册和一个信息维护,那么这种情况下就可以利用一对一关系来描述。可以定义两张数据表。范例:定义数据库创建脚本--
2020-07-07 10:09:55
235
原创 00 策略模式与if else
文章目录1 策略模式是如何业务逻辑代码结构的?2 杀鸡焉用牛刀?条件分支结构场景需要用到策略模式?1 策略模式是如何业务逻辑代码结构的?首先,对于策略模式,其定义为一个类的行为或其算法可以在运行是更改。通俗来讲,就是运使程序时,给一个类的方法传不同的"key",此方法会执行不同的业务逻辑。由此我们最先想到的就是条件分支结构。那么既然条件分支结构就能够轻松实现,为什么会有策略模式的出现呢?策略模式又优化了什么呢?策略模式的核心思想与条件分支结构如出一辙,根据不同的key找到不同的业务逻辑。但是实际上不仅
2020-07-06 21:56:39
250
原创 10 17Hibernate之继承映射
文章目录1 继承形式一:UNION-CLASS1.1 基于`*.hbm.xml`文件实现1.2 基于Annotation的配置2 继承形式二:JOINED-SUBCLASS2.1 基于`*.hbm.xml`文件配置2.2 基于Annotation的配置实际上从容器映射开始就应进入了多表操作的时代,而继承映射也是多表,但是在继承映射的操作之中,关注的是表的继承于类继承的对应关系,在整个Hibernate里面一共支持有如下几种继承映射关系:(1)UNION-CLASS:每一个继承子表对应一个实体类;(2)
2020-07-06 16:04:37
213
原创 01 10Servlet跳转
文章目录1 客户端跳转2 服务器端跳转现在的开发要求是,可以由Servlet跳转到根目录下保存的show.jsp页面,而show.jsp页面的功能很简单,就是输出属性内容。范例:定义show.jsp页面代码<%@ page language="java" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+reque
2020-07-05 20:32:39
104
原创 01 09Servlet与内置对象
实际上学习完JSP以及编写过代码开发之后会发现真正常用的内置对象:request、session、application、response、config。但是请一定要记住Servlet里面不会包含pageContext内置对象,因为这个对象只能够在JSP里面使用。首先在Servlet中的doGet()与doPost()方法参数上已经提供了HttpServletRequest、HttpServletResponse两个对象,所以现在就已经有了request与response对象。1、config对象如果
2020-07-05 19:59:10
110
原创 10 16Hibernate之容器映射技术
文章目录1 Set容器映射2 List容器映射3 Map容器映射Hibernate的开发之中主要分为两种模式:一种是基于*.hbm.xml文件的、另外一种是基于Annotation的配置,容器映射技术最早的时候出现在Hibernate时期,但是后来由于JPA的标准里面没有定义容器映射技术的相关操作,所以现在的开发之中已经很少再去使用容器映射。Hibernate中主要分为如下三种容器映射:(1)Set容器映射:不能够保存重复数据;(2)List容器映射:可以保存重复数据,但是它为了区分唯一,需要设置一
2020-07-05 19:35:30
117
原创 10 15 Hibernate之复合主键映射
文章目录1 基于HBM文件的配置2 Annotation配置首先在开发之中复合主键是一中强烈不建议使用的技术,在任何一张数据表里面如果要设置主键应该只设置一个字段,但是复合主键毕竟属于标准的SQL语法,所以在Hibernate或者是JPA之中也都有复合主键的定义支持。范例:数据库脚本-- 删除数据表DROP TABLE IF EXISTS member;-- 创建数据表CREATE TABLE member( mid VARCHAR(50), mname VARCHAR(50), mage
2020-07-05 16:26:26
230
原创 10 14Hibernate之实体粒度划分
文章目录1 实体粒度划分的意义2 基于`*.hbm.xml`文件实现细粒度划分3 基于Annotation的配置1 实体粒度划分的意义在整个Hibernate技术应用之中,基本的流程:要提供有一个POJO类,而后要提供有一个POJO.hbm.xml文件,但是如果说现在假设有如下一种情况出现。范例:定义数据库脚本-- 删除数据表DROP TABLE IF EXISTS 'member';-- 创建数据表CREATE TABLE 'member'( mid VARCHAR(50), mname
2020-07-05 15:11:49
163
原创 10 13Hibernate之转换器
文章目录1 转换器的基本概念1 转换器的基本概念在Hibernate之中并没有涉及到过多的复杂数据类型,在整个开发里面见到最多的几种类型:int\Integer、double\Double、String、Date,并且每种操作在进行数据库保存的时候都会自动的填充到PreparedStatement接口的操作里面。但是很多时候这样的操作可能并不能够全部满足于当前需求,假设说现在有如下的一张数据表,在这张数据表里面它希望可以保存多个email地址。(UserTypeProject)范例:创建数据表-
2020-07-05 10:37:52
325
原创 01 08Servlet生命周期
文章目录1 基本生命周期2 扩展生命周期Servlet的生命周期可以控制的只是初始化、服务、销毁。其它的操作都会由容器来负责完成。1 基本生命周期在HttpServlet类里面提供有以下的几个方法来负责生命周期的处理:1、初始化:public void init() throws ServletException|————默认情况下是在Servlet第一次使用的时候初始化;2、服务(主要是处理GET与POST请求):(1)处理GET请求:protected void doGet(HttpSer
2020-07-04 22:51:14
68
原创 10 12Hibernate之锁机制
文章目录1 悲观锁2 乐观锁既然是数据库的开发,那么一定有可能出现这样一种情况,不同的Session读取了同一个数据,并且针对于同一个数据同时发出更新操作。所以为了保证数据可以正常的同步进行操作,就需要使用锁这一概念完成,在Hibernate中提供了两种锁的处理机制:(1)悲观锁(Optimistic):指的是使用数据库中锁的概念来进行数据的锁定;(2)乐观锁(Pessimistic):利用程序的逻辑来实现锁的处理。1 悲观锁如果要想实现悲观锁主要是依靠数据库的支持完成的。悲观锁的操作就是利用了同
2020-07-04 16:51:33
176
原创 10 11Hibernate之缓存机制
文章目录1 认识缓存2 一级缓存3 二级缓存4 缓存交互5 查询缓存Hibernate中的持久态实际上就利用了缓存的处理机制。1 认识缓存所谓的缓存实际上指的就是一种查询性能的有效提升手段。可以避免数据重复查询所带来的性能开销,通过此方式来进行数据的快速存储,但是并不意味着缓存一定能够提升性能,相反,如果处理不当,也可能造成致命伤害。在项目的开发之中有两种比较常见的缓存组件:OSCache、EHCache,其中Hibernate之中主要使用的是EHCache组件,之所以使用此组件主要是考虑到简洁问题
2020-07-04 15:04:50
168
原创 01 07Servlet与表单
下面要结合表单输入来实现一个Servlet,首先还是按照已有的方式建立一个InputServlet,这个Servlet要负责接收一个msg的请求参数。范例:定义InputServlet随后还需要在web.xml文件之中配置此Servlet。随后建立一个input.jsp的页面,这个页面就是编写一个表单,而后进行信息的提交。范例:定义input.jsp以上已经可以成功的处理了表单的get请求与post请求,单并不是说只是处理请求就够了,对所有刚刚接触到Servlet的开发者而言,最大的难
2020-07-03 21:12:20
120
原创 10 10Hibernate之对象状态
Hibernate的开发理论来源就是EJB 2.x Entity Bean(实体Bean),在实体Bean里面有一个特点,每当调用了对象中的setter()方法,那么就可以自动的进行数据更新。所以Hibernate本身也具备此类操作,那么在Hibernate之中为了更好的理解POJO类的对象所处的状态,专门提供有三种状态:(1)瞬时态(Transient):对象保存在内存之中,并没有在数据库之中进行存储,也就是说如果对象一直没有存储,那么就有可能被GC回收,回收之后就像不存在一样;(2)持久态(Pers
2020-07-03 19:58:25
111
原创 10 09Hibernate之SchemaExport工具
在大部分的开发环境下,实际上数据库的设计一定是在需求确认之后进行的,并且有了数据库之后才可以进行项目的开发,可是在Hibernate的设计之中考虑到了这样一种情况:有些人认为直接写数据库的脚本太麻烦了,所以打算直接编写程序,而当程序编写完成之后在通过程序导出数据库脚本。或者在需求变更之后,程序代码发生了变化,但是数据库没有及时发生改变,为了让程序与数据库进行有效的同步更新,那么可以将当前程序中的数据库结构导出,而后生成数据库脚本。org.hibernate.tool.hbm2ddl.SchemaExpo
2020-07-03 19:14:47
416
原创 10 08Hibernate之利用Annotation开发
在Hibernate的设计初期,考虑到配置文件与程序相分离的特点,所以来讲定义出了一系列的*.hbm.xml文件,目的是让简单Java类与数据表的字段进行一个有效的验证,可是却产生了一个严重的问题——在任何一个中大型项目之中,数据表至少会存在有几百个,那么如果所有的简单Java类都要定义一个与之完全对应的*.hbm.xml文件,那么这回项目就乱了。整个项目完成之后就同时存在有几百个配置文件,如果要修改,要从几百个配置文件之中选择所需要的内容,并且很多时候还会存在有关联问题。随后在Java行业内考虑到了数据
2020-07-03 17:02:23
106
原创 10 07Hibernate之数据查询
文章目录1 Session查询2 Query查询2.1 数据查询2.2 使用SQL查询(不建议使用)2.3 查询占位符2.4 在配置文件中编写HQL(不推荐)2.5 更新操作1 Session查询Session接口里面本身所定义的数据查询只有一个根据ID查询的操作方法,但是这个方法却有两个定义:(1)根据主键查询:public <T> T get(Class<T> entityType, Serializable id)(2)根据主键查询:public <T> T
2020-07-03 16:23:56
170
原创 10 06Hibernate之实现CRUD
文章目录1 数据增加2 数据查询操作Session接口是负责所有数据基础更新操作与基础查询操作的主要接口,而SharedSessionContract接口主要负责事务或者是数据查询操作的,那么本次的重点只在于Session子接口上。1 数据增加在Hibernate里面针对于数据增加操作提供了两个方法:(1)数据保存:public Serializable save(Object object)|————返回的是这个保存的数据ID;(2)数据更新或保存:public void saveOrUpd
2020-07-03 09:00:00
191
原创 10 05Hibernate之联合Struts 2.x开发
文章目录1 开发业务层2 开发控制层及显示层Hibernate是属于数据层的工具类,所以在所有的开发之中,Hibernate只能够在数据层上编写代码。1 开发业务层1、建立一个SHProject;2、数据库脚本如下:-- 删除数据库DROP DATABASE IF EXISTS hedb;-- 创建数据库CREATE DATABASE hedb;-- 使用数据库USE hedb;-- 删除数据表DROP TABLE IF EXISTS `member`;-- 创建数据表CREAT
2020-07-02 15:29:49
98
原创 10 04Hibernate之HibernateSessionFactory
文章目录1 ThreadLocal类的作用在使用MyEclipse创建Hibernate之后都会自动生成一个HibernateSessionFactory,这个类的主要功能是进行数据库连接对象(Session)的取得与关闭。在以后的开发之中,很少会在代码里面去关注:Configuration、SessionFactory等操作。包括如何连接如何创建工厂都会被实际的其它操作所取代。用户最关注的就是如何进行数据的CRUD操作。1 ThreadLocal类的作用但是在这个HibernateSessionF
2020-07-02 10:40:07
363
原创 10 03Hibernate之实现原理
文章目录1 解析Member.hbm.xml文件2 创建SQL语句Hibernate之所以可以实现简单Java类与数据表的映射,都取决于*.hbm.xml文件的功能,而且动态生成的SQL语句发现使用的依然是PreparedStatement进行处理,所以可以得出来,整个的Hibernate就属于一个反射与JDBC的结合体,所有使用的SQL语句实际上都应该是自动生成的。由于hibernate.cfg.xml文件主要是数据库文件以及映射文件的配置,那么这些基本的操作将不再进行重复的解析,假设已经明确的知道了
2020-07-01 15:47:39
122
原创 10 02Hibernate之配置文件与核心类库详解
文章目录1 配置文件说明2 Hibernate操作类在整个Hibernate编写的过程之中会生成一些文件并且也使用到了一些新的处理类。1 配置文件说明在整个Hibernate里面最为核心的两种配置文件:(1)Hibernate总配置文件:hibernate.cfg.xml;(2)每一张实体表的配置文件:POJO类名称.hbm.xml(Member.hbm.xml)。1、Hibernate映射文件(*.hbm.xml)Hibernate是一个ORMapping映射框架,那么所谓的ORMappin
2020-06-30 15:30:56
206
原创 10 01Hibernate之配置并开发第一个Hibernate程序
文章目录1 配置MyEclipse开发环境1 配置MyEclipse开发环境MyEclipse在进行框架开发的操作上还是非常好用的,所以在MyEclipse里面如果要想进行Hibernate程序的编写,那么必须要配置数据库的相关内容。1、打开数据库的连接窗口试图;打开这个窗口的目的是为了可以在MyEclipse里面配置MySQL数据库的连接。2、随后在数据库浏览器窗口里面点鼠标右键,进行新的连接创建。3、在出现的对话框之中选择要使用的数据库,本次使用的是MySQL数据库。(1)同时在本处操
2020-06-30 11:01:45
96
原创 10 00Hibernate之Hibernate简介
文章目录1 传统开发的弊病2 解决数据层的问题Hibernate中文翻译为“冬眠”,在开发上Hibernate的主要功能是进行数据层的操作实现。疑问?数据层的开发不应该使用JDBC吗?那么为什么又会产生一个Hibernate呢?1 传统开发的弊病在任何一个项目的开发之中,一定需要存在有四个层:(1)显示层:|————动态语言:JSP,如果要想合理的实现需要编写一堆的Scriptlet代码,而后利用了EL+JSTL解决了;|————静态语言:HTML、JavaScript:可以完成所有的开发,但是
2020-06-29 17:30:35
139
原创 08 11Struts 2.x使用Annotation配置Struts 2.x
文章目录1 Annotation的基本使用在2005年之前,所有的开发框架集合都有一个特点,除了框架本身的代码需要编写之外,还需要编写大量的XML文件,并且利用这些文件决定项目的执行,想法很好,但是在实际的使用中会发现并不这么好,一旦项目开发很大,那么对于整个项目的控制文件就非常难以维护了。从2005年之后(正是在这一年Apache收购了WebWork),所以现在跨度比较大的框架都开始进行一些结构的修改,Struts 2.x就支持了Annotation(Struts 1.x依然不支持)。如果要想在Str
2020-06-29 15:19:41
103
原创 08 10 Struts 2.x结合JFreechart绘图
文章目录1 使用JFreeChart绘制一个图形2 在Struts 2.x中应用JFreeChart组件在很多的系统之中,数据的统计结果报表时经常会出现的功能,但是在现在的开发之中,大部分都会基于HTML5的Canvas绘图功能完成,如果是直接绘图,那么基本上都很麻烦,所以可以使用大量的第三方开发包,在很早以前就存在有一个Java可用的统计图的工具——JFreeChart,是一个免费的绘图工具。1 使用JFreeChart绘制一个图形下面就使用此组件绘制一个最简单的图形显示。范例:基本绘图pack
2020-06-29 14:43:22
134
原创 08 09 Struts 2.x转换器
文章目录1 数组转换器2 接收对象数组3 自定义转换器4 转换器实际应用5 StrutsTypeConverter转换器在使用Struts 2.x接收参数的时候可以发现,如果传递的是数字,那么可以自动的将参数的字符串内容变为数字,那么包括文件上传的时候,能接收的数据类型为File,那么这些实际上都是由转换器帮助我们用户自动完成的转换。例如,如果想要实现字符串到Locale的转换器,那么默认没有实现,必须自己手工完成。例如,在进行数据删除的时候往往都要传递的是id|id|id...,那么也可以利用转换器
2020-06-29 11:12:22
111
原创 08 08Struts 2.x文件上传
文章目录1 基础上传如果你的代码使用的是标准MVC开发的,那么强烈建议使用SmartUpload完成,但是如果你的项目代码使用的是框架开发,例如:Struts 1.x、Struts 2.x、Spring MVC,那么就只能够使用FileUpload,因为这些框架针对于FileUpload的处理是比较方便的。1 基础上传如果现在使用的是Struts 1.x,那么要接收上传文件的时候使用的是一个FormFile类,但是这个类虽然包装了许多的内容,不过从实际来讲,有些多余,所以在Struts 2.x中的上传
2020-06-28 11:15:34
154
原创 08 07Struts 2.x指令牌验证(Token)
在现实的开发之中会出现这样一种情况,当用户填写了一个表单,并且将此表单提交之后,用户直接选择后退操作,回到了原本的表单上。那么为了解决这样的问题,最早的时候是使用Session进行处理。、但是到了Struts 2.x的时候实际上针对于Token的验证操作就变得更加容易了,因为有拦截器的应用,以及标签的支持,任何的Struts 2.x开发都必须满足一个条件,由Action找到JSP。范例:定义一个PrepareAction,目的是让其简单的跳转到JSP页面package org.lks.action;
2020-06-27 17:13:30
264
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人