新書推薦:
《
跟着渤海小吏读历史:大唐气象(全三册)
》
售價:HK$
189.0
《
心智的构建:大脑如何创造我们的精神世界
》
售價:HK$
81.4
《
美国小史(揭秘“美国何以成为美国”,理解美国的经典入门读物)
》
售價:HK$
81.4
《
中国古代北方民族史丛书——东胡史
》
售價:HK$
87.8
《
巨人传(插图珍藏本)
》
售價:HK$
705.6
《
地下(村上春树沙林毒气事件的长篇纪实)
》
售價:HK$
76.7
《
偿还:债务与财富的阴暗面
》
售價:HK$
80.2
《
清华大学藏战国竹简校释(壹):《命训》诸篇
》
售價:HK$
94.4
|
編輯推薦: |
◎ 畅销书升级版,涵盖Java EE主流框架技术SSM Redis Spring微服务,快速上手开发
◎内容全面,以实际应用为导向,取舍明确
◎尤其对于技术的重点、难点,解释得深入浅出,案例丰富
◎ 用Spring MVC整合MyBatis框架技术
◎ 用Spring整合Redis在Java互联网技术上的应用
◎ 通过对Spring Boot和Spring Cloud的讲解让大家理解Spring微服务开发
◎ 通过秒杀讲解互联网高并发业务,通过Spring微服务实例串联本书的主要知识点
|
內容簡介: |
随着移动互联网的兴起,以Java技术为后台的互联网技术占据了市场的主导地位。在Java互联网后台开发中,SSM框架(Spring Spring?MVC MyBatis)成为了主要架构,本书讲述了SSM框架从入门到实际工作的要求。与此同时,为了提高系统性能,NoSQL(尤其是Redis)在互联网系统中已经广泛应用用,为了适应这个变化,本书通过Spring讲解了有关Redis的技术应用。随着微服务的异军凸起,Spring微服务也成为时代的主流,本书也包括这方面的内容。本书主要分为7部分:第1部分对Java互联网的框架和主要涉及的模式做简单介绍;第2部分讲述MyBatis技术;第3部分讲述Spring基础(包括IoC、AOP和数据库应用),重点讲解Spring数据库事务应用,以满足互联网企业的应用要求;第4部分讲述Spring?MVC框架;第5部分通过Spring讲解Redis技术;第6部分讲解Spring微服务(Spring?Boot和Spring?Cloud);第7部分结合本书内容讲解Spring微服务实践。
|
關於作者: |
杨开振,技术畅销书作家,精通Java 互联网技术开发和实践,拥有十余年一线企业开发经验,著有业内畅销书《深入浅出MyBatis 技术原理与实战》《深入浅出Spring Boot 2.x》和《Spring Cloud微服务和分布式系统实践》等。写作特点是技术点详尽准确、文字浅显易懂,立志于用书普及基础技术。刘家成,资深软件工程师,曾任职Synnex中国、亚信国际等,在电信、分销领域有丰富经验,在Java高并发和Spring生态有深刻的理解。
|
目錄:
|
第1部分 入门和技术基础
第1章 Java EE基础 2
1.1 Java EE概述 2
1.1.1 Java EE容器 3
1.1.2 Java EE组件 3
1.2 开发环境简介 4
1.2.1 Tomcat简介 4
1.2.1 Maven 5
1.2.3 Web项目结构 6
1.2.4 Web项目发布包 7
1.3 Web容器的组件——Servlet 7
1.3.1 Servlet入门实例 7
1.3.2 Servlet的生命周期 8
1.3.3 HttpServletRequest的应用 12
1.3.4 HttpServletResponse的应用 14
1.3.5 过滤器的使用 17
1.3.6 监听 20
1.3.7 Servlet容器初始化器 21
1.3.8 使用Cookie 23
1.3.9 提交表单 24
1.3.10 使用web.xml 26
第2章 认识SSM框架、Redis和微服务 28
2.1 Spring框架 28
2.1.1 Spring IoC简介 28
2.1.2 Spring AOP 30
2.2 MyBatis简介 31
2.2.1 Hibernate简介 32
2.2.2 MyBatis 34
2.2.3 Hibernate和MyBatis的区别 35
2.3 Spring MVC简介 36
2.4 流行的NoSQL——Redis 36
2.5 SSM Redis结构框图及概述 37
2.6 Spring微服务 38
第3章 Java设计模式 40
3.1 Java反射技术 40
3.1.1 通过反射构建对象 40
3.1.2 反射方法 42
3.1.3 实例 42
3.2 动态代理模式和责任链模式 43
3.2.1 JDK动态代理 44
3.2.2 CGLIB动态代理 46
3.2.3 拦截器 48
3.2.4 责任链模式 51
3.3 观察者模式 54
3.3.1 概述 54
3.3.2 实例 55
3.4 普通工厂模式和抽象工厂模式 58
3.4.1 普通工厂模式 58
3.4.2 抽象工厂模式 59
3.5 建造者模式 61
3.5.1 概述 61
3.5.2 Builder模式实例 62
第2部分 互联网持久框架——MyBatis
第4章 认识MyBatis核心组件 66
4.1 持久层的概念和MyBatis的特点 66
4.2 准备MyBatis环境 67
4.3 MyBatis的核心组件 69
4.4 SqlSessionFactory 70
4.4.1 使用XML配置文件构建SqlSessionFactory对象 70
4.4.2 使用代码构建SqlSessionFactory对象 72
4.5 SqlSession 72
4.6 映射器 73
4.6.1 用XML实现映射器 74
4.6.2 用注解实现映射器 75
4.6.3 用SqlSession发送SQL 76
4.6.4 用Mapper接口发送SQL 77
4.6.5 两种发送SQL的方式对比 77
4.7 生命周期 77
4.7.1 SqlSessionFactoryBuilder 77
4.7.2 SqlSessionFactory 78
4.7.3 SqlSession 78
4.7.4 Mapper 78
4.8 实例 79
第5章 MyBatis配置 85
5.1 概述 85
5.2 properties属性 86
5.2.1 property子元素 86
5.2.2 properties文件 87
5.2.3 程序代码传递 87
5.3 settings配置 88
5.4 typeAliases别名 90
5.4.1 系统定义别名 91
5.4.2 自定义别名 92
5.5 typeHandler类型转换器 93
5.5.1 系统定义的typeHandler 94
5.5.2 自定义typeHandler 98
5.5.3 枚举typeHandler 101
5.5.4 文件操作 105
5.6 对象工厂 106
5.7 插件 108
5.8 运行环境 108
5.8.1 事务管理器 109
5.8.2 数据源环境 111
5.9 databaseIdProvider 114
5.9.1 使用系统默认的databaseIdProvider 114
5.9.2 不使用系统规则 116
5.10 引入映射器的方法 118
第6章 映射器 120
6.1 概述 120
6.2 select元素——查询语句 121
6.2.1 简单的select元素的应用 122
6.2.2 自动映射和驼峰映射 123
6.2.3 传递多个参数 124
6.2.4 使用resultMap映射结果集 127
6.2.5 分页参数RowBounds 127
6.3 insert元素——插入语句 129
6.3.1 概述 129
6.3.2 简单的insert语句的应用 130
6.3.3 主键回填 130
6.3.4 自定义主键 131
6.4 update元素和delete元素 132
6.5 sql元素 132
6.6 参数 133
6.6.1 概述 133
6.6.2 存储过程参数支持 134
6.6.3 特殊字符串的替换和处理(#和$) 134
6.7 resultMap元素 134
6.7.1 resultMap元素的构成 135
6.7.2 使用Map存储结果集 136
6.7.3 使用POJO存储结果集 136
6.8 级联 137
6.8.1 MyBatis中的级联 137
6.8.2 建立POJO 140
6.8.3 配置映射文件 143
6.8.4 N 1问题 147
6.8.5 延迟加载 147
6.8.6 另一种级联 151
6.8.7 多对多级联 153
6.9 缓存 156
6.9.1 一级缓存和二级缓存 157
6.9.2 缓存配置项、自定义和引用 160
6.10 存储过程 161
6.10.1 IN和OUT参数存储过程 162
6.10.2 游标的使用 164
第7章 动态SQL 167
7.1 概述 167
7.2 if元素 167
7.3 choose、when和otherwise元素 168
7.4 trim、where和set元素 169
7.5 foreach元素 170
7.6 用test的属性判断字符串 171
7.7 bind元素 171
第8章 MyBatis的解析和运行原理 173
8.1 构建SqlSessionFactory过程 174
8.1.1 构建Configuration 175
8.1.2 构建映射器的内部组成 176
8.1.3 构建SqlSessionFactory 178
8.2 SqlSession运行过程 179
8.2.1 映射器的动态代理 179
8.2.2 SqlSession运行原理 183
第9章 插件 192
9.1 插件接口 192
9.2 插件的初始化 193
9.3 插件的代理和反射设计 194
9.4 常用的工具类——MetaObject 197
9.5 插件开发过程和实例 198
9.5.1 确定需要拦截的签名 198
9.5.2 实现拦截方法 200
9.5.3 配置和运行 202
9.5.4 插件实例——分页插件 203
第3部分 Spring基础
第10章 Spring IoC的概念 216
10.1 Spring概述 216
10.2 Spring IoC概述 218
10.2.1 主动创建对象 219
10.2.2 被动创建对象 220
10.2.3 Spring IoC阐述 222
10.3 Spring IoC容器 223
10.3.1 Spring IoC容器的设计 223
10.3.2 Spring IoC容器的初始化 227
10.3.3 Spring Bean的生命周期 228
第11章 装配Spring Bean 233
11.1 依赖注入和依赖查找 233
11.1.1 构造器注入 233
11.1.2 使用setter注入 234
11.1.3 依赖查找 235
11.2 装配Bean概述 236
11.3 通过XML配置装配Bean 237
11.3.1 装配简易值 237
11.3.2 装配集合 238
11.3.3 命名空间装配 241
11.4 通过注解装配Bean 243
11.4.1 使用注解@Component装配Bean 243
11.4.2 自动装配——@Autowired 247
11.4.3 自动装配的歧义性(注解@Primary和注解@Qualifier) 248
11.4.4 装载带有参数的构造方法类 251
11.4.5 使用注解@Bean装配 252
11.4.6 注解自定义Bean的初始化和销毁方法 253
11.5 装配的混合使用 253
11.6 使用Profile 256
11.6.1 使用注解@Profile配置 256
11.6.2 使用XML定义Profile 257
11.6.3 启动Profile 258
11.7 加载属性文件 260
11.7.1 使用注解方式加载属性文件 261
11.7.2 使用XML方式加载属性文件 263
11.8 条件化装配Bean 264
11.9 Bean的作用域 265
11.10 使用Spring表达式 268
11.10.1 Spring EL相关的类 268
11.10.2 Bean的属性和方法 270
11.10.3 使用类的静态常量和方法 271
11.10.4 Spring EL运算 271
第12章 面向切面编程 273
12.1 一个简单的约定游戏 273
12.1.1 约定规则 273
12.1.2 读者的代码 275
12.1.3 笔者的代码 277
12.2 Spring AOP的基本概念 279
12.2.1 AOP的概念和使用原因 279
12.2.2 面向切面编程的术语 283
12.2.3 Spring对AOP的支持 285
12.3 使用注解@AspectJ开发Spring AOP 285
12.3.1 选择连接点 285
12.3.2 创建切面 286
12.3.3 切点 287
12.3.4 测试AOP 289
12.3.5 环绕通知 291
12.3.6 织入 293
12.3.7 向通知传递参数 294
12.3.8 引入 295
12.4 使用XML配置开发Spring AOP 297
12.4.1 各类通知 299
12.4.2 环绕通知 301
12.4.3 向通知传递参数 302
12.4.4 引入 302
12.5 经典Spring AOP应用程序 303
12.6 多个切面 305
第13章 Spring和数据库编程 311
13.1 传统的JDBC代码的弊端 311
13.2 配置数据库 313
13.2.1 使用简单数据库配置 313
13.2.2 使用第三方数据库连接池 314
13.2.3 使用JNDI数据库连接池 314
13.3 JDBC代码失控的解决方案——JdbcTemplate 315
13.3.1 JdbcTemplate的增、删、查、改 316
13.3.2 执行多条SQL语句 317
13.3.3 JdbcTemplate的源码分析 319
13.4 MyBatis-Spring项目 320
13.4.1 配置SqlSessionFactoryBean 321
13.4.2 SqlSessionTemplate的配置 325
13.4.3 配置MapperFactoryBean 327
13.4.4 配置MapperScannerConfigurer 327
13.4.5 定制扫描 330
13.4.6 使用Java配置文件配置MyBatis-Spring项目 331
13.4.7 测试Spring MyBatis 333
第14章 深入Spring数据库事务管理 336
14.1 Spring数据库事务管理器的设计 336
14.1.1 配置事务管理器 339
14.1.2 用Java配置方式实现Spring数据库事务 340
14.2 编程式事务 342
14.3 声明式事务 342
14.3.1 @Transactional的配置项 343
14.3.2 使用XML配置事务管理器 344
14.3.3 事务定义器 345
14.3.4 声明式事务的约定流程 346
14.4 数据库的相关知识 348
14.4.1 数据库事务ACID特性 348
14.4.2 丢失更新 348
14.4.3 隔离级别 349
14.5 选择隔离级别和传播行为 352
14.5.1 选择隔离级别 352
|
內容試閱:
|
随着移动互联网的兴起以及手机和平板电脑的普及,Java开发方向发生了很大变化,渐渐从管理系统走向了互联网系统。互联网系统的要求是大数据、高并发、高响应,而非管理系统的少数据、低并发和缓慢响应。为顺应技术发展趋势,2017年夏,笔者出版了《Java EE互联网轻量级框架整合开发 SSM框架(Spring MVC Spring MyBatis)和Redis实现》一书,比较全面和系统地介绍了Java EE的开发知识,受到了业内的广泛肯定。但是随着微服务的崛起,以及技术的更替,该书的知识点已经开始过时,更新已是必然,这就是本书出版的原因。
移动互联网的新要求
—高并发:举个例子,大公司企业ERP应用,有1万名员工使用,同时在线的用户可能只有数百人,而操作一个业务的同一个数据的可能只有几个人,其系统一般不会存在高并发的压力,使用传统程序和数据库完全可以应付。在互联网中,对于一件热门的商品,可能刚一上市就有成千上万的请求到达服务器,要求服务器瞬间执行数以万计的数据操作,对性能要求高,操作不当容易造成网站瘫痪,引发网站的生存危机。
—高响应:企业管理系统可以缓慢处理一些业务,而在高并发的互联网系统中,却不可以,按照互联网的要求一般以5秒为上限,超过5秒后响应,则用户体验不好,影响用户忠诚度,因此往往需要在高并发和大数据量的场景下实现。
—数据一致性:由于高并发,多个线程对同一数据同时访问,需要保证数据的一致性,比如电商网站的金额、商品库存不能出错,还要保证其性能不能太差,这是在管理系统中不会出现的场景。
—技术复杂化:在互联网中流行许多新技术,比如常见的NoSQL(Redis、MongoDB),微服务(Spring Boot和Spring Cloud)等技术。
为什么选择SSM框架 Redis Spring微服务的开发模式
Struts2框架和Spring结合,多年来没有改变臃肿的老毛病,更为严重的是近年来多次出现的漏洞问题,使得其名声和使用率大降。这个时候Spring MVC框架成了新一代MVC框架的主流。它原生于Spring框架,可以无缝对接Spring的核心技术。与Struts不同,它的流程模块化,没有那么多臃肿的类,所以互联网应用的框架大部分使用Spring MVC。
在目前企业的Java应用中,Spring框架是必需的,Spring的核心是IoC(控制反转),它是一个大容器,方便组装和管理各类系统内外部资源,同时支持AOP(面向切面编程),这是对面向对象的补充,目前广泛用于日志和数据库事务控制,减少了大量的重复代码,使得程序更为清晰。因为Spring可以使模块解耦,控制对象之间的协作,所以Spring框架是目前Java为流行的框架。
对于Hibernate,笔者感慨多,在需要存储过程或者复杂SQL时,它的映射关系几乎用不上,所有的问题都需要自己敲代码处理。作为全映射的框架,它的致命缺点是没有办法完全掌控数据库的SQL,而优化SQL是高并发、高响应系统的必然要求,这是互联网系统的普遍特性,所以Hibernate在互联网系统中被排除了。而另一个持久层框架MyBatis需要编写SQL,提供映射规则,不过它加入了动态SQL、自动映射、接口编程等功能,从而变得简单易用,同时支持SQL优化、动态绑定,并满足高并发和高响应的要求,所以它成为流行的Java互联网持久框架。
NoSQL是基于内存的,也就是将数据放在内存中,而不是像数据库那样放在磁盘上,内存的读取速度是磁盘读取速度的几十倍到上百倍,所以NoSQL工具的读取速度远比数据库读取速度要快得多,满足了高响应的要求。即使NoSQL将数据放在磁盘中,它也是一种半结构化的数据格式,读取到解析的复杂度远比数据库要低,这是因为数据库存储的是经过结构化、多范式等有复杂规则的数据,还原为内存结构的速度较慢。NoSQL在很大程度上满足了高并发、快速读/写和响应的要求,所以它也是Java互联网系统的利器。于是两种NoSQL工具——Redis和MongoDB流行起来,尤其是Redis,已经成为主要的NoSQL工具,本书会详细介绍它的常用方法。
随着微服务的崛起,当前使用Spring的方式也以微服务为主,所以本书还会讨论关于微服务(Spring Boot和Spring Cloud)的内容。其中,Spring Boot是基于Spring技术进行封装的,更易于开发Spring应用,而Spring Cloud则以Spring Boot的形式对一些分布式组件进行封装,更易于理解和使用。
基于以上原因,SSM(Spring Spring MVC MyBatis)已经成为Java互联网时代的主流框架,而Spring微服务则更容易使用,加之Redis缓存已经成了主流的NoSQL技术,笔者愿意将自己所掌握的知识分享给大家,为目前奋斗在SSM、Spring微服务和Redis战线上的同行们奉献一本有价值的参考书,给准备进入这个行业的新手一定的帮助和指导。
本书的特点
—实用性:全书内容来自笔者多年互联网实践开发经验,理论结合实际。
—理论性:突出基础理念,结合设计模式阐述框架的实现原理和应用理念,让读者知其然也知其所以然。
—与时俱进:介绍框架技术,与当前互联网企业保持同步,比如全注解搭建SSM框架、Spring微服务和Redis应用,方便读者把技术应用到实际工作中去。
—突出热点和重点:着重介绍MyBatis实践应用,Spring数据库及事务应用,使用Spring介绍Redis实践应用、Spring微服务、高并发和锁等互联网热门技术的热点和重点。
—性能要求突出:这是移动互联网的要求,因为互联网面对大数据和高并发,体现互联网企业真实需求。
本书的内容安排
本书基于一线企业的实际需求,介绍了Java互联网流行的框架技术,内容全面,以实际应用为导向,取舍明确,尤其对于技术的重点、难点,解释得深入浅出,案例丰富,本书分为7部分。
第1部分,讲解Java EE和框架基础,让读者对每一门技术的主要作用都有所了解。介绍SSM框架的主要设计模式,有助于从底层深入理解框架。
第2部分,讲解MyBatis的基础应用,包括其主要组成、配置、映射器、动态SQL,并且深入MyBatis的底层运行原理和插件,详细讨论它们的高级应用。
第3部分,讲解Spring IoC和Spring AOP。掌握Spring如何通过IoC管理资源,通过设计模式讨论AOP的实现原理、使用方法及实践。讨论Spring对数据库的支持,如何整合MyBatis,并且着重讨论了Spring数据库事务的相关内容,包括数据库隔离级别和传播行为的应用。
第4部分,讲解Spring MVC主要的流程、HandlerMapping的应用、控制器Controller、处理适配器(HandlerAdapter)、视图和视图解析器,然后讨论传递参数、注解、数据校验、消息转换和国际化等应用。
第5部分,讲解NoSQL的优势和应用方法,Redis的常用数据类型和主要命令,以及一些基本的特性(比如事务)和用法,并教会读者在Java和Spring环境中使用它。
第6部分,讲解Spring微服务,微服务的概念,通过对Spring Boot和Spring Cloud的讲解让大家理解Spring微服务的开发。
第7部分,通过Spring微服务实例串联本书的主要知识点,让大家体验Java后端开发的主流技术;注重性能分析,介绍一些常见处理高并发的方法,以满足企业的真实需要。
和读者的约定
为了方便论述,我们进行以下约定。
—import语句一般不出现在代码中,主要是为了缩减篇幅,可以使用IDE自动导入,只有在笔者认为有必要的场景和一些重要的实例中,它才会出现在代码中。
—本书的例子大部分使用附录A中的数据模型,附录A中有基本的论述和对应的SQL语句。
—对于普通的POJO,笔者大部分都会以“/**setter and getter**/”代替POJO的setter和getter方法,类似这样:
public class Role {
private Long id;
private String roleName;
private String note;
/**setter and getter**/
}
读者可以用IDE生成这些属性的setter和getter方法,这样做主要是为了节省篇幅,突出重点,也有利于读者的阅读。当然在一些特别重要的和使用广泛的场景中,比如MyBatis入门、SSM框架整合等,才会给出全量代码,以便读者进行编码学习。
—在默认情况下,笔者使用互联网常用的MySQL数据库,当使用其他数据库时,笔者会事先加以说明。
—本书采用的MyBatis版本是3.5.3,Spring的版本是5.2.1.RELEASE,Redis的版本是5.0.8,在实践的过程中读者需要注意版本之间的差异。
本书的目标读者
阅读本书,读者要掌握以下知识:Java编程基础和数据库基础知识(本书以互联网数据库MySQL为主)。本书以互联网企业广泛使用的技术框架为中心讲解Java EE和Spring微服务技术,从入门到实践,适合有志于从事Java EE和Spring微服务开发的各类人员阅读,通过学习本书能够有效提高技术能力,并将知识点应用到实际的企业工作中去。本书也可以作为大中专院校计算机专业的教材,帮助在校学生学习企业实际应用,当然读者也可以把本书当作一本工作手册进行查阅。
致谢
本书的成功出版,要感谢电子工业出版社的编辑们,没有他们的辛苦付出,没有本书的成功出版,尤其是孙学瑛编辑,写作过程中她给了我很多的建议和帮助,为此付出了很多时间和精力。
在撰写本书期间,我去了四川旅游,得到了校友刘家成的接待,和他聊起了创作本书的事情,他也自愿加入了本书的创作和更新,也帮助我编写和完善了部分章节的内容;同时得到前同事谭茂华的协助,他以过硬的技术为我排除了不少错误,给了我很多很好的建议,并撰写了一些很好的实例;在此对他们的辛苦付出表示诚挚的感谢。
互联网技术博大精深,涉及的技术门类特别多,甚至跨越行业,技术更新较快。撰写本书时笔者也遇到了一些困难,由于涉及的知识十分广泛,对技术要求更高,出错的概率也大大增加,正如没有完美的程序一样,也没有完美的书,一切都需要一个完善的过程,所以尊敬的读者,如果对本书有任何意见或建议,欢迎发送邮件到ykzhen2013@163.com,或者在笔者的博客(http://blog.csdn.net/ykzhen2015)上留言,以便于本书的修订。
杨开振
|
|