● 框架技术
文章平均质量分 96
武哥聊编程
同济大学硕士,第一批华为5G研发人员,拼多多广告投放部门,全网20w+粉丝。微信公众号:武哥聊编程
展开
-
【MyBatis学习02】走进MyBatis的世界
mybatis是个持久层的框架,用来执行数据库操作的,无外乎增删改查,上一节对mybatis有了宏观上的了解后,这一篇博客主要通过一个小示例来入门mybatis,先看一下要写的示例需求: 根据用户id查询用户信息 根据用户名称模糊查询用户信息 添加用户、删除用户、更新用户 其实也就是增删改查,掌握这些,基本上就掌握了mybatis的基本操作了,下面一个个模块来完成。原创 2016-06-09 22:30:40 · 15113 阅读 · 29 评论 -
【MyBatis学习14】MyBatis和Spring整合
前面十几篇博文总结了mybatis在开发中的相关技术,但在实际中都是和spring整合开发的,所以这里总结一下mybatis和spring的整合方法,并在整合后进行测试。1. 整合的环境这都是老掉牙的问题了,不管是开发还是整合,首先环境肯定得有,环境嘛,除了java环境和开发环境外,那就是jar包咯,关于mybatis和spring整合的jar包,我已经上传到下载频道了==>传送门 将这原创 2016-06-16 22:07:26 · 17675 阅读 · 6 评论 -
【MyBatis学习13】MyBatis中的二级缓存
1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的。为了更加清楚的描述二级缓存,先来看一个示意图: 从图中可以看出: sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到该UserMapper的二级缓存中。原创 2016-06-16 07:26:19 · 20644 阅读 · 11 评论 -
【MyBatis学习07】动态sql
动态sql是mybatis中的一个核心,什么是动态sql?动态sql即对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。就拿上一篇博文中对用户的综合查询一例来说:select * from user where user.sex = #{user.sex} and user.username like '%${user.username}%'原创 2016-06-13 08:11:30 · 7175 阅读 · 9 评论 -
【MyBatis学习12】MyBatis中的一级缓存
缓存的作用是减轻数据库的压力,提高数据库的性能的。mybatis中提供了一级缓存和二级缓存,先来看一下两个缓存的示意图: 从图中可以看出: 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。 二级原创 2016-06-15 21:25:06 · 7713 阅读 · 7 评论 -
【MyBatis学习11】MyBatis中的延迟加载
1. 什么是延迟加载 举个例子:如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。 所以延迟加载即先从单表查询、需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。 我们来对比一下: 关联查询:SELECT orders.*, user.use原创 2016-06-15 07:38:15 · 40134 阅读 · 18 评论 -
【MyBatis学习10】高级映射之多对多查询
本文来总结一下mybatis中的多对多映射,从第8节的文章中可以看出,用户表和商品表示多对多关系,它们两的多对多是通过订单项和订单明细这两张表所关联起来的,那么这一节主要来总结一下用户表和商品表之间的多对多映射。 首先在上一节的基础上继续写sql,SELECT orders.*, user.`username`, user.`sex`, user.`address`,原创 2016-06-14 17:32:05 · 10814 阅读 · 13 评论 -
【MyBatis学习09】高级映射之一对多查询
上一篇博文总结了一下一对一的映射,本文主要总结一下一对多的映射,从上一篇文章中的映射关系图中可知,订单项和订单明细是一对多的关系,所以本文主要来查询订单表,然后关联订单明细表,这样就有一对多的问题出来了。 首先还是先写sql语句,在写sql语句的时候遵循两点: 查询的主表是哪个? 订单表 查询的关联表是哪个? 订单明细表 明确了主表和关联表,下面就可以写sql了,我们在原创 2016-06-14 07:14:12 · 10733 阅读 · 9 评论 -
【MyBatis学习08】高级映射之一对一查询
从这一篇博文开始,将总结一下mybatis中的几个高级映射,即一对一、一对多、多对多查询,这篇先总结一下mybatis中的一对一查询。 为了模拟这些需求,事先要建立几个表,不同的表之间将对应上面提到的不同的映射,为此,我建立4个表,如下:DROP TABLE IF EXISTS `items`;DROP TABLE IF EXISTS `orders`;DROP TABLE IF EXISTS原创 2016-06-13 20:04:10 · 13894 阅读 · 12 评论 -
【MyBatis学习15】MyBatis的逆向工程生成代码
1. 什么是逆向工程 mybatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po..)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。2. 使用逆向工程 使用mybatis的逆向工程,需要导入逆向工程的原创 2016-06-17 10:06:52 · 30104 阅读 · 15 评论 -
【SpringMVC学习01】宏观上把握SpringMVC框架
springmvc是一个基于mvc的web框架,是spring框架的一个模块,所以springmvc和spring无需通过中间整合层进行整合。我们先来看下spring的一个架构模型,看springmvc在spring框架中所处的位置: 从图中可以看出,springmvc是spring的一个web框架,所以上图中描述的是spring web mvc,它和struts2的功能差不多,下面我们原创 2016-06-18 08:25:11 · 23548 阅读 · 36 评论 -
【MyBatis学习06】输入映射和输出映射
在前面几篇博文的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结。我们知道mybatis中输入映射和输出映射可以是基本数据类型、hashmap或者pojo的包装类型,这里主要来总结一下pojo包装类型的使用,因为这个在开发中比较常用。1. 输入映射输入映射,是在映射文件中通过parameterType指定输入参数的类型原创 2016-06-12 21:49:42 · 10634 阅读 · 17 评论 -
【MyBatis】MyBatis分页插件PageHelper的使用
好多天没写博客了,因为最近在实习,大部分时间在熟悉实习相关的东西,也没有怎么学习新的东西,这周末学习了MyBatis的一个分页插件PageHelper,虽然没有那么的强大(我在最后会说明它的缺点),但还是挺不错的。这篇博文主要来总结下如何使用PageHelper。 我们知道,在mysql中,分页的sql是使用limit来做,如果我们自己写sql,那分页肯定是没有任何问题的。但是一旦model多原创 2016-08-21 23:14:49 · 95804 阅读 · 26 评论 -
【SpringMVC学习07】SpringMVC中的统一异常处理
我们知道,系统中异常包括两类:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。在开发中,不管是dao层、service层还是controller层,都有可能抛出异常,在springmvc中,能将所有类型的异常处理从各处理过程解耦出来,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维原创 2016-06-23 20:47:57 · 57570 阅读 · 13 评论 -
【SpringMVC学习06】SpringMVC中的数据校验
这一篇博文主要总结一下springmvc中对数据的校验。在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验。服务端校验可以是在控制层conroller,也可以是在业务层service,controller校验页面请求的参数的合法性,在服务端控制层conroller的校验,不区分客户端类型(浏览器、手机客户端、远程调用);service层主要校验关键业原创 2016-06-22 20:30:27 · 39892 阅读 · 10 评论 -
【SpringMVC学习05】SpringMVC中的参数绑定总结
众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springmvc中如何接收前台页面的参数,即springmvc中的参数绑定问题。1. 参数绑定的过程我们可以回忆一下,在struts2中,是通过在Action中定义一个成员变量来接收前台传进来的参数,而在sprin原创 2016-06-21 20:08:05 · 50402 阅读 · 16 评论 -
【SSH网上商城项目实战07】Struts2和Json的整合
上一节我们完成了DataGrid显示jason数据,但是没有和后台联系在一起,只是单纯地显示了我们自己弄的json数据,这一节我们将json和Struts2整合,打通EasyUI和Struts2之间的交互。1. json环境的搭建 json环境搭建很简单,导入json的jar包即可,如下: (注:json-lib-2.4的jar包下载地址...原创 2016-05-09 09:03:26 · 11922 阅读 · 65 评论 -
【SpringMVC学习04】Spring、MyBatis和SpringMVC的整合
前两篇springmvc的文章中都没有和mybatis整合,都是使用静态数据来模拟的,但是springmvc开发不可能不整合mybatis,另外mybatis和spring的整合我之前学习mybatis的时候有写过一篇,但是仅仅是整合mybatis和spring,所以这篇文章我系统的总结一下spring、mybatis和springmvc三个框架的整合(后面学习到maven时,我会再写一篇使用ma原创 2016-06-20 19:51:05 · 22785 阅读 · 23 评论 -
【SpringMVC学习03】SpringMVC中注解和非注解方式下的映射器和适配器总结
从上一篇的springmvc入门中已经看到,springmvc.xml中的配置了映射器和适配器,是使用非注解的方式来配置的,这是非注解方式的一种,这里再复习一下:1. 非注解方式1.1 处理器适配器 上一节中使用的处理器适配器是:org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter。即: Sim原创 2016-06-19 20:15:04 · 19028 阅读 · 14 评论 -
【SpringMVC学习02】走进SpringMVC的世界
上一篇博文主要介绍了springmvc的整个架构执行流程,对springmvc有了宏观上的把握,这一篇博文主要以案例作为驱动,带你走进springmvc的世界。案例中的需求很简单:对商品列表的查询。表的话还是使用我在学习mybatis时候用的表,具体可以参见这篇博文中的建表语句。1. 环境的搭建原创 2016-06-18 19:39:50 · 21062 阅读 · 18 评论 -
【SpringMVC学习11】SpringMVC中的拦截器
Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。本文主要总结一下springmvc中拦截器是如何定义的,以及测试拦截器的执行情况和使用方法。1. springmvc拦截器的定义和配置1.1 springmvc拦截器的定义 在springmvc中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提原创 2016-06-28 07:44:41 · 27592 阅读 · 11 评论 -
【MyBatis学习05】SqlMapConfig.xml文件中的配置总结
经过上两篇博文的总结,对mybatis中的dao开发方法和流程基本掌握了,这一节主要来总结一下mybatis中的全局配置文件SqlMapConfig.xml在开发中的一些常用配置,首先看一下该全局配置文件中都有哪些可以配置的东西: 配置内容 作用 用来加载属性文件 用来设置全局参数 用来设置类型的别名 用来设置类型处理器原创 2016-06-12 13:22:35 · 17417 阅读 · 24 评论 -
【MyBatis学习03】原始dao开发方法及其弊端
上一篇博文总结了一下mybatis的入门,接下来就要开发dao方法了,这篇博文主要总结一下mybatis中原始dao开发的方法,最后并总结一下原始dao开发方法的弊端。mybatis中dao开发应该使用mapper代理的方法,这将在下一篇博文中介绍。 原始dao开发思路比较简单,写个dao接口和dao实现类即可。需要向dao实现类中注入sqlSessionFactory,在方法体内通过sqlSe原创 2016-06-10 22:02:09 · 8976 阅读 · 6 评论 -
【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示
网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要进入商品的详细信息页面,就像淘宝里面那样。那么每次点击都要去后台查询一下该商品的详细信息,就会发送相应的sql语句,每次刷新一下详细页面也会发sql语句,这样的话,性能肯定会受到很大的影响。那么使用Hibernate的二级缓存就可以解决这个问题。 有些人可能会想,我们可以使用重定向...原创 2016-05-15 15:34:10 · 16901 阅读 · 7 评论 -
【SSH网上商城项目实战24】Struts2中如何处理多个Model请求
上一节我们完成了在线支付功能,但是支付完成了还没结束,我们需要接收从第三方那边反馈回来的信息,比如成功支付后,我们需要给付款方发送邮件和短信等。所以我们还需要在payAction中获取从第三方传过来的参数,由于从第三方传过来的参数与我们传过去的参数是不同的,所以接收那些参数我们也得写一个Model(BackData),那么问题来了,我们的PayAction已经写成这样子了:public class原创 2016-05-21 14:44:39 · 8999 阅读 · 6 评论 -
监听器如何获取Spring配置文件
我们在做项目的时候,会用到监听器去获取Spring的配置文件,然后从中拿出我们需要的bean出来,比如做网站首页,假设商品的后台业务逻辑都做好了,我们需要创建一个监听器,在项目启动时将首页的数据查询出来放到application里,即在监听器里调用后台商品业务逻辑的方法,也就是说我们需要在监听器里获取Spring中配置的相应的bean。先把监听器创建出来:1. 创建InitDataList原创 2016-05-11 14:40:12 · 17022 阅读 · 6 评论 -
Spring加载properties文件的两种方式
我的个人博客站点:http://www.itcodai.com 在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动properties文件即可,不需要修改源代码,这样更加方便。在Spring中也可以这么做,而且Spring有两种加载properties文件的方式...原创 2016-05-10 19:47:56 · 188233 阅读 · 18 评论 -
谈谈Spring中的IOC和AOP概念
IOC和AOP是Spring中的两个核心的概念,下面谈谈对这两个概念的理解。---------------------------------------------------1. IOC(Inverse of Control):控制反转,也可以称为依赖倒置。 所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B。所谓倒置,原创 2016-04-07 22:19:05 · 84908 阅读 · 56 评论 -
Hibernate4.3在开发中的一些异常总结(持续更新)
这篇文章主要是记录Hibernate在开发中所出现的异常,方便以后查看~1.java.lang.NoSuchMethodError:javax.persistence.Table.indexes()[Ljavax/persistence/Index 这个异常是我在对实体类使用注解的时候发生的。从名称上看,是Hibernate做持久化的时候出现的异常,没有指定的方法,而且出现在原创 2016-04-28 14:15:35 · 3546 阅读 · 1 评论 -
Hibernate中1+N问题以及解决方法
1. Hibernate中的1+N问题描述 在多对一关系中,当我们需要查询多的一方对应的表的记录时,可以用一条sql语句就能完成操作。然而,在多的一方的实体类中的@ManyToOne标注的fetch的默认值是fetchType.EAGER,这时,hibernate除了发出查询多的一方对应的表的记录的sql语句外,还会发出n(多方记录数)条sql语句,这就是1+n问题。如原创 2016-05-05 13:38:39 · 10035 阅读 · 1 评论 -
Hibernate4执行save()或update()无效
最近在写网上商城项目时,遇到一个问题:Hibernate在执行save()或者update()方法后,并没有任何效果,数据库中没有任何改动,而且控制台也没有报任何错,这让我很无语…… 我在网上查了下,有的人说是主键的自增长问题,有的人说是没有开启事务,所以无法写入或更新数据库,我详细看了他们的分析,说的都有道理,但是这些解决方法对我都不管用,因为我的主键是没有问题的,事务是由Sp原创 2016-05-12 16:40:15 · 18522 阅读 · 3 评论 -
Struts2在打包json格式的懒加载异常问题
Hibernate中如果出现了级联查询,就可能出现懒加载问题,比如我现在有个Account(管理员)类、Category(商品类别)和Product(商品)类,从做到右都是一对多的关系,而且从右到左都是设置了@ManyToOne(fetch=FetchType.LAZY。我现在要把商品信息查出来打包成json格式传到前台,我在后台使用查询语句为:from Product p left join f原创 2016-05-13 12:35:44 · 5794 阅读 · 5 评论 -
Struts2在开发中的一些异常总结(持续更新)
本文主要记录struts2在开发中会遇到的一些问题或者异常,方便后面查阅。1. java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 这个异常很明显,没有找到filter,抛出来后令我很郁闷,因为我的web.xml文件中配置原创 2016-05-01 16:30:51 · 3832 阅读 · 0 评论 -
【SSH网上商城项目实战13】Struts2实现文件上传功能
上一节我们做完了添加和更新商品的功能,这两个部分里有涉及到商品图片的上传,并没有详细解说。为此,这篇文章详细介绍一下Struts2实现文件上传的功能。1. 封装文件信息 我们首先得有一个Model来封装文件的信息,这个Model里需要有三个属性:文件、文件类型和文件名。针对我们要传的图片,我们新建一个Model如下: public class Fil...原创 2016-05-14 12:45:16 · 18524 阅读 · 17 评论 -
【SSH网上商城项目实战09】添加和更新商品类别功能的实现
上一节我们做完了查询和删除商品的功能,这一节我们做一下添加和更新商品的功能。1. 添加商品类别1.1 添加类别的UI设计 我们先说一下思路:首先当用户点击“添加商品”时,我们应该弹出一个“添加商品”的UI窗口(注意这里不是跳转到新的jsp,EasyUI只有一个页面),弹出这个“添加商品”的窗口后,应该锁住它父类的所有窗口(即点击其他地方无效,只能操作添加商...原创 2016-05-10 12:57:41 · 14584 阅读 · 27 评论 -
【MyBatis学习04】mapper代理方法开发dao
上一篇博文总结了mybatis使用 原始dao的方法存在的一些弊端,我们肯定不会去用它,那么mybatis中该如何开发dao呢?如题所述,这篇博文主要来总结一下使用mapper代理的方法来开发dao的步骤。 使用mapper代理的方法来开发dao时,程序员只需要干两件事即可: 需要编写mapper.xml映射文件 需要编写mapper接口(相当于dao接口)原创 2016-06-11 19:20:23 · 13889 阅读 · 10 评论 -
【SpringMVC学习10】SpringMVC对RESTfull的支持
RESTful架构,就是目前流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。RESTful架构对url进行规范,写RESTful格式的url是什么样子的呢?我们一般请求的url是类似这样子的: http://...../xxx.action?id=001&type=aaa 而REST的url风格是什么样子呢?一般它类似于: http://原创 2016-06-26 20:21:58 · 13332 阅读 · 5 评论 -
【SpringMVC学习09】SpringMVC与前台的json数据交互
json数据格式在接口调用中、html页面中比较常用,json格式比较简单,解析也比较方便,所以使用很普遍。在springmvc中,也支持对json数据的解析和转换,这篇文章主要总结一下springmvc中如何和前台交互json数据。1. 两种交互形式springmvc和前台交互主要有两种形式,如下图所示: 可以看出,前台传过来的方式有两种,一种是传json格式的数据过来,另一种原创 2016-06-25 18:50:32 · 36127 阅读 · 16 评论 -
【SpringMVC学习08】SpringMVC中实现文件上传
之前有写过一篇struts2实现的文件上传,这一篇博文主要来总结下springmvc实现文件上传的步骤。首先来看一下单个文件的上传,然后再来总结下多个文件上传。1. 环境准备 springmvc上传文件的功能需要两个jar包的支持(点我下载),如下 2. 单个文件的上传2.1 前台页面 简单的写一下前台页面,注意一点的是form表单中别忘了写enctype="multip原创 2016-06-24 20:56:38 · 12568 阅读 · 4 评论 -
【MyBatis学习01】宏观上把握MyBatis框架
今天开始学习mybatis框架,博客主要记录学习过程中的一些总结,如有错误之处,欢迎留言指正~先用mybatis的鸟鸟来镇个楼,咳咳~~ mybatis框架是一个持久层框架,是Apache下的顶级项目。mybatis可以让开发者的主要精力放在sql上,通过mybatis提供的映射方式,自由灵活的生成满足需要的sql语句。MyBatis可以将向preparedStatement中的输入参数原创 2016-06-07 20:57:08 · 13366 阅读 · 19 评论