- 博客(37)
- 资源 (3)
- 收藏
- 关注
原创 自己实现一个spring-AOP思路
aop的加载顺序要在IOC加载的前面,即是要实例完代理类之后才在这个实例上注入属性。实现一个基于注解的aop: 1、定义一个切面注解 Aspect/** * 切面注解 */@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface Aspect { Class<...
2019-10-14 19:35:35
389
原创 自己实现一个spring-IOC思路
servlet :第一次访问,将访问init()方法,后面只会访问service()方法,如果在web.xml配置了<load-on-startup>将在容器启动时加载。实现一个依赖注入项目思路:在web.xml中配置一个servlet,路径可配置为/*,在容器启动的时候访问init(),在这个方法里可调用方法获取指定扫描路径下的class文件,包括jar包下的,保存到一个stat...
2019-10-13 17:34:34
222
原创 mybatis插件开发之 分页插件pagehelper调用原理
/** * Mybatis - 通用分页拦截器<br/> * 项目地址 : http://git.oschina.net/free/Mybatis_PageHelper * * @author liuzh/abel533/isea533 * @version 5.0.0 *///springboot集成pagehelper项目中的简单分页查询如下:@Overrid...
2019-10-13 12:59:31
473
原创 mybatis插件开发之 分页插件pagehelper调用原理
我们通常以这种方式去执行分页@Overridepublic PageInfo<SysUser> list(Integer pageNum, Integer pageSize) { PageHelper.startPage(pageNum,pageSize); List<SysUser> blogList = userMapper.selectAll();...
2019-10-13 12:59:11
150
原创 mybatis插件开发之 下画线键值转小写驼峰形式插件
在使用mybatis时,为了方便拓展而使用Map类型的返回值。使用Map作为返回值时,Map中的键值就是查询结果中的列名,而列名一般都是大小写字母或者下画线,和java中使用的驼峰形式不一致。而且由于不同数据库查询结果列名的大小写也并不一致,因此为了保证在使用Map时的属性一致。可以对Map类型的结果进行特殊处理,即将不同格式的列名转换为Java中的驼峰形式。配置:在mybaits-confi...
2019-10-13 12:58:49
435
原创 mybatis缓存-脏数据的产生和避免
二级缓存虽然能提高应用效率,减轻数据库服务器的压力,但是如果使用不当,很容易产生脏数据。这些脏数据会在不知不觉中影响业务逻辑,影响应用的实效,所以我们需要了解在MyBatis缓存中脏数据是如何产生的。也要掌握避免脏数据的技巧。 Mybatis的二级缓存是和命名空间绑定的,所以通常情况下每一个Mapper映射文件都拥有自己的二级缓存,不同mapper的二级缓存互不影响。在常见的数据库操作中,多...
2019-10-13 12:58:17
1203
原创 mybatis缓存-集成redis缓存
1、添加项目依赖<dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-redis</artifactId> <version>1.0.0-beta2</version></depen...
2019-10-13 12:57:57
229
1
原创 mybatis缓存-集成EnCache缓存
EhCache是一个纯粹的Java进程内的缓存框架,具有快速、精干等特点。具体来说,EnCache主要的特性如下。快速。简单。多种缓存策略。缓存数据有内存和磁盘两级,无须担心容量问题。缓存数据会在虚拟机重启的过程中写入磁盘。可以通过rmi、可插入API等方式进行分布式缓存。具有缓存和缓存管理器的侦听接口。支持多缓存管理器实例以及一个实例的多个缓存区域。...
2019-10-11 17:20:38
201
原创 mybatis缓存配置
使用缓存可以使应用更快地获取数据,避免频繁的数据库交互,尤其是在查询越多、缓存命中率越高的情况下,使用缓存的作用就越明显。mybatis作为持久化框架,提供了非常强大的查询缓存特性,可以非常方便地配置和定制使用。一般提到mybatis缓存的时候,都是指二级缓存。一级缓存(也叫本地缓存)默认会启用,并且不能控制。一级缓存: mybatis的一级缓存存在于sqlSession的生命周...
2019-10-11 17:10:13
257
原创 mybatis 自定义类型处理器
package tk.mybatis.simple.type;public enum Enabled { tow(2),//测试 enabled(1), //启用 disabled(0);//禁用 private final int value; private Enabled(int value) { this.value = value...
2019-10-11 16:00:15
203
原创 mybatis高级查询之 存储过程
<select id="selectUserById" statementType="CALLABLE" useCache="false"> {call select_user_by_id( #{id, mode=IN}, #{userName, mode=OUT, jdbcType=VARCHAR}, #{userPasswo...
2019-10-11 15:58:29
201
原创 mybatis高级查询之 鉴别器映射
有时一个单独的数据库查询会返回很多不同数据类型(希望有些关联)的结果集。discriminator鉴别器标签就是用来处理这种情况的。鉴别器跟Java语言中的switch语句很相似: discriminator标签常用的两个属性如下。 column:该属性用于设置要进行鉴别比较值的列。 javaType:该属性用于指定列的类型,保证使用相同的java类型来比较值。...
2019-10-11 15:54:50
218
原创 mybatis高级结果映射之 一对多映射
collection直接结果映射<resultMap id="userRoleListMap" extends="userMap" type="tk.mybatis.simple.model.SysUser"> <collection property="roleList" columnPrefix="role_" resultMap...
2019-10-11 15:32:59
207
原创 mybatis高级结果映射之 一对一映射
1、高级结果映射 1一对一映射 1.1.1 使用resultMap配置一对一映射 association标签的映射查询常用的属性如下。 property: 对应实体类中的属性名,必填项。 javaType:属性对应的Java类型。 resultMap:可以直接使用现有的resultMap,而不需要在这里配置。 columnPrefix:...
2019-10-11 15:26:35
421
原创 mybatis动态sql
mybatis的强大特性之一便是它的动态sql。使用过JDBC或其他类似框架的人都会知道,根据不同条件拼接SQL语句时不仅不能忘了必要的空格,还要注意省略掉列名列表最后的逗号,处理方式麻烦且凌乱。mybaits的动态SQL则能让我们摆脱这种痛苦。以下是mybatis的动态SQL在xml中支持的几种标签。 if choose(when,otherwise) trim(wh...
2019-10-11 14:50:30
210
原创 mybatis主要配置
mybatis核心配置文件是mybatis-config.xml,该文件配置了mybatis的全局信息,包含数据库连接信息和运行时所需的各种特效,以及设置和影响mybatis属性的一些配置。 文件结构:这些配置顺序是固定的。 configuration:配置 properties: 可以引用别的配置文件 settings :修改M...
2019-10-11 14:01:31
296
原创 什么是mybatis
mybatis 是一款优秀的支持自定义SQL语句,存储过程和高级映射的持久层框架。消除了几乎所有jdbc代码和参数的手动设置和结果集的检索。mybatis可以使用xml或注解进行配置和映射,mybatis通过将参数映射到配置的SQL形成最终的执行SQL语句,最后将执行SQL的结果映射成Java对象返回。 与其他的orm(对象关系映射)框架不同,mybatis并没有将Java对象与...
2019-10-11 10:59:55
465
原创 mybatis 使用selectKey返回主键的值示例
<insert id="insert" useGeneratedKeys="true" keyProperty="id"></insert>主键回填的方法只适用于支持主键自增的数据库(如mysql),有些数据库(如oracle)不提供主键自增的功能,而是使用序列得到一个值,然后将这个值赋给id,再将数据插入数据库。对于这种情况,可以采用另外一种方式:使用《select...
2019-10-07 15:32:37
627
原创 http协议
HTTP是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式传输:HTTP是一个在计算机世界里专门用来在两点之间传输数据的约定和规范 1、HTTP协议是一个“双向协议” 2、不限定两个角色,允许有中转或接力A<=>X<=>Y<=>Z<=>B...
2019-09-10 09:38:36
126
转载 idea设置maven项目的pom文件默认为jdk1.8版本
<!-- 让idea的maven项目-pom.xml文件变成jdk1.8的配置 --> <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> ...
2019-05-18 11:24:59
4451
6
转载 Java NIO原理图文分析及代码实现
前言:最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。可以参考:http://baike.baidu.com/view/32726.htm)机制时,发现hadoop的RPC机制的实现主要用到了两个技术:动态代理(动态代理可以参考博客:http://we...
2019-04-29 15:53:24
149
原创 多线程:Future和Callable结合使用案例
方法submit(Callable<T>)可以执行参数为Callable的任务方法get()用于获取返回值。项目中的案例代码:/** * 测试申请的测试任务列表 * @param testTask * @return */@RequestMapping("getList")public Result getList(TerminalTestTask testT...
2019-02-13 10:20:19
469
原创 iview表格自定义多选框
列中定义:{ title: '是否短信通知', key: 'isSmsnotify', render: (h, params) => { return h( 'div', this.$refs.myTable.$scopedSlots.smsnotifyCheckAction({ id: params.row.id }) ) ...
2018-09-27 15:04:45
5638
原创 iview 更新左侧菜单
基于iview-admin框架原理:原理比较简单,左侧菜单的路由列表是有<side-menu accordion ref="sideMenu" :active-name="$route.name" :collapsed="collapsed" @on-select="turnToPage" :menu-list="menuListActive">加载,menuLis
2018-08-27 17:34:32
8161
转载 itellij idea导入web项目并部署到tomcat
概述主要分为项目配置和tomcat配置两大步骤。 一、项目配置 打开idea,选择导入项 选择将要打开的项目路径后,继续选择项目的原本类型(后续引导设置会根据原本的项目类型更新成idea的项目),此例中选择Eclipse,然后一直next到底即可 File->Project Structure打开项目配置窗口 在Pro...
2018-08-24 17:04:26
208
原创 递归sql
微软递归sql语法:https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms175972%28v%3dsql.105%29with recursion(id,name,parent_id,path)AS( select id, name, parent_id, nam...
2018-07-30 15:22:39
166
原创 springboot 热部署,修改代码不重启
一、导入包,插件<!-- 热部署模块 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</
2018-05-30 10:58:05
3973
原创 如何快速判断一个数是否是素数
素数除了2,一定是质数,(2,3,5,7,11....)如果想判断一个数是否素数,可以反过来思考,什么的质数是合数规律:当一个素数加上这个素数*2的数一定是合数(n是素数,n+(n*2)*m ( m=1,2,3.....))例如 n=3时,3+3*2*1=9 3+3*2*2 = 15 3+3*2*3=21...n=5时,5+5*2*1=15 5+5*2*2=25....n=7时,7...
2018-05-02 18:26:16
6853
2
原创 rabbitMQ总结
rabbitMQ其实跟mysql等数据库差不多,都是需要通过url,账号,密码等去链接public static Connection getConnection() throws Exception { //定义连接工厂 ConnectionFactory factory = new ConnectionFactory(); //设置服务地址 factory.se...
2018-03-30 16:49:12
501
原创 秒杀系统个人总结
对于高并发的项目,处理原则是尽量在上游处理,优先级:客户端-》后端内存-》redis-》数据库;如果能在客户端处理的,尽量不交给tomcat,能在tomcat处理的,尽量不要交给redis,毕竟tomcat-redis也存在网络交互,能在redis处理的,尽量不交给数据库,一般高并发的瓶颈都是在数据库。 另外可以使用nignx做负载均衡,横向扩展处理服务器,这时sessio...
2018-03-30 11:07:22
584
原创 Spring单例模式与线程安全
Spring框架里的bean,或者说组件,获取实例的时候都是默认的单例模式,这是在多线程开发的时候要尤其注意的地方。 单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。当多用户同时请求一个服务时,容器会给每一个请求分配一个线程,这是多个线程会并发执行该请求多对应的业务逻辑(成员方法),此时就要注意了,如果该处理逻辑中有对该单...
2018-03-20 11:15:52
184
原创 mysql分表 MERGE存储引擎
创建的子表 :xx可以替换成具体的值 ENGINE = MyISAM; 一定要写CREATE TABLE log_xx ( dt DATETIME NOT NULL, info VARCHAR(100) NOT NULL, INDEX (dt) ) ENGINE = MyISAM; 创建的主表:CREATE TABLE log_merge ( dt DA...
2018-03-16 09:02:55
250
原创 监听器的作用
通常使用Web监听器做以下的内容: 1,统计在线人数 利用HttpSessionLisener 2,加载初始化信息 利用ServletContextListener 3,统计网站访问量 利用HttpRequestLisener 4,实现访问监控 利用HttpRequestLisener1、统计在线人数public
2018-01-16 11:30:08
909
原创 用 Comparator 实现排序
Interface Comparator对任意类型集合对象进行整体排序,排序时将此接口的实现传递给Collections.sort方法或者Arrays.sort方法排序。实现int compare(T o1, T o2);方法,返回正数,零,负数各代表大于,等于,小于。import java.util.Comparator;public class CaseTe
2018-01-09 16:18:25
320
转载 表单内容太大导致后台获取不了解决
通过POST方式提交数据量过大,在后台接收不到数据,POST没有数据限制,查看代码发现确实是POST提交,问题出在哪里了呢?通过查看资料,发现tomcat默认传输最大的数据限制为2M,最后的解决办法是设大tomcat的conf下的server.xml中8080Connector的maxPostSize的值.(设为0是取消POST的大小限制)打开tomcat目录下的conf目录,修改serv
2018-01-05 16:59:05
3376
原创 mybatis 主键回填
如果数据库中主键自增:keyProperty网上包括书本写的都是id(坑了几个小时)(如果传的是一个Specification对象,要写成spec.specid) public int add(@Param("spec") Specification spec); INSERT into specification(userid,name,type,version
2017-12-27 16:46:31
880
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人