Java EE 企业级框架
水田如雅
不生产代码,只是代码的搬运工
展开
-
Redis——实现乐观锁
核心代码: try { Thread.sleep((int)Math.random()*5000); } catch (InterruptedException e) { e.printStackTrace(); } while (true){ ...原创 2018-06-27 22:42:54 · 1964 阅读 · 0 评论 -
MyBatis Review——动态sql
MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情原创 2016-05-22 16:21:13 · 1700 阅读 · 0 评论 -
MyBatis Review——输入输出映射
一,输入映射 mybatis的输入映射通过parameterType指定,可以为简单类型,包装类型,hashmap类型。 1,简单类型 SELECT * FROM `user` where username like '%${value}%' 2,定义包装类型po select * from user where原创 2016-05-22 15:31:09 · 1251 阅读 · 0 评论 -
MyBatis Review——加载mappers映射文件的三种方式
一,通过resource加载映射文件 二,通过mapper接口加载映射文件 <!-- 遵循规范:需要将mapper接口类名与xml文件映射名称保持一致,且在一个目录中 上边规范的前提是:使用的是mapper代理的方法 --> 三,批量加载映射文件 <!-- 批量加载 指定接口的包名原创 2016-05-22 11:54:01 · 7978 阅读 · 0 评论 -
MyBatis Review——开发Dao的方法
一,原始Dao开发方法 需要编写的类:Dao接口及Dao接口的实现类。 使用逻辑:通过向Dao实现类中注入SqlSessionFactory,在方法体内部通过SqlSessionFactory创建SqlSession对象,再通过SqlSession对象操作statement。 例如:Dao接口:/** * @author LiuHuiChao * 用户管理dao接口 * */p原创 2016-05-21 18:23:24 · 3334 阅读 · 0 评论 -
MyBatis整体Review
一,整体结构 mybatis是一个持久层的框架,是apache下的顶级项目。 mybatis托管到goolecode下,再后来托管到github下(https://github.com/mybatis/mybatis-3/releases)。 中文手册:http://www.mybatis.org/mybatis-3/zh/index.html mybatis让程序将主要精力放在sql上原创 2016-05-21 15:37:19 · 2518 阅读 · 0 评论 -
MyBatis review(一)——常见配置及方法
一,#{} 与 ${}#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。${}表示拼接sql串,通过${}可以将parameterType 传入的内原创 2016-05-21 15:22:41 · 1858 阅读 · 1 评论 -
Spring源码解析—— ClassPathResource类
一,简单介绍Spring中资源处理相关类BeanFactory beanFactory=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));在Spring中,定义了接口InputStreamSource,这个类中只包含一个方法:public interface InputStreamSource { /**原创 2016-05-09 20:08:10 · 17315 阅读 · 0 评论 -
MyBatis分页插件的使用——PageHelper
一,配置plugin 在myBatis的配置文件中,加入如下配置: PS: 该插件目前支持以下数据库的物理分页:OracleMysqlMariaDBSQLiteHsqldbPostgreSQLDB2SqlServer(2005,2008)InformixH2SqlServer2012 配置dialect属性时,可以使用小写形式: or原创 2016-05-29 21:05:48 · 5685 阅读 · 3 评论 -
Spring事务管理回顾——基本概念
BackGround: 最近一直在面试,感觉spring的事务配置问的挺多的,再扯出来好好瞅瞅,争取做到秒杀面试官。一,事务的基本概念 什么是事务? 逻辑上的一组操作,这组操作要么全都成功,要么全都失败。例如,我购买完一个课程,要进行支付,需要首先去我的账户表中减去需要支付的金额,然后更新订单状态,支付才算是成功,那么支付跟更新订单状态就要原创 2016-05-26 17:07:29 · 3253 阅读 · 1 评论 -
MyBatis Review——整合ehcache
ehcache是一个分布式缓存框架,是hibernate中二级缓存的默认实现。 一,整合的思路 mybatis提供了一个cache接口,如果要实现自己的缓存逻辑,实现cache接口开发即可: mybatis和ehcache整合:mybatis和ehcache的整合包中提供了一个cache接口的实现类: 1,加入jar2,整合ehcache原创 2016-05-24 21:13:38 · 5456 阅读 · 0 评论 -
MyBatis Review——查询缓存
一,查询缓存简介 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。 mybaits提供一级缓存,和二级缓存。 一级缓存是SqlSession级别的缓存。在操作数据库时候,需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域是互相不影响的。原创 2016-05-24 20:37:55 · 9521 阅读 · 1 评论 -
MyBatis-Generator自动生成基本代码
一,MyEclipse中安装Generator 可以在MyEclipse中,选择install from site:http://mybatis.googlecode.com/svn/sub-projects/generator/trunk/eclipse/UpdateSite/原创 2016-04-09 19:19:11 · 7058 阅读 · 1 评论 -
Spring源码导入MyEclipse
一,安装Gradle 解压之后,配置GRADLE_HOME: 之后在Path中加入: cmd监测是否安装成功:输入 gradle 出现上面结果表示安装成功。原创 2016-03-27 17:20:10 · 3471 阅读 · 2 评论 -
jar包,war包,ear包区别
这三种文件都可以看作是java的压缩格式,其实质是实现了不同的封装: jar--封装类 war--封装web站点 ear--封装ejb原创 2016-06-25 20:19:12 · 2509 阅读 · 2 评论 -
MyBatis Review——使用resultType和resultMap实现一对一查询
例如: 查询订单信息,关联查询创建订单的用户信息。 查询语句: SELECT orders.*, USER .username ,USER .sex, USER .addressFROM orders, USERWHERE orders.user_id = USER .id 查询结果: 1,使用resu原创 2016-05-23 13:15:30 · 2540 阅读 · 0 评论 -
MyBatis Review——一对多关系映射配置
示例: 查询订单表及订单明细信息。编写sql查询语句:SELECT orders.*, USER .username ,USER .sex, USER .address, orderdetail.id as orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders原创 2016-05-23 14:56:29 · 1966 阅读 · 0 评论 -
Redis——实现悲观锁
抽象类:/** * \* Created: liuhuichao * \* Date: 2018/6/5 * \* Time: 上午10:35 * \* Description: redis 锁抽象类 * \ */public abstract class AbstractLock implements Lock{ protected volatile boolea...原创 2018-06-27 22:35:48 · 2319 阅读 · 1 评论 -
Spring Boot集成JWT&Spring Security进行接口安全认证
一,协议token验证未通过返回:{ "header": { "errorinfo": "无效的token", "errorcode": "8001" }}页面上对这种情况的处理,都跳转到登陆页面;登陆验证未通过返回:{ "header": { "errorinfo": "用户名或密码错误,请重新输入!", "原创 2017-10-31 09:48:25 · 13711 阅读 · 8 评论 -
Kafka——使用spring进行集成
生产者:<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLo原创 2017-05-23 22:46:07 · 8519 阅读 · 11 评论 -
log4j配置单独日志文件输出
log4j.logger.batteryHistory=ERROR,BDlog4j.appender.BD=org.apache.log4j.FileAppenderlog4j.appender.BD.File=../logs/batteryDataHistory.loglog4j.additivity.BD=falselog4j.appender.BD.Append = truelog原创 2016-12-27 22:17:34 · 1494 阅读 · 2 评论 -
Spring整合ActiveMQ
一,加入pom配置 junit junit 4.10 test org.springframework spring-context ${原创 2016-11-24 22:22:01 · 1085 阅读 · 1 评论 -
Java——基于java自身包实现消息系统间的通信(TCP/IP+NIO)
/** * Created by LiuHuiChao on 2016/11/15. * description:based on TCP/IP+NIO to deliver the message */public class TCP_IP_NIO { @Test public void clientStart() throws IOException {原创 2016-11-15 21:53:57 · 750 阅读 · 3 评论 -
Java——基于java自身包实现消息系统间的通信(TCP/IP+BIO)
最近看到阿里的以为童鞋写的一本关于分布式的书,感觉不错,准备把这本书上基础的代码都写一写。/** * Created by LiuHuiChao on 2016/11/15. * description:based on TCP/IP+BIO to deliver the message */public class TCP_IP_BIO { /** * client端原创 2016-11-15 21:15:15 · 686 阅读 · 1 评论 -
Java——RMI
之前分布式系统调用用的是比较老的EJB,当时还是作为服务调用方,去调用别的系统的服务。最近发现新公司里面,用的是RMI,查了下发现EJB的底层实现就是RMI,也算是熟悉了。。。 一,使用JDK 中的RMI实现服务发布和引用服务端接口:/** * Created by LiuHuiChao on 2016/11/18. */public interface UserInfoService ex原创 2016-11-18 21:58:37 · 2172 阅读 · 4 评论 -
Zookeeper-入门
一,简单操作zk的节点加入如下pom配置: org.apache.zookeeper zookeeper 3.4.6 public class TestZookeeperNode { // 根节点 public static final String ROOT = "/root-ktv"; public static void main(String[] args)原创 2016-06-22 15:14:50 · 2894 阅读 · 1 评论 -
Dubbo入门简单示例
之前用过EJB做分布式系统,前段时间跟人闲聊,发现还是Dubbo+ZK用的比较多,so,自己玩玩儿。 先安装一个zk作为服务注册中心,之后,建个maven工程,pom里面加入如下配置: com.alibaba dubbo 2.0.13 org.apache.zookeeper zookeeper 3.3.6原创 2016-06-22 13:51:09 · 5869 阅读 · 3 评论 -
MyBatis Review——延时加载
在MyBatis中使用resultMap可以实现延迟加载,在collection和association标签可以配置延迟加载功能。 1,开启延迟加载配置 2,示例association配置 <!-- select:指定延时加载需要执行的statement的id(根据user_id查询用原创 2016-05-23 20:08:54 · 7556 阅读 · 0 评论 -
FastDFS+Nginx搭建分布式文件系统
一,关于FastDFS FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。 如上图,其中tracker并不保存实际的图片,而是起到一个协调的作用,具体的图片存储在storage里面。但我们页原创 2016-06-05 17:02:14 · 2122 阅读 · 0 评论 -
MyBatis Review——多对多映射
示例: 查询用户及用户购买商品信息。sql语句:SELECT orders.*, USER .username ,USER .sex, USER .address, orderdetail.id as orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orde原创 2016-05-23 17:00:11 · 2232 阅读 · 0 评论 -
Rest ful API的一些基本概念
0,应用背景 Rest ful api是 Fielding(楼下那叔叔) 在他的论文《Architectural Styles and the Design of Network-based Software Architectures》中提出的,论文地址:http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm。(。。。)原创 2016-03-28 10:26:02 · 3599 阅读 · 8 评论 -
Spring Mvc——Controller中常规方法示例
一,简单无参数地址访问 首先来看下类标记:/** * Created by LiuHuiChao on 2016/3/21. */@Controller@RequestMapping("/hello")public class HelloMvcController { 简单进行类中方法的访问:/*简单访问示例*/ @RequestMapping("/mvc") public原创 2016-03-23 08:50:41 · 2230 阅读 · 4 评论 -
Struts1——ActionForward对象常用设置
一,redirect属性 在使用Action进行转向的时候,会发现浏览器的地址是不变的,只是服务器内部的一个跳转。比如,我在forward设置转到index.jsp页面,发现浏览器地址还是**.index.action;如果想转向的时候,为重定向,可以使用:二,ActionForward的全局与局部 当有多个Action里面配置了重复的转向的时候,比如,我每次跳转前判断原创 2015-12-16 15:42:26 · 2835 阅读 · 3 评论 -
Java的国际化支持(I18N问题)
一,读取PC的locale信息Locale信息是由语言跟国家代码组成的,在Java中,提供了Locale类对应语言信息。/* * //获取local信息 Locale defaultLocale = Locale.getDefault(); * System.out.println("country:" + defaultLocale.getCountry()); * System.o原创 2015-12-16 20:23:01 · 2929 阅读 · 4 评论 -
Struts1——自定义转换器
在struts1中,使用了beanutils来处理类型的一些基本类型的转换。 当需要时候,可以定义自己的转换器,下面以java.util.Date为例来看下如何定义转换器。 1,首先要继承common-beanutils.jar包中的接口然后重写convert方法:2,注册类型转换类 @1,使用servlet进行注册在servlet的init方法中:并设置servl原创 2015-12-15 18:54:16 · 2267 阅读 · 3 评论 -
Struts1——文件上传
在struts1中,框架本身引入commons-fileupload: 只需几行代码+配置,便可以完成文件的上传。 首先使我们form表单里面的配置: 然后在ActionForm中,将我们的input为file的提交项对应为FormFile类型:在Action中,通过我们的ActionForm就可以直接拿到上传文件的信息,进行存盘,入库等操作。另外,还可以在Struts的配原创 2015-12-15 18:38:06 · 2141 阅读 · 3 评论 -
struts1——静态ActionForm与动态ActionForm
在struts1中,我们可以使用ActionForm来获取从client端提交上来的数据,并通过action配置中的name属性,将某个ActionForm配置到某次请求应答的Action中,作为本次请求应答的数据传输介质,ps,其实还是侧重于数据在客户端的获取,因为赋值部分框架帮我们做好了。 对于ActionForm的使用,我们有两种方式:一是通过建立类的方式,二是直接写入配置原创 2015-12-15 14:42:36 · 2596 阅读 · 2 评论 -
EL表达式无法被解析
刚困死了,可是手上还在debug一个东西。然后就发现 我的EL表达式都跑到页面上去了,处于半睡半醒的状态,有restart 了下Tomcat,发现还没好,判断应该是真的有问题。 百度了句话粘上去: 再run一下,果然就没事了。虽然很困,但是还是很清楚EL表达式是不用添加page指令的。so,到底是哪里出了问题。是不是我struts里面多配了什么东西?还是webconfig呢原创 2015-12-14 15:42:32 · 2156 阅读 · 7 评论 -
基于请求响应的MVC框架调用分析
一,使用Servlet来处理请求响应 当客户端提交数据之后,接着发送请求,请求被封装成对象,服务器接收到请求,根据请求的URL,来判断将请求对象交由哪个Servlet处理。在servlet中,我们可以根据请求是从哪里发出的,来判断我们具体执行哪段处理表现层业务逻辑的if-else.或者,可能我们客户端会提交一个参数,我们可以根据参数来判断调用哪段代码去渲染表现层,返原创 2015-12-13 13:16:04 · 1804 阅读 · 3 评论 -
Spring.Net——理解控制反转和依赖倒置
一,控制反转(Inversion of Control,缩写IoC)和依赖注入(Dependency Injection,简称DI) 1,控制反转 IoC(Inversion of Control),这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关 系。原创 2015-09-13 08:19:35 · 2452 阅读 · 6 评论