- 博客(1074)
- 资源 (25)
- 收藏
- 关注
原创 Java for Web学习笔记(一二三):搜索(5)MySQL全文索引(下)
小例子我们在表格Ticket和TicketComment中加入了fulltext key。小例子在Ticket的Subject或Body,以及在TicketComment的Body检索内容,按分页方式显示出来,同时显示关联分数,并按关联分数降序排列。 -- Ticket中队Subject和Body这两列进行全文检索 FULLTEXT KEY `Ticket_Search` (`Subject`,...
2018-05-24 17:22:37 924
原创 Java for Web学习笔记(一二二):搜索(4)MySQL全文索引(上)
全文索引全文索引存储在索引数据中的词频和所在记录,频率越高,权重越低,用过一定的算个给出相关性评分(relevance score)。MySQL的MyISAM和InnoDB支持全文检索,但要注意: InnoDB在版本5.6.4才开始提供全文索引 虽然语法一样,但MyISAM和InnoDB在实现和算法是不同的,它们之间的相关性评分是不具备可比性,即不要用一个InnoDB表的相关度值和一个MyIASM...
2018-05-24 16:28:33 825
原创 Java for Web学习笔记(一二一):搜索(3)JPA的动态条件搜索(下)
例子的具体实现仓库的实现使用spring data,增加自定义接口SearchableRepository,具体如下:public interface PersonRepository extends CrudRepository<Person, Long>, SearchableRepository<Person>{}public class PersonReposit...
2018-04-15 20:53:27 797
原创 Java for Web学习笔记(一二零):搜索(2)JPA的动态条件搜索(中)
通用的检索定义可以获得Predicate[]的SearchCriteriaSearchCriteria: 单个条件Criterion的集合SearchCriteria是单个条件Criterion的集合List<Criterion>/*代码很简单,也很有趣。由于List<T>是一个接口,必须有具体的实现,例子采用了ArrayList<T>,但我们希望只开放List...
2018-04-15 20:50:09 1010
原创 Java for Web学习笔记(一一九):搜索(1)JPA的动态条件搜索(上)
关于搜索数据库中的index需要平衡考虑: 索引会使查询更快 索引会使持续化更慢这需要我们具体个例具体衡量。 一般来讲95%的请求都应还有index,多个条件的请求,必须有一个带有index。 LIKE的比对中不应将通配符方在前面,这会引发全局扫描,如果非要这样,应必须带有其他index的条件。 OR的效率没有AND的高 待用index的条件应该放置在前面 唯一约束提供检索效率,UNIQUE KE...
2018-04-14 22:02:46 528
原创 Java for Web学习笔记(一一八):【篇外】Soap client
使用Eclipse自动生成Soap Client的代码在项目按右键,选择New -> Other ->Web Services -> Web Service Client,进入向导。加入自有代码,例如加入Envelope Header在xxxxStub.java文件相应的方法中加入:public com.example.api.ApiStatus.EchoResponse ech...
2018-04-11 21:33:30 4551 1
原创 Java for Web学习笔记(一一七):Spring Data(5)分页例子(下)
jsp代码下面是代码的片段,导读如下: 显示页序号:comments.totalPages是总页数,链接格式为/ticket/view/${ticket.id}?paging.page=xxx&paging.size=xxxx,paging.page和paging.size或转换为controller方法中的Pageable参数,如果没有采用缺省的 显示该页内容,存放在comments.c...
2018-03-11 12:45:14 492
原创 Java for Web学习笔记(一一六):Spring Data(4)分页例子(上)
例子说明在例子中,我们将学习如何分页显示用户的评论。加入spring data引入jar包加入spring data在pom中引入<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId>...
2018-03-11 12:42:36 842
原创 Java for Web学习笔记(一一五):Spring Data(3)配置
使用XML来配置之前为了让代码跑起来,我们已经通过Java代码对Spring Data进行了配置。再此,我们将进一步学习,包括XML方式。XML配置涉及两个namespace: Spring Data Commons,http://www.springframework.org/schema/data/repository,下面案例中前缀采用data Spring Data JPA(对Common...
2018-03-11 12:28:51 942
原创 Java for Web学习笔记(一一四):Spring Data(2)仓库接口
查询方法CrudRepository中只定义了通过主键查询的方式,这显然不能满足需求。Spring提供了查询方法来解决这样问题。查询方法包括: find...By get...By read...By将返回单个结果T,或者多个结果Iterable<T>, List<T>, Collection<T>,Page<T>。下面是例子:public inte...
2018-03-11 12:15:56 613
原创 Java for Web学习笔记(一一三):Spring Data(1)何为Spring Data
CRUD并不足够在之前学习中,使用了通用仓库接口GenericRepository,并通过GenericBaseRepository,GenericJpaRepository来具体实现,实现上对于CRUD而言,这类的实现大同小异,此外,我们还需要根据UNIQUE KEY或者KEY去进行查询,而不仅仅使用primary key,还有根据多个条件去进行查询或者检索,对返回的结果进行分页等等。Gener...
2018-03-11 12:09:34 427
原创 Java for Web学习笔记(一一二):再谈Entity映射(5)原生SQL和isolation
缘由我们在动态表格中使用了原生SQL,而在之前,我们讨论了非原生(Entity可以和表格明确对应),在两个事务同时写操作某个数据时,在isolation = Isolation.REPEATABLE_READ时,出现脏读情况是会报告org.springframework.dao.DataIntegrityViolationException的异常。但是原生的情况会有不同。小例子在事务中依次处理: ...
2018-03-02 12:08:43 905
原创 Java for Web学习笔记(一一一):再谈Entity映射(4)动态表格创建
如果这个不确定表格也需要我们的war来创建,如何实现。create table的原生SQL,entityManager是无法执行的,因为这不是可以回滚的事务。这种情况,我们需要: 捕获表格不存在的异常 从原始的Connection中实现表格创建。获取Connection能否从EntityManage中获取Connection依赖于JPA的具体实现,Eclipse的是支持,但是Hibernate不支...
2018-02-24 08:59:17 998
原创 Java for Web学习笔记(一一零):再谈Entity映射(3)动态表格
在某些场景中,需要使用动态表格,例如表格名字为abc_f(x),其中f(x)为变化后缀,可能是基于时间,也可能是基于用户名,基于ip地址或者别的什么计算出来的。小例子准备表为Event_<年>,data里面存放一个json的复杂结构List<String>,而这种复杂结构将对代码产生影响,后面详细讨论。CREATE TABLE `Event_2018` ( `id` b...
2018-02-24 08:49:46 789
原创 Java for Web学习笔记(一零九):再谈Entity映射(2)Entity的继承
我们先讨论一种简单的情况,多个已知的table具有相同的schema,能否映射到同一个Entity中。然后在下一学习讨论一种复杂的情况,我们在运行中可能会动态建立表格,这些表格具有相同的schema,如果使用JPA?假设test_a,test_b和test_c表格具有相同的表格结构,即schema相同,我们不能将其映射到同一个entity中,因为每个entity类都和一个table具体映射。如果我...
2018-02-24 08:39:27 1006
原创 Java for Web学习笔记(一零八):再谈Entity映射(1)数据转换
timestamp或datetime的匹配存放毫秒在数据库中缺省的精度为秒,如果需要存放毫秒甚至更好,可以如下:CREATE TABLE Ticket ( TicketId BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, UserId BIGINT UNSIGNED NOT NULL, Subject VARCHAR(255) ...
2018-01-29 20:09:58 800
原创 Java for Web学习笔记(一零七):Spring框架中使用JPA(7)密码和BCrypt
密码安全存放密码安全有两个方面:用户密码传递的安全性,可以使用https来保护,也有将密码进行哈希(例如MD5)后进行传递的(复杂一点的,密码是参与哈希,还包含一些动态参数,例如时间戳等进行salt),或者两者结合起来数据库密码存储的安全性,一旦被拖库,或者别的被黑,仍能安全保护好用户的密码。目前,一般可采用BCrypt加密方式,我们绝不能将密码的明文,或者经过弱哈希(如MD5和S
2018-01-29 20:05:09 1618
原创 Java for Web学习笔记(一零六):Spring框架中使用JPA(6)Isolation和C3P0(下)
使用hibernate-c3p0的isolation设置我们前面学习的方式,都是先设置datasource,然后在JPA实现中关联该数据源。hibernate提供了hibernate-c3p0,在提供entityManagerFactoryBean的时候进行数据源的设置,实际上采用xml文件配置[1],很多都是这种方式,只不过我们采用代码方式实现。pom.xml的设置,将将hibernat
2018-01-28 17:14:22 1482 1
原创 Java for Web学习笔记(一零五):Spring框架中使用JPA(5)Isolation和C3P0(上)
何为事务的isolationisolation对于数据的一致性很重要。网上有很多介绍,推荐阅读:MYSQL官网 14.5.2.1 Transaction Isolation LevelsHibernate Tutorial 20.7.2 Transaction Isolation Levels一般而言,如果使用READ_UNCOMMITTED,这适合于只读的表格,大家读取同
2018-01-28 17:06:34 729 1
原创 Java for Web学习笔记(一零四):Spring框架中使用JPA(4)Service中使用事务
Spring和JTA的@Transactional标记总体而言,Spring的@Transactional比JTA的@Transactional要强大和更灵活。@javax.transaction.Transactional,可以配置参数:dontRollbackOn:不触发回滚的异常黑名单roolbackOn:异常白名单将覆盖缺省的rollback规则value:什么时候和如何创
2017-12-30 16:45:21 1966
原创 Java for Web学习笔记(一零三):Spring框架中使用JPA(3)JPA仓库
小例子我们使用之前JPA小例子的数据库,有三个表Authors,Books和Publishers。先对表Author进行数据读写,读写无非就是增删改查,也就是CRUD。之前,我们已经如何进行Entity和数据库表格的对应,在此略过。创建仓库接口public interface AuthorRepository { IterableAuthor> getAll(); Author
2017-12-30 16:41:32 1123
原创 Java for Web学习笔记(一零二):Spring框架中使用JPA(2)Transaction(下)
上下文的配置/* 【3】设置事务管理 * 3.1】允许@Transactional标记有效 * 使得@Transactional有效,可以被动态截获bean中被标识的方法,对其进行Spring framework method Advice,类似@EnableAsync,需要设置@EnableTransactionManagement。但需要注意:对于方法增强,我们应使用同一方式,如果配置
2017-12-30 16:23:12 1427
原创 Java for Web学习笔记(一零一):Spring框架中使用JPA(1)Transaction(上)
在spring中使用事务涉及的Bean本学习将介绍一些在Spring中使用事务设计的Bean,有一个大致的概念认识,以便了解后面的代码。如果觉得枯燥,也可以在后面的学习中回过头来看。在之前的学习中,我们在每个方法中都要创建EntityManager,进行事务的开启、关闭、回滚,代码有些相当累赘。Spring的强项在于用标记来解决,标记为@org.springframework.tran
2017-12-30 16:18:48 1125
原创 Java for Web学习笔记(一百):持久化初探(5)Enum、时间和lob的类型匹配
ENUM缺省的,ENUM对应为0,1,2,3,但这种方式可读性较差,且如果代码的顺序发生变化,将出现严重错误。更好地采用字符串方式,在数据库中可以是VARCHAR,也可以用ENUM。我们对小例子的Author表进行改造CREATE TABLE `Authors` ( `AuthorId` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
2017-11-25 17:42:58 971
原创 Java for Web学习笔记(九九):持久化初探(4)JPA小例子(下)
Entity的映射虽然在前面,我们给出了表格。但书推荐我们先设计代码,然后根据代码来设计数据库,用户需求-》代码设计-》数据库设计。但我觉得大项目可能不会这样。类和数据的映射//表明这是 @javax.persistence.Entity,缺省Entity的名字是类名,如果需要特指,可通过用name参数。@Entity(name = "PublisherEntity")/*可以
2017-11-25 17:36:09 988
原创 Java for Web学习笔记(九八):持久化初探(3)JPA小例子(上)
在tomcat中配置我们采用数据源在tomcat中配置的方式:数据库的配置在war之外。在很多网上资料中,这是设置在web app里面的xml中,这存在一个问题,如果配置封装在war中,当我们部署环境出现变化,最简单地,ip地址变更,账号密码变更,就需要重新封装war,当然,我们可以手动更改tomcat解析后的war包里面的配置,但对于升级和版本回退存在问题。最好的方式是保持w
2017-11-25 17:08:22 1286
原创 Java for Web学习笔记(九七):持久化初探(2)ORM、JPA和Hibernate
对象关系映射:Object-Relational Mapper(O/RM)我们希望直接在关系型数据库中读写对象,而无需在代码中操作SQL,这需要Object-Relational Mapper。我们可能有几十个表格,每个表格都有很多列,这样整个增删改查的代码就很繁琐,使用O/RM,我们的代码可以得到很大的简化。仍如使用上一学习中的学生例子:public Product getStude
2017-11-25 11:05:29 989
原创 Java for Web学习笔记(九六):持久化初探(1)数据存储
数据的存储介质flat-file entity storage不同的entity可能存放在不同的目录,每个entity就是目录下的一个文件,名字是代理键( surrogate key),也就是索引,方便定位。文件格式多样,可能是直接Java对象序列化,可能是XML,JSON。读写entity,需要打开文件和关闭文件,因此效率低下,且不支持代理键之外的索引。一般用于存储少量且基本的数据,
2017-11-25 10:46:03 741
原创 Java for Web学习笔记(九五):消息和集群(10)利用RabbitMQ实现订阅和发布
目的之前,我们学习了利用websocket进行订阅和发布的方式,连接数是N(N-1)/2,随着节点的增加,连接数迅速增加,只适合于小的集群。我们利用RabbitMQ重写一下事件广播。我们只需重写ClusterEventMulticaster,改为AMQPEventMulticaster。作为小例子演示,我们简单地选择fanout方式,由节点对收到的消息进行过滤。AMQPEventMulti
2017-11-12 16:31:21 1294
原创 Java for Web学习笔记(九四):消息和集群(9)RabbitMQ和消息模式(下)
例子:RPC的实现这是一个通过AMQP使用RPC的例子,RPC是个同步的处理,需要等待响应。在实际应用需要特别消息,server可能性能很慢,server可能关闭。我们是否一定要使用RPC,是否可以用异步的方式替代。在此,我们只是演示如何利用RabbitMQ提供的消息管理来实现一个RPC。思路如下:RPC Server从一个队列rpc_queue中接收消息,RPC client将请
2017-11-12 16:24:27 1145
原创 Java for Web学习笔记(九三):消息和集群(8)RabbitMQ和消息模式(中)
Work Queues:竞争消费模式(competing consumers pattern)简单模式,也可以用于多个client(subsriber)去获取消息,和简单模式对比:我们希望数据能够真正被client处理完,client处理好后应发送Basic.ACK消息给server,如果client因为某个原因未能处理好,当channel关闭,connection关闭或中断的时候
2017-11-12 16:10:38 953
原创 Java for Web学习笔记(九二):消息和集群(7)RabbitMQ和消息模式(上)
学习目的RabbitMQ是AMQP的一个实现。我们将跟随rabbitMQ官网上的例子,了解AMQP所支持的不同消息队列模式,以及代码如何实现。安装RabbitMQ ServerUbuntu自带的RabbitMQ Server,安装如下sudo apt-get install rabbitmq-serversudo service rabbitmq-server sta
2017-11-12 15:53:50 953
原创 Java for Web学习笔记(九一):消息和集群(6)利用websocket实现订阅和发布(下)
ClusterEventMulticaster:自定义的ApplicationEventMulticaster设置为root上下文的bean在root上下文的配置文件中:@Beanpublic ApplicationEventMulticaster applicationEventMulticaster(){ SimpleApplicationEventMultica
2017-11-11 20:26:45 2814
原创 Java for Web学习笔记(九十):消息和集群(5)利用websocket实现订阅和发布(上)
集群中的订阅和发布利用spring framework在本app内的订阅和发布十分简单。当我们系统越来越复杂的时候,我们需要向其他app发布消息。本学习将给出一个通过websocket来实现不同app之间消息的订购和发布。在小例子中,我们在所有节点之间都建立webSocket连接来实现消息的发布和订阅。这种方式,节点既是publisher,又是subcriber,还是broker。我们
2017-11-11 19:35:15 7730
原创 Java for Web学习笔记(八九):消息和集群(4)定制发布和订购
SimpleApplicationEventMulticaster本学习一方面进一步了解Spring对publish/subcribe的支持,另一方面也是为了后面如何利用webSocket在集群中传递事件的小例子作准备。spring将发布的消息称为event,通过消息广播器发布消息并发送到响应的订阅中。消息广播器可以理解为app内部的broker。Spring提供了SimpleApplicat
2017-11-11 10:50:38 890
原创 Java for Web学习笔记(八八):消息和集群(3)序列化Serializable
对象序列化在集群中,涉及到数据在不同的app,不同的JVM,不同的机器之间的。Java通过对象的序列化实现对象在不同app之间传递。在进一步探讨集群之前,我们需要对序列化进行了解。推荐阅读Java对象表示方式1:序列化、反序列化的作用对于要求序列化的对象,static和transient是不进行序列化的。我们看看下面简单的小例子,如何通过自定义的序列化和反序列化来实现transie
2017-11-10 22:00:52 1005 1
原创 Java for Web学习笔记(八七):消息和集群(2)应用内的publish和subscribe
学习内容Spring框架很强大,已经自带app内部的消息发布订阅了。我们甚至不需要在配置文件(代码)中加入任何内容。 我们将学习如何在一个spring应用内进行消息的发布和订阅定义事件事件需继承Spring的ApplicationEvent。在发布事件后,broker(spring framework)将发送给订阅的用户。如果订阅了这类事件,相关的子类事件也会监听到。下面是一个例子:T
2017-11-10 21:47:31 1550
原创 Java for Web学习笔记(八六):消息和集群(1)一般性了解
应用消息:紧耦合和松耦合应用消息常用的是RPC和发布/订阅,其实就是分布代表了同步和异步。随着大系统的发展,微服务架构的兴起,松耦合的发布订阅模式越来越流行。以员工系统为例,涉及财务报税服务,报销服务,工资单服务,福利服务等等,新的服务可能不断出现。如果采用紧耦合的RPC,则员工系统必须对服务了解,并主动调用这些服务,每新增一个服务,员工系统都要进行update。随着新服务的增加,员工系统
2017-11-10 21:27:36 1106
原创 Java for Web学习笔记(八五):SOAP(2)小例子
加入soap上下文soap上下文配置和spring framework不同,spring web service不支持代码配置,小例子中,我们采用了混合配制的方式,通过SoapServletContextConfiguration扫描@org.springframework.ws.server.endpoint.annotation.Endpoint标记,同时导入ws的soapServle
2017-10-03 09:39:03 1883
原创 Java for Web学习笔记(八四):SOAP(1)小例子准备
SOAP现在碰到不多,一般是较为旧的系统。SOAP可以封装在不同的消息,在一个web app中,使用最为方便的自然是封装在HTTP的消息中。我们将在小例子中增加第三个上下文,用于实现soap api。SchemaSOAP是contract-first的开发,我们先定义其schema。soap的body是xml,通过wsdl语言来定义,这是soap的关键核心。文件为*.xsd。在Eclips
2017-10-03 09:34:35 1372
Pro Android学习:联系人API
2015-06-15
Pro Android学习:传感器
2015-02-06
[zip文件] Pro Android学习:拖拽小例子
2014-12-12
Pro Android学习:touch screen小例子
2014-11-18
Pro Android学习:list widget小例子
2014-10-23
Pro Android学习:widget小例子
2014-10-15
Pro Android学习:media frameworks小例子
2014-09-30
[zip文件] Pro Android学习:telephony小例子
2014-09-16
Pro Android学习:location小例子
2014-08-27
Pro Android学习:2D动画小例子
2014-08-14
Pro Android学习:Alarm manager小例子
2014-07-18
Pro Android学习:Broadcast小例子
2014-07-01
Pro Android学习:AsyncTask小例子
2014-05-16
Pro Android学习:了解Handler小例子
2014-05-08
Pro Android学习:了解package的小例子
2014-04-18
Pro Android学习:Android service小例子
2014-03-27
NTLM PPROXY client的实现(C source code)
2009-03-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人