插件简介
PageHelper
与通用 Mapper
作者为同一人 abel533 ,使用这两个插件可以极大地简化 MyBatis
的开发,如果你想深入了解Mybatis以及插件开发可以购买作者的书籍。
分页插件 PageHelper
GitHub地址:https://github.com/pagehelper/Mybatis-PageHelper
如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件
在没有分页插件之前,写一个分页需要两条 SQL
语句,一条查询一条统计,然后计算封装 PageBean
,这样的代码冗余而又枯燥,更重要的一点是数据库迁移,众所周知不同的数据库分页写法是不同的,而Mybatis
不同于 Hibernate
的是它只提供动态 SQL
和结果集映射。值得庆幸的是,它虽然没有为分页提供良好的解决方案,但却提供了 Interceptor
以供开发者自己扩展,这也是这款分页插件的由来….
通用Mapper
GitHub地址:https://github.com/abel533/Mapper/ 文档地址:https://github.com/abel533/Mapper/wiki gitee地址:https://gitee.com/free/Mapper
通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。
极其方便的使用MyBatis单表的增删改查。
支持单表操作,不支持通用的多表联合查询。
添加依赖
org.springframework.boot
spring-boot-starter-web
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
tk.mybatis
mapper-spring-boot-starter
2.0.3
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.5
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-devtools
true
org.springframework.boot
spring-boot-starter-test
test
相关配置
spring:
application:
name: spring-boot-mbg
datasource:
url: jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false
username: root
password: mysql123
driver-class-name: com.mysql.jdbc.Driver
mybatis:
config-location: classpath:mybatis/mybatis-config.xml # mybatis配置文件位置
mapper-locations: classpath:mybatis/mappers/*.xml # mapper映射文件位置
type-aliases-package: com.example.springbootmybatis.entity # 别名包
mapper:
mappers:
- com.example.springbootmbg.common.MyBaseMapper
identity: MYSQL # 取回主键的方式 MYSQL: SELECT LAST_INSERT_ID()
order: AFTER # 还可设置为 mapper.before = false
not-empty: true # insertSelective 和 updateByPrimaryKeySelective 中,是否判断字符串类型 !=''
style: camelhumpAndLowercase # 实体和表转换时的默认规则:驼峰转下划线小写形式
enableMethodAnnotation: true # 是否支持(getter 和 setter)在方法上使用注解,默认false
enumAsSimpleType: true # 枚举类型当成基本类型对待
pagehelper:
helper-dialect: mysql
reasonable: false
support-methods-arguments: true
params: count=countSql
# mybatis sql日志
logging:
level:
com:
example:
springbootmbg:
mapper: debug
属性解释
通用Mapper
通用Mapper
属性配置上面的注释已经很清楚了,这里不再做过多解释,唯一一点是 mappers
配置的是自定义的 MyBaseMapper
接口,具体下面介绍。 更多 通用Mapper
属性配置可参考官方文档 3.配置介绍部分
PageHelper
helperDialect
:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置 helperDialect
属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值: oracle
, mysql
, mariadb
, sqlite
, hsqldb
, postgresql
, db2
, sqlserver
, informix
, h2
, sqlserver2012
, derby
特别注意:使用 SqlServer2012
数据库时,需要手动指定为 sqlserver2012
,否则会使用 SqlServer2005
的方式进行分页。
reasonable
:分页合理化参数,默认值为 false
,直接根据参数进行查询 。当该参数设置为 true
时,pageNum<=0
时会查询第一页, pageNum>pages
(超过总数时),会查询最后一页。
supportMethodsArguments
:支持通过 Mapper
接口参数来传递分页参数,默认值 false
,分页插件会从查询方法的参数值中,自动根据上面 params
配置的字段中取值,查找到合适的值时就会自动分页。 使用方法可以参考测试代码中的 com.github.pagehelper.test.basic
包下的 ArgumentsMapTest
和 ArgumentsObjTest
。
params
:为了支持 startPage(Object params)
方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum
, pageSize
, count
, pageSizeZero
, reasonable
,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
。
更多 PageHelper
属性配置可参考官方使用方法部分
MyBatis sql日志
对于 MyBatis sql
日志可以像上面那样在 application.yml
文件中配置,但在项目中往往使用 logback
日志框架,因此可以在 logback-spring.xml
配置文件中添加如下 logger
MyBatis配置文件 mybatis-config.xml
src/main/resource/mybatis/mybatis-config.xml
Spring DevTools 配置
在使用 DevTools
时,通用Mapper
经常会出现 class x.x.A cannot be cast to x.x.A。
同一个类如果使用了不同的类加载器,就会产生这样的错误,所以解决方案就是让 通用Mapper
和实体类使用相同的类加载器即可。
DevTools
默认会对 IDE
中引入的所有项目使用 restart 类加载器
,对于引入的 jar
包使用 base 类加载器
,因此只要保证 通用Mapper
的 jar
包使用 restart 类加载器
即可。
在 src/main/resources
中创建 META-INF
目录,在此目录下添加 spring-devtools.properties
配置,内容如下:
restart.include.mapper=/mapper-[\\w-\\.]+jar
restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar
使用这个配置后,就会使用 restart 类加载器
加载 include
进去的 jar
包。
以上 Spring DevTools 配置
内容引自官方Spring 集成示例——集成Spring Boot部分
通用Mapper MBG代码生成
Maven集成MBG插件
pom.xml
org.springframework.boot
spring-boot-maven-plugin
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.6
${basedir}/src/main/resources/generator/generatorConfig.xml
true
true
mysql
mysql-connector-java
5.1.46
tk.mybatis
mapper
4.0.0
MBG配置文件
详细配置参数可参考http://git.oschina.net/free/Mybatis_Utils/blob/master/MybatisGeneator/MybatisGeneator.md 和官方文档 4.1专用代码生成器部分在此不作过多解释
src/main/resources/generator/generatorConfig.xml
标签需要根据数据库表自行增添
com.example.springbootmbg.common.MyBaseMapper
package com.example.springbootmbg.common;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
public interface MyBaseMapper extends Mapper, MySqlMapper {
//TODO
//FIXME 特别注意,该接口不能被扫描到,否则会出错
}
很简单的一个接口,继承了 通用Mapper
提供的 tk.mybatis.mapper.common.Mapper
及tk.mybatis.mapper.common.MySqlMapper
接口,MBG
生成的 Mapper
接口都会继承这个接口,从而间接继承前面提到的两个接口,从而获得 通用Mapper
的魔力(其实就是获得了一系列 通用Mapper
提供的单表增、删、改、查方法而已),具体方法可以查看那两个接口。
扫描Mapper接口所在的包
需要在启动类上添加 @MapperScan
注解,但请注意这个注解不是 MyBatis
提供的 org.mybatis.spring.annotation.MapperScan
而是 通用Mapper
提供的 tk.mybatis.spring.annotation.MapperScan
package com.example.springbootmbg;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan(basePackages = {"com.example.springbootmbg.mapper"})
public class SpringBootMbgApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootMbgApplication.class, args);
}
}
注意 :这里有个坑就是这个自定义 MyBaseMapper
接口不能被扫描到,否则会报错,因此上面将该接口放在了别的包下。
不嫌麻烦的话可以去 MBG
生成的每个 Mapper
接口上添加 @Mapper
注解
使用MBG生成实体类、Mapper接口及xml映射文件
在项目 Maven
插件中找到 mybatis-generator
插件,点击 mybatis-generator:generate
一下就可以了,如果数据库连接信息配置正确的话,不出意外就会顺利在配置的目录下生成对应的实体类、Mapper接口及xml映射文件啦。
为示例这里创建一张用户表
CREATE TABLE `tb_user` (
`id` varchar(64) NOT NULL COMMENT '用户id',
`username` varchar(64) NOT NULL COMMENT '用户名',
`password` varchar(64) NOT NULL COMMENT '用户密码',
`face_icon` varchar(255) DEFAULT NULL COMMENT '用户头像',
`nickname` varchar(64) NOT NULL COMMENT '用户昵称',
`fans_counts` int(11) DEFAULT '0' COMMENT '用户粉丝数',
`follow_counts` int(11) DEFAULT '0' COMMENT '关注其他用户数',
`receive_like_counts` int(11) DEFAULT '0' COMMENT '收到的喜欢数目',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';
生成的代码大致像下面这样
com.example.springbootmbg.entity.user
package com.example.springbootmbg.entity;
import java.util.Date;
import javax.persistence.*;
@Table(name = "tb_user")
public class User {
/**
* 用户id
*/
@Id
private String id;
/**
* 用户名
*/
private String username;
/**
* 用户密码
*/
private String password;
/**
* 用户头像
*/
@Column(name = "face_icon")
private String faceIcon;
/**
* 用户昵称
*/
private String nickname;
/**
* 用户粉丝数
*/
@Column(name = "fans_counts")
private Integer fansCounts;
/**
* 关注其他用户数
*/
@Column(name = "follow_counts")
private Integer followCounts;
/**
* 收到的喜欢数目
*/
@Column(name = "receive_like_counts")
private Integer receiveLikeCounts;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
/**
* 更新时间
*/
@Column(name = "update_time")
private Date updateTime;
// setters and getters
}
通用Mapper
会用到 Jpa
的几个简单注解,这里不做解释
com.example.springbootmbg.mapper.UserMapper
package com.example.springbootmbg.mapper;
import com.example.springbootmbg.common.MyBaseMapper;
import com.example.springbootmbg.entity.User;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper extends MyBaseMapper {
}
生成的代码不带 @Repository
注解
src/main/resource/mybatis/mappers/UserMapper.xml
测试
com.example.springbootmbg.mapper.UserMapperTest
package com.example.springbootmbg.mapper;
import com.example.springbootmbg.entity.User;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
private static final Logger logger = LoggerFactory.getLogger(UserMapperTest.class);
@Test
public void testInsert() {
User user = new User();
user.setId(UUID.randomUUID().toString().replaceAll("-", ""));
user.setUsername("aaa");
user.setPassword("123456");
user.setNickname("aaa");
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
userMapper.insertSelective(user);
User user2 = new User();
user2.setId(UUID.randomUUID().toString().replaceAll("-", ""));
user2.setUsername("bbb");
user2.setPassword("123456");
user2.setNickname("bbb");
user2.setCreateTime(new Date());
user2.setUpdateTime(new Date());
userMapper.insertSelective(user2);
}
@Test
public void testPage() {
PageHelper.startPage(1, 10);
List userList = userMapper.selectAll();
PageInfo pageInfo = new PageInfo<>(userList);
logger.info("pageInfo: {}", pageInfo);
}
}
你可能感兴趣的:(SpringBoot学习笔记八:分页插件、通用Mapper及MBG的集成)
python-pptx生成PPT报告
雪夜行人
python模块使用心得 python powerpoint
文章目录前言一、python-pptx是什么?二、生成PPT的解决方案三、修改文本框的文本内容四、修改统计图表的数据五、删除元素六、删除某一页PPT总结前言存在这样一个需求,需要使用数据渲染生成一个PPT报告。经过一番查询,笔者决定使用python-pptx来完成这个需求。python-pptx作为一个功能强大的第三方库,完全可以满足笔者的需求。一、python-pptx是什么?python-pp
《孙子兵法》如何才能做到谋定而后动
墨非_II
每个人的时间的精力(资源)都是有限的(包括企业组织或者国家),所以我们只能在有限的条件下达到最大限度的目的,而且选择最有利的方案,那么如何才能做到呢?——谋定而后动。孙子曰:“夫未战而庙算胜者,得算多也;未战而庙算不胜者,得算少也。多算胜少算,而况于无算乎!”在做一件事情之前进行周详严密的分析和策划,需要判断这件事情的可能性,可能性越大越容易成果,可能性越小,成功的概率就会越小。如果你考都不考虑就
2018-8-12工作日记
杰出的人
今日总结姓名:曾杰工作内容:双流主城区拜访客户。工作结果:今天主要是拜访之前没有去过的客户。早上去联系了两个之前送过水的客户,让他们签了个字,确认已经送过水。然后再聊了聊一些公司最近的活动和政策,对于毛刷是要进货才送的,所以我鼓励他们进货,这样送了毛刷搭配起来也更好卖一些。聊天过程中发现他们对陈列奖励比较关心,经常问我什么时候把这个月的奖励产品送过来,有一家已经做了三个月的陈列,但是货才卖出去2桶
毛姆 | 在爱上帝的名义下,人类能干出多么残忍的事
众园
“笃信宗教的人心里也总是惦记着享乐,享乐主义对他们的影响绝不亚于对纯粹享乐主义者的影响,只不过,前者认为对现世行为的奖励是来世幸福,而非现世欢愉。事实上,那些选择某一途径以便享受永恒幸福的人,他们身上的享乐主义痕迹是最明显的。而且,如果仔细研究他们心目中的永恒幸福,常常会发现其中物欲横流、粗鄙卑下,连许多公开的享乐主义者都会羞于承认自己有这样的想法。”——毛姆我很高兴自己并不信仰上帝。当看到世界的
误入 | 一个办公区为什么开了7家大型饮品店?
白白长大
今天是周末,趴在床上读完了《文学回忆录》的最后一节,突然很想喝新鲜现磨的咖啡,在大众点评上查找了一家评分8.8的咖啡厅,我就换上衣服出门前往了。从家骑行到这家咖啡厅地图显示有4.5KM的距离。在这4.5KM的距离里,我路过了极具生活气息的居民区,路过了种满林荫大树的公园,然后就进入了几幢写字楼耸立的地方。导航显示咖啡厅就在这附近,这时一个站在大楼门口的保安向我招手示意,让我把自行车停到靠近马路的人
VS Code 调试带标准输入的 Golang 程序
编号41734362
VSCode调试带标准输入的Golang程序操作系统:Ubuntu18.04LTSVSCode版本:1.44.2Go插件版本:ms-vscode.go0.14.1最近被迫接触Go,使用VSCode进行常规调试时(打断点,直接F5),发现无法在DebugConsole里进行标准输入操作(直接EOF)。网上查了半天,才找到几个解决方法。记录如下。插件的安装方法就不赘述了,百度都有仅供参考,请结合实际情
012 椿响
少女椿mia
1.文章不能硬写,得软写。2.自私真的在文明史上具有重要的地位。古代文明在承认私利合理性的道路上走向民主和进步。现代文明进步需要人们在公私博弈中更多选择功利放弃一部分私利。3.椿绝对不为自己说的话负责。因为椿自己也记不清了。4.居然又下雪了?期待明天。
钱是理想的魔咒?为人类造福的openAI十亿美元卖身商业资本
机智客
OpenAI是如何因为10亿美元出卖自己的灵魂的文章在Reddit上刷爆了。有句经典的话叫做,欲戴王冠,必承其重。可能用在AI领域的OpenAI身上再适合不过了,OpenAI这个曾经以“为人类造福”伟大宗旨为信条的非营利组织,营利了。这大概可能就是诠释了野心越大,可能相应的成本和之后的代价就越大。曾经,OpenAI定位非营利组织,要以安全的方式实现通用人工智能,用技术的方式为人类整体谋福,让人类平
《惹火》王思媛张笑&全集目录在线阅读
寒风书楼
《惹火》王思媛张笑&全集目录在线阅读主角:王思媛张笑简介:我是一个妇人,那年我一念沉沦,最终走错了路……关注微信公众号【寒风书楼】去回个书号【207】,即可阅读【惹火】小说全文!王思媛今年27岁,已经结婚六年,但风韵犹存,由于工厂倒闭,她失业了,进了邻居家的饭店工作。今天是第一天上班,王思媛正在上菜,由于客人太多了,想借个道都十分困难,所以就只能站在原地等待。前面的路已经通了,她急忙往前走了一步,
通过AI来创建一个_____html css网页制作成品 例子演示
数码小沙
html
使用AI输入创建一个htmlcss网页制作成品例然后出来好的,我将为您创建一个简单的HTML和CSS网页制作的示例。这个示例将包括基本的布局、文本样式和一些内联的CSS样式。{"name":"dalle","description":"AsimpleexampleofafinishedHTMLandCSSwebpage,featuringacleanlayoutwithaheader,naviga
职场友谊到底存不存在?
刘生1993
职场友谊到底存不存在,人们的看法很不一样,有人觉得“同事朋友应该分开,工作不要谈友谊”,也有人觉得职场上是可以交朋友的。今天的文章试图来回答这两个两个问题,究竟有没有职场友谊,以及职场友谊究竟有多大价值。首先职场友谊肯定存在。因为这是人与人之间的事情。而这种涉及双重身份的人际交往可以称为“多元关系”。简单直白一点说如果你和同事每天一起加班,一起吃饭,一起吐槽,其实你们已经是很近的朋友了。其次,职场
我的松林
凌枫夕颜
阳光穿透云层在松林射下斑驳的光影松烟袅袅经幡飘扬松林深处我的族人们盘膝而坐分享着自己带来的酒水,吃食女人们讨论着庄稼的长势男人们在互相打趣孩子们在一旁嬉戏那欢笑嬉闹声久久飘荡在松林里画面开始模糊倒退风停了云散了天黑了松烟不见了嬉闹的人群消失了松树一棵一棵挣扎着倒下我努力张开怀抱想抱住下坠的松叶可是我的怀里只有风呼啸而过我双膝跪地双手合十拼命磕头可是我的松林已无迹可寻我从梦中哭喊着醒来才发现已经有多
每日分享一句话④(价值,劳动)
成精的小奥
爱迪生说过,世间没有一种具有真正价值的东西,可以不经过艰苦辛勤的劳动而能够得到的。世界本就不公平,所以我们想要通过努力,在我们的职责范围内,让世界公平那么一点点。有的人生来就已经达到了这辈子你永远都达不到的巅峰,而你要拼了命的去努力,去挣钱,才能实现你想要的!
坚决抵制恶俗闹婚
心存浪漫
闹婚又称“闹新娘”或者“闹洞房,”是我国的传统习俗之一。在很多地方都很流行,主要是在新人结婚当天增加点喜庆气氛,有“喜上加喜,越闹越喜”的意思。适度的闹婚确实可以活跃婚礼现场的气氛,为婚礼锦上添花,可是当闹婚超越了应有的界限,那么闹婚就演变成一种恶俗,成为“伤风败俗”的代名词,这必然会给喜庆的婚礼蒙上阴影。近年来,各种奇葩的闹婚不绝于耳,什么泼墨水、泼面粉、殴打、牵狗绳这些似乎成了小儿科,好像不把
鸿蒙轻内核A核源码分析系列七 进程管理 (2)
OpenHarmony_小贾
HarmonyOS 鸿蒙开发 OpenHarmony harmonyos OpenHarmony 移动开发 驱动开发 鸿蒙内核 LiteOS-A内核 进程通信
本文先熟悉下进程管理的文件kernel\base\core\los_process.c中的内部接口,读读代码,做些记录。1、LiteOS-A内核进程全局变量⑴是进程池,存放各个进程控制块LosProcessCB的信息。⑵处开始的g_freeProcess是空闲进程链表,挂载各个空闲进程控制块;g_processRecycleList是待回收进程控制块链表,挂载各个等待回收的进程控制块。⑶处开始的g
何扰其情?
纵情嬉戏天地间
何扰其情?近来时常看到情绪失控的人的事!不为过,但,频率过急过密,有碍生命的价值意义!喜怒哀乐皆由情生,万物有情,非人独有,情之狭隘,绪必淤堵,必伤人身,身之不存不畅,以何解机?情为河道,绪为湍流,相缚相生,奔流到海!筑坝引流,人心工程,鲁莽不得!见万物,见天地,都不如见自己,解决不了自己,天地万物,与你又有什么关系?你非实有,非虚无,哪里是你?哪里又不是你?什么是你?什么又不是你?什么可喜?什么
鸿蒙原生开发——轻内核A核源码分析系列三 物理内存(2)
OpenHarmony_小贾
鸿蒙开发 HarmonyOS OpenHarmony harmonyos openharmony 移动开发 程序人生 鸿蒙开发
3.1.2.3函数OsVmPhysLargeAlloc当执行到这个函数时,说明空闲链表上的单个内存页节点的大小已经不能满足要求,超过了第9个链表上的内存页节点的大小了。⑴处计算需要申请的内存大小。⑵从最大的链表上进行遍历每一个内存页节点。⑶根据每个内存页的开始内存地址,计算需要的内存的结束地址,如果超过内存段的大小,则继续遍历下一个内存页节点。⑷处此时paStart表示当前内存页的结束地址,接下来
SAP HANA
makaitai
BW sap 数据库 工具 报表 layer 服务器
原文地址:http://LiuAlex.com/archives/1776也是刚刚开始学习HANA的一些知识,一边看书一遍做笔记,说到底无非是用自己的语言来理解标准帮组文档所讲解的意思,肯定有理解失误的地方,毕竟没有参加过标准培训,即使有培训,从老师那边来的知识也不可能是完整的传授过来,中间多少的知识遗漏是正常的,所以多看看HELP的文档,应该可以原汁原味的理解作者的意思。这张图片是从SAPHAN
2022-10-08
感恩学习相信小陶
感恩!六点签到视觉化的图景是一种想象的形式;这种思维的过程形成了心灵上的印记,这些印记又形成了观念和理想,这些观念和理想又形成了计划,伟大的计划。在心灵中绘制一幅成功的图画吧,有意识地视觉化你的愿望;在心中抱持一个理想,直到你心中的幻影变得清晰起来。如果我们忠实于自己的理想图景的话,就要加快迈向成功的步伐,通过科学的手段实现它。
class A中的static A a
Lei宝啊
C++ 开发语言 c++
个人主页:Lei宝啊愿所有美好如期而遇下面的代码是可行的吗?classA{private:Aa;};显而易见,不可行,会引发无限递归的构造,如果我们希望能够在类中有某种形式的自引用,可以使用静态成员变量,就像这样:classA{private:staticAa;};AA::a;那么也许你会有疑问:静态的就不会有无限递归的构造吗?静态的Aa内部不会再有静态的Aa吗?那么首先我们就要明白,静态成员变量
随身wifi哪个牌子网速好?盘点网速好的便携随身wifi品牌
好项目高省
面对市面上各种各样的随身WIFI,很多人无从下手,各种随身WIFI品牌更是琳琅满目。因为工作性质,经常出差,有时候视频会议,晚上比较喜欢看个电影。每个月的流量费用不是几十g能解决的,所以我入手了几款随身WIFI。因为一开始没有任何挑选的经验,所以选了几个劣质的WIFI设备,网速慢的让人不知所措。算了算,这些年来,我买过5个不同类型的随身WiFi,用过20多个带卡和不带卡的随身WIFI,对随身WIF
89、 pod的控制器
ly1435678619
kubernetes k8s 容器
一、pod的控制器:pod的控制器:工作负载workload介于k8s集群和节点之间。中间层。确保pod资源符合预期的状态。pod资源出现故障的时候,会自动重启。对基于控制器创建的pod,deletepod相当于对pod的重启,并不能删除pod必须要把控制器删除,pod也会自动删除1.1、pod的控制器的类型:1、replicas1、replicas:结合控制器一块,控制副本数量。2、Deploy
90、k8s之secret+configMap
ly1435678619
kubernetes linux 容器
一、secret配置管理配置管理:加密配置:保存密码,token,其他敏感信息的k8s资源应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器1.1、加密配置:secret:[root@master01~]#kubectlgetsecrets##查看加密配置[root@master01~]#kubectlgetsecrets-nkube-system##查看加密
85、 探针
ly1435678619
kubernetes 容器 云原生
一、pod的进阶pod的进阶:1.1、pod的生命周期当中的状态:1、Running运行中,pod已经分配到节点上且pod内的容器正常运行。正常状态(ready1/1)。2、complete:完成之后退出,容器内的返回码是0,echo$?(表示容器正常运行结束)3、pending:挂起状态,pod已经创建好了,但是没有被分配到节点上。面试题:出现pending状态如何解决?1、节点上的资源不足ng
回老家
d57f46e76c6a
图片发自App今天下午,爸爸开车带我回老家,在开车的路上,我想着奶奶到了老家,奶奶正坐在凳子上一边看电视剧,一边摘菜,。我主动的给奶奶捶捶背,奶奶。夸我,我很开心,我说这是我应该做的,以后我会常回来看你的,我们相互看着对方,开心地笑了。图片发自App
两枚硬币
程拾一
图片发自App在热闹的超市里三三两两家人团聚你站在人群里显得那么的孤寂两个馒头一袋面筋计算着卡里余额是否支付得起长长的队伍终于排到你营业员面无表情的说着对不起你退了面筋从兜里翻出两枚硬币手里紧攥着两个馒头黯然离去我目送你消失在节日的氛围里大胆的想象着你内心无声的哭泣在这热闹的人群里来来往往的人们摩肩接踵相遇离去命运重复地体会着现实的拮据过了二十出头的年纪念着故乡终是触不可及在这无情的世界里忙忙碌碌
2022-01-02
明月天涯_3abc
以前我对你的喜欢,是想看你,想见你,想陪你,现在对你的喜欢,是不敢看,不敢问,不敢打扰。以前的你是心事,现在的你是故事。————三毛
班级管理杂谈(老王唠教育)之221
东哥杂谈
班级管理杂谈之221(0112)小高是黄老师班上的一名外来务工人员子女。这个学生性格较内向、为人纯朴,但生性懒惰、害怕吃苦,对学习无兴趣,课堂上能遵守纪律,但注意力不集中,一直昏昏沉沉、无精打采,老是趴在课桌上,不肯写作业,是班里的后进生。黄老师多次做小高工作,效果并不大。与家长电话沟通几次,也没有什么作用。于是黄老师决定家访,进一步了解小高家的情况,建立起家校沟通的渠道,共同解决小高的问题。家访
一会儿是多久
叶家小七
平时我们总会觉得没有时间去读书学习。而我们总是认为学习或读书需要在一个相对较长的时间进行,可能是一天或者一个月,甚至更久。但事实并非如此,我们只需要把生活中的一点一滴的时间都利用起来。因为成年人的世界,很少能拥有大把的自主学习的时间,这就需要利用零散时间去学习,去成长。我们可以利用平时的五分十分二十分去读书、学习。这就像小孩子把硬币和零钱一点点存起来一样,我们每天把零散时间运用起来去学习、读书,一
悟纳合聚成爱之<<成>>第十五届"金钱智慧"经典语录
大鸿小姐姐
悟纳合聚成爱之>第十五届"金钱智慧"当"爱"满了,内在自然就充裕了!从向外抓取,到内在丰盛富足;从有限到无限,是一个爱满自溢的过程!"从向外抓取,到内在丰盛富足;从有限到无限,是一个爱满自溢的过程!真正的丰盛富足,是内在的"爱"满了。与你互动的任何一个人,都将成为你达成目标路上很重要的资源看到ta,心里有ta的位置,还要关注ta的需求!成功与你是否愿意成全别人有关系!跪谁谁就是你的贵人!在越亲近的
jQuery 键盘事件keydown ,keypress ,keyup介绍
107x
js jquery keydown keypress keyup
本文章总结了下些关于jQuery 键盘事件keydown ,keypress ,keyup介绍,有需要了解的朋友可参考。
一、首先需要知道的是: 1、keydown() keydown事件会在键盘按下时触发. 2、keyup() 代码如下 复制代码
$('input').keyup(funciton(){  
AngularJS中的Promise
bijian1013
JavaScript AngularJS Promise
一.Promise
Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。
为了展示它的优点,下面来看一个例子,其中需要获取用户当前的配置文件:
var cu
c++ 用数组实现栈类
CrazyMizzz
数据结构 C++
#include<iostream>
#include<cassert>
using namespace std;
template<class T, int SIZE = 50>
class Stack{
private:
T list[SIZE];//数组存放栈的元素
int top;//栈顶位置
public:
Stack(
java和c语言的雷同
麦田的设计者
java 递归 scaner
软件启动时的初始化代码,加载用户信息2015年5月27号
从头学java二
1、语言的三种基本结构:顺序、选择、循环。废话不多说,需要指出一下几点:
a、return语句的功能除了作为函数返回值以外,还起到结束本函数的功能,return后的语句
不会再继续执行。
b、for循环相比于whi
LINUX环境并发服务器的三种实现模型
被触发
linux
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。
1 循环服务器与并发服务器模型
在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。
目前最常用的服务器模型有:
·循环服务器:服务器在同一时刻只能响应一个客户端的请求
·并发服务器:服
Oracle数据库查询指令
肆无忌惮_
oracle数据库
20140920
单表查询
-- 查询************************************************************************************************************
-- 使用scott用户登录
-- 查看emp表
desc emp
ext右下角浮动窗口
知了ing
JavaScript ext
第一种
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/
浅谈REDIS数据库的键值设计
矮蛋蛋
redis
http://www.cnblogs.com/aidandan/
原文地址:http://www.hoterran.info/redis_kv_design
丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。
maven编译可执行jar包
alleni123
maven
http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven
<build>
<plugins>
<plugin>
<artifactId>maven-asse
人力资源在现代企业中的作用
百合不是茶
HR 企业管理
//人力资源在在企业中的作用人力资源为什么会存在,人力资源究竟是干什么的 人力资源管理是对管理模式一次大的创新,人力资源兴起的原因有以下点: 工业时代的国际化竞争,现代市场的风险管控等等。所以人力资源 在现代经济竞争中的优势明显的存在,人力资源在集团类公司中存在着 明显的优势(鸿海集团),有一次笔者亲自去体验过红海集团的招聘,只 知道人力资源是管理企业招聘的 当时我被招聘上了,当时给我们培训 的人
Linux自启动设置详解
bijian1013
linux
linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。
阅读之前建议先看一下附图。
本文中假设inittab中设置的init tree为:
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc
Spring Aop Schema实现
bijian1013
java spring AOP
本例使用的是Spring2.5
1.Aop配置文件spring-aop.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmln
【Gson七】Gson预定义类型适配器
bit1129
gson
Gson提供了丰富的预定义类型适配器,在对象和JSON串之间进行序列化和反序列化时,指定对象和字符串之间的转换方式,
DateTypeAdapter
public final class DateTypeAdapter extends TypeAdapter<Date> {
public static final TypeAdapterFacto
【Spark八十八】Spark Streaming累加器操作(updateStateByKey)
bit1129
update
在实时计算的实际应用中,有时除了需要关心一个时间间隔内的数据,有时还可能会对整个实时计算的所有时间间隔内产生的相关数据进行统计。
比如: 对Nginx的access.log实时监控请求404时,有时除了需要统计某个时间间隔内出现的次数,有时还需要统计一整天出现了多少次404,也就是说404监控横跨多个时间间隔。
Spark Streaming的解决方案是累加器,工作原理是,定义
linux系统下通过shell脚本快速找到哪个进程在写文件
ronin47
一个文件正在被进程写 我想查看这个进程 文件一直在增大 找不到谁在写 使用lsof也没找到
这个问题挺有普遍性的,解决方法应该很多,这里我给大家提个比较直观的方法。
linux下每个文件都会在某个块设备上存放,当然也都有相应的inode, 那么透过vfs.write我们就可以知道谁在不停的写入特定的设备上的inode。
幸运的是systemtap的安装包里带了inodewatch.stp,位
java-两种方法求第一个最长的可重复子串
bylijinnan
java 算法
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MaxPrefix {
public static void main(String[] args) {
String str="abbdabcdabcx";
Netty源码学习-ServerBootstrap启动及事件处理过程
bylijinnan
java netty
Netty是采用了Reactor模式的多线程版本,建议先看下面这篇文章了解一下Reactor模式:
http://bylijinnan.iteye.com/blog/1992325
Netty的启动及事件处理的流程,基本上是按照上面这篇文章来走的
文章里面提到的操作,每一步都能在Netty里面找到对应的代码
其中Reactor里面的Acceptor就对应Netty的ServerBo
servelt filter listener 的生命周期
cngolon
filter listener servelt 生命周期
1. servlet 当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后调用它的service方法处理请求。当第二次请求这个servlet资源时,servlet容器就不在创建实例,而是直接调用它的service方法处理请求,也就是说
jmpopups获取input元素值
ctrain
JavaScript
jmpopups 获取弹出层form表单
首先,我有一个div,里面包含了一个表单,默认是隐藏的,使用jmpopups时,会弹出这个隐藏的div,其实jmpopups是将我们的代码生成一份拷贝。
当我直接获取这个form表单中的文本框时,使用方法:$('#form input[name=test1]').val();这样是获取不到的。
我们必须到jmpopups生成的代码中去查找这个值,$(
vi查找替换命令详解
daizj
linux 正则表达式 替换 查找 vim
一、查找
查找命令
/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
字符串匹配
pattern是需要匹配的字符串,例如:
1: /abc<En
对网站中的js,css文件进行打包
dcj3sjt126com
PHP 打包
一,为什么要用smarty进行打包
apache中也有给js,css这样的静态文件进行打包压缩的模块,但是本文所说的不是以这种方式进行的打包,而是和smarty结合的方式来把网站中的js,css文件进行打包。
为什么要进行打包呢,主要目的是为了合理的管理自己的代码 。现在有好多网站,你查看一下网站的源码的话,你会发现网站的头部有大量的JS文件和CSS文件,网站的尾部也有可能有大量的J
php Yii: 出现undefined offset 或者 undefined index解决方案
dcj3sjt126com
undefined
在开发Yii 时,在程序中定义了如下方式:
if($this->menuoption[2] === 'test'),那么在运行程序时会报:undefined offset:2,这样的错误主要是由于php.ini 里的错误等级太高了,在windows下错误等级
linux 文件格式(1) sed工具
eksliang
linux linux sed工具 sed工具 linux sed详解
转载请出自出处:
http://eksliang.iteye.com/blog/2106082
简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾
Android应用程序获取系统权限
gqdy365
android
引用
如何使Android应用程序获取系统权限
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点
HoverTree开发日志之验证码
hvt
.net C# asp.net hovertree webform
HoverTree是一个ASP.NET的开源CMS,目前包含文章系统,图库和留言板功能。代码完全开放,文章内容页生成了静态的HTM页面,留言板提供留言审核功能,文章可以发布HTML源代码,图片上传同时生成高品质缩略图。推出之后得到许多网友的支持,再此表示感谢!留言板不断收到许多有益留言,但同时也有不少广告,因此决定在提交留言页面增加验证码功能。ASP.NET验证码在网上找,如果不是很多,就是特别多
JSON API:用 JSON 构建 API 的标准指南中文版
justjavac
json
译文地址:https://github.com/justjavac/json-api-zh_CN
如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 anti-bikeshedding 武器。
通过遵循共同的约定,可以提高开发效率,利用更普遍的工具,可以是你更加专注于开发重点:你的程序。
基于 JSON API 的客户端还能够充分利用缓存,
数据结构随记_2
lx.asymmetric
数据结构 笔记
第三章 栈与队列
一.简答题
1. 在一个循环队列中,队首指针指向队首元素的 前一个 位置。
2.在具有n个单元的循环队列中,队满时共有 n-1 个元素。
3. 向栈中压入元素的操作是先 移动栈顶指针&n
Linux下的监控工具dstat
网络接口
linux
1) 工具说明dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是,
C 语言初级入门--二维数组和指针
1140566087
二维数组 c/c++ 指针
/*
二维数组的定义和二维数组元素的引用
二维数组的定义:
当数组中的每个元素带有两个下标时,称这样的数组为二维数组;
(逻辑上把数组看成一个具有行和列的表格或一个矩阵);
语法:
类型名 数组名[常量表达式1][常量表达式2]
二维数组的引用:
引用二维数组元素时必须带有两个下标,引用形式如下:
例如:
int a[3][4]; 引用:
10点睛Spring4.1-Application Event
wiselyman
application
10.1 Application Event
Spring使用Application Event给bean之间的消息通讯提供了手段
应按照如下部分实现bean之间的消息通讯
继承ApplicationEvent类实现自己的事件
实现继承ApplicationListener接口实现监听事件
使用ApplicationContext发布消息