新时代码农
未读上一节中对 Mybatis 的基本操作有了初步的了解,这一节中将使用 Mybatis 对数据表进行简单的 CRUD 操作.使用的测试环境和上一篇博客一样. 使用 Mybatis 对表执行 CRUD 操作 – 基于 XML 实现1.定义 UserMapper.java 12345678910111213141516171819package com.code.mapper;import com.code.bean.UserBean;import org.apache.ibatis.annotations.Param;import java.util.List;public interface UserMapper { //根据ID查找用户 UserBean getUserById(@Param("userID")int userID); //添加用户 int addUser(@Param("userBean")UserBean userBean); //删除用户 int deleteUser(@ ...
MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为 MyBatis 。2013 年 11 月迁移到 Github。 iBATIS 一词来源于“internet”和“abatis”的组合,是一个基于 Java 的持久层框架。iBATIS 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO) MyBatis 是一个支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 Mybatis 快速入门准备开发环境 创建测试项目,普通的 Java 项目或者 JavaWeb 项目均可 添加相应的 jar 包 Mybatis 核心包 ...
Hibernate 框架主要是实现数据库与实体类间的映射,使的操作实体类相当与操作 hibernate 框架。 只要实体类写好配置文件配好,就能实现和数据库的映射,其中实体类对应表,类的属性对应数据库的表字段。 这样就不用管数据库的相关操作了。 什么是 Hibernate如今,大多数是关系型数据库,而 Java 是面向对象的编程语言,使用面向对象的语言结合关系型数据库相当麻烦,所以有了 HibernateHibernate 将对象模型和基于 sql 的关系模型映射起来,使得开发者可以采用面向对象的方式开发程序.Hibernate 是关系型数据库和面向对象的程序设计语言之间的桥梁,它允许开发者使用面向对象的语言操作关系型数据库以前是应用程序直接访问底层数据库,而采用 ORM 框架之后,应用程序以面向对象的方式操作持久化对象,而 ORM 框架则将这些面向对象的操作转换为底层的 SQL 操作. Hibernate 和 JDBC jdbc 的优点和缺点 缺点 查询代码特别繁琐 重复性代码特别多,频繁的 try,catch 数据的缓存 sql 的移植性不好 优点 速度比较快 把控性 ...
ver) 多个 Spring 配置文件处理 采用逗号将多个配置文件分开 使用通配符 开启注解:<mvc:annotation-driven>开启自动扫描<context:component-scan base-package="包" 使用 Annotation 不用使用继承父类或者实现接口 RequestMapping value params –>对请求参数进行过滤 method –>代表请求方式 通过提交方式进行过滤请求 请求处理方法可以接受参数HttpServletRequestHttpServletResponesHttpServletSession @RequsetParam 注解 restfulrepresentational state transfer表现层状态转移 请求处理方法可以返回的值 数据绑定 基本数据类型,String String[]绑定 只需要让 jsp 中的 name 值和 controller 中的属性名相同即可 绑定到一个 Bean 当中去 只要保证 Bean 中属性的名字和表单数据 ...
EJB 缺点EJB 糟糕的代码和代码框架分布式模型滥用单元测试难以实现不要的复杂度导致性能降低容器的可移植性 重量级容器缺点带有侵入性的 API(代码依赖于 EJB)对容器的依赖 (代码不能再 EJB 容器之外工作)提供固定的一组机能,不具备配置能力不同的产品,部署过程不同,不易通用启动时间长 轻量级容器:3. Spring 容器负责 POJO 的生成和绑定关系 IoC 和 AOP容器的功效由 IoC 完成根据 Web 应用,小应用,桌面程序的不同,对容器的依赖程度不同Spring 将管理的 Bean 作为 POJO 进行控制,通过 AOP Interceptor 能够增强其他功能 Spring 框架图 Spring AOP Spring ORM Spring DAO Spring Web Spring Context Spring Web MVC Spring Core IoC<–>DI 控制反转<–>依赖注入整个应用程序的表现结果是由外部容器的 配置 来控制整个应用程序的运行效果在系统运行时,由容器 (操作系统) 将依赖关系 (USB 外 ...
使用场景:发布、订阅模式,发送端发送广播消息,多个接收端接收。 前面我们实现了工作队列,并且我们的工作队列中的一个任务只会发给一个工作者,除非某个工作者未完成任务意外被杀死,会转发给另外的工作者。这篇博客中,我们会做一些改变,就是把一个消息发给多个消费者,这种模式称之为发布/订阅(类似观察者模式)。 为了验证这种模式,我们准备构建一个简单的日志系统。这个系统包含两类程序,一类程序发动日志,另一类程序接收和处理日志。 在我们的日志系统中,每一个运行的接收者程序都会收到日志。然后我们实现,一个接收者将接收到的数据写到硬盘上,与此同时,另一个接收者把接收到的消息展现在屏幕上。 本质上来说,就是发布的日志消息会转发给所有的接收者。 转发器(Exchanges)前面的博客中我们主要的介绍都是发送者发送消息给队列,接收者从队列接收消息。下面我们会引入Exchanges,展示 RabbitMQ 的完整的消息模型。RabbitMQ 消息模型的核心理念是生产者永远不会直接发送任何消息给队列,一般的情况生产者甚至不知道消息应该发送到哪些队列。相反的,生产者 ...
工作队列的主要任务是:避免立刻执行资源密集型任务,然后必须等待其完成。相反地,我们进行任务调度:我们把任务封装为消息发送给队列。工作进行在后台运行并不断的从队列中取出任务然后执行。当你运行了多个工作进程时,任务队列中的任务将会被工作进程共享执行。这样的概念在 web 应用中极其有用,当在很短的 HTTP 请求间需要执行复杂的任务 生产者: 1234567891011121314151617181920212223242526272829public class NewTask { //队列名称 private final static String QUEUE_NAME = "workqueue"; public static void main(String[] args) throws IOException { //创建连接和频道 ConnectionFactory factory = new ConnectionFactory(); factory.setHos ...
RabbitMQ 是一个由 erlang 开发的 AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR 的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。 RabbitMQ 是由 RabbitMQ Technologies Ltd 开发并且提供商业支持的。该公司在 2010 年 4 月被 SpringSource(VMWare 的一个部门)收购。在 2013 年 5 月被并入 Pivotal。其实 VMWare,Pivotal 和 EMC 本质上是一家的。不同的是 VMWare 是独立上市子公司,而 Pivotal 是整合了 EMC 的某些资源,现在并没有上市。 RabbitMQ 的官网是http://www.rabbitmq.com ...
新时代码农
未读1. 轮询法将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。 2.随机法通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。 3. 源地址哈希法源地址哈希的思想是根据获取客户端的 IP 地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一 IP 地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。 4. 加权轮询法不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。 5. 加权随机法与加权轮询法一样,加权随机法也根据后端 ...
AI:人工智能
未读Curator 是 Netflix 公司开源的一套 zookeeper 客户端框架,解决了很多 Zookeeper 客户端非常底层的细节开发工作,包括连接重连、反复注册 Watcher 和 NodeExistsException 异常等等。Patrixck Hunt(Zookeeper)以一句“Guava is to Java that Curator to Zookeeper”给 Curator 予高度评价。引子和趣闻:Zookeeper 名字的由来是比较有趣的,下面的片段摘抄自《从 PAXOS 到 ZOOKEEPER 分布式一致性原理与实践》一书:Zookeeper 最早起源于雅虎的研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型的系统需要依赖一个类似的系统进行分布式协调,但是这些系统往往存在分布式单点问题。所以雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架。在立项初期,考虑到很多项目都是用动物的名字来命名的 (例如著名的 Pig 项目),雅虎的工程师希望给这个项目也取一个动物的名字。时任研究院的首席科学家 Raghu Ramakrishnan ...
基础数据结构字符串 字符串类型的值实际可以 是字符串(简单的字符串、复杂的字符串(例如 JSON、XML))、数字 (整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能 超过 512MB。 12345set key value [ex seconds] [px milliseconds] [nx|xx]setex key seconds valuesetnx key value set 命令有几个选项: ex seconds:为键设置秒级过期时间。 px milliseconds:为键设置毫秒级过期时间。 nx:键必须不存在,才可以设置成功,用于添加。 xx:与 nx 相反,键必须存在,才可以设置成功,用于更新。 set、setnx、set xx 的区别123456789101112redis> get namedong4jredis> setnx name dong# 因为 name 已存在, 设置失败0redis> get namedong4jredis> set name dong4j xx# name 存在才能使用 xxO ...
Redis 的 5 种数据结构 Redis 数据结构和内部编码 Redis 的单线程模型Redis 使用单线程处理命令, 所以一条命令从客户端达到服务端不会立即执行, 所有命令都会进入一个队列, 然后逐个被执行. Redis 单线程处理速度快的原因 纯内存访问, 内存的响应时长约为 100 纳秒 非阻塞 I/O, Redis 使用 epoll 作为 I/O 多路复用技术的实现, 再加上 Redis 自身的事件处理模型将 epoll 中的连接、读写、关闭都转换为事件,不 在网络 I/O 上浪费过多的时间 单线程避免了线程切换和竞态产生的消耗 存在的问题 对于每个命令的执行时间有要求. 如果某个命令执行时间过长, 会造成其他命令阻塞
新时代码农
未读Redis 可执行文件说明 可执行文件 作用 redis-server 启动 Redis redis-cli Redis 命令行客户端 redis-benchmark Redis 基准测试工具 redis-check-aof Redis AOF 持久化文件检测和修复工具 redis-check-dump Redis RDB 持久化文件检测和修复工具 redis-sentinel 启动 Redis Sentinel 启动方式1. 默认配置 1redis-server 2. 运行参数 12345# 格式redis-server --configKey1 configValue1 --configKey2 configValue2# 使用 6380 端口启动 redisredis-server --port 6380 3. 配置文件 1redis-server /usr/local/redis/redis.conf 3.1 基础配置 配置名 说明 port 端口 logfile 日志文件 dir Redis 工作目录 (存放 ...
系统 Centos 64 位 第一步,首先下载 Nginx 的 tar 包及安装依赖的工具 tar 包。Nginx: http://nginx.org/en/download.html Nginx 需要依赖下面 3 个包gzip 模块需要 zlib 库 ( 下载: http://www.zlib.net/ )rewrite 模块需要 pcre 库 ( 下载: http://www.pcre.org/ )ssl 功能需要 openssl 库 ( 下载: http://www.openssl.org/ ) 分别解压。具体命令: 123456789wget http://nginx.org/download/nginx-1.13.2.tar.gzwget http://www.zlib.net/zlib-1.2.11.tar.gzwget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gzwget https://www.openssl.org/source/openssl-fips-2.0.16.tar.gztar zxvf openssl ...