源码

深入了解MyBatis参数

核能气质少年 提交于 2019-12-04 22:32:44
深入了解MyBatis参数 相信很多人可能都遇到过下面这些异常: "Parameter 'xxx' not found. Available parameters are [...]" "Could not get property 'xxx' from xxxClass. Cause: "The expression 'xxx' evaluated to a null value." "Error evaluating expression 'xxx'. Return value (xxxxx) was not iterable." 不只是上面提到的这几个,我认为有很多的错误都产生在和参数有关的地方。 想要避免参数引起的错误,我们需要深入了解参数。 想了解参数,我们首先看MyBatis处理参数和使用参数的全部过程。 本篇由于为了便于理解和深入,使用了大量的源码,因此篇幅较长,需要一定的耐心看完,本文一定会对你起到很大的帮助。 参数处理过程 处理接口形式的入参 在使用MyBatis时,有两种使用方法。一种是使用的接口形式,另一种是通过SqlSession调用命名空间。这两种方式在传递参数时是不一样的,命名空间的方式更直接,但是多个参数时需要我们自己创建Map作为入参。相比而言,使用接口形式更简单。 接口形式的参数是由MyBatis自己处理的。如果使用接口调用

android apk 防止反编译技术第四篇-对抗JD-GUI(转)

依然范特西╮ 提交于 2019-12-04 22:20:58
一、 对抗 JD-GUI 原理 通常在对 apk 进行反编译的时候用到的最多的两个工具就是 apk-tool 和 dex2jar 。利用这两个工具将 apk 首先反编译成 classes.dex 然后再将 classes.dex 反编译成 jar 文件或者将 apk 直接反编译成 jar 文件;得到 jar 文件以后就可以利用 JD-GUI 将得到的 jar 文件打开就可以直接查看 apk 的 java 源码了。我们花了那么大心思写的程序就这么容易被别人拿到源码是不是很不甘心,现在我就告诉你对抗 JD-GUI 查看源码的方法。我们在用 JD-GUI 查看源码时有时有些函数的根本看不到直接提示 error 错误,我们就利用这点来保护我们的 apk 。原来 JD-GUI 在将经过混淆处理的 jar 里面的 class 字节码文件转成 java 文件时,遇到函数中根本走不到的分支的特殊实现时就会提示函数 error 。这时我们只要查看这些提示 error 的文件或者函数对应的源码是有什么语句引起的,将这些语句加到我们的源码中就可以防止利用 JD-GUI 去查看我们的 apk 源码了。 二、 原理实现 (1) 假如我们的 apk onCreate 的函数实现如下: ? 1 2 3 4 5 @Override protected void onCreate(Bundle

mybatis源码分析之04Mapper接口的动态代理

送分小仙女□ 提交于 2019-12-04 21:56:38
在工作中,使用mybatis操作数据库,只需要提供一个接口类,定义一些方法,然后调用接口里面的方法就可以CRUD,感觉是牛了一逼! 该篇就是记录一下,mybatis是如何完成这波骚操作的,即分析我们测试代码的第4行。 FemaleMapper femaleMapper = sqlSession.getMapper(FemaleMapper.class); 由上篇可知,sqlSession的真实类型是DefaultSqlSession. 所以,我们直接是看DefaultSqlSession#getMapper(Class<T> type)方法,当然,断点也是少不了的! public <T> T getMapper(Class<T> type) { return configuration.getMapper(type, this); } 是不是有点熟悉。。。。 接着走。。。 public <T> T getMapper(Class<T> type, SqlSession sqlSession) { return mapperRegistry.getMapper(type, sqlSession); } 再接着走。。。。 public <T> T getMapper(Class<T> type, SqlSession sqlSession) { final

CentOS 6.7 源码编译安装MySQL5.6.24

自闭症网瘾萝莉.ら 提交于 2019-12-04 21:49:11
一、下载MySQL5.6.24源码包,安装编译工具及库文件 官网下载地址: http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.24.tar.gz 也可选择从国内的搜狐镜像下载: http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.24.tar.gz 注:源码包的文件名一般都是这种格式:mysql-<版本号>.tar.gz 安装编译工具及所需的库文件 # yum -y install autoconf automake curl curl-devel libevent* libtool* autoconf* freetype* libstd* ncurse* bison* libxml* openssl* zlib* # yum -y install gcc gcc-c++ (备注:从MySQL5.6开始,需要用到g++来编译,因此必须事先提供g++编译器。而5.5版本可以用gcc编译。) 同时,删除系统自带的mysql # yum remove mysql 二、安装编译配置工具CMake 由于MySQL的源码安装包从5.5版本开始,编译配置工具换成了CMake,因此需要先安装好cmake工具: 1、 下载cmake源码包:cmake-2.8.5.tar.gz http://www

微信公众号开发之成为开发者模式

落花浮王杯 提交于 2019-12-04 21:47:31
微信开发交流群:148540125 欢迎留言、转发 项目源码参考地址 点我点我–欢迎Start 项目如何导入到IDE并启动 参考文章 本文将学习到: 1、如何开发调试微信公众号 2、如何开启开发者模式 3、可能遇到的问题 4、 weixin_guide 如何成为开发者模式源码解读 如何开发调试微信公众号 1、本地调试就需要做端口映射到外网,工具有哪些呢? 推荐ngrok、QQ浏览器 2、ngrok有哪些可以使用呢? 可以参考[ 10分钟搭建属于自己的ngork服务器,实现内网穿透-其中包含免费的ngrok ] 3、开发调试工具 推荐使用真机测试、 微信公众平台接口调试工具 、 微信web开发者工具 如何开启开发者模式 如果 项目clone导入IDE并启动 、端口已经映射到外网成为开发者模式就比较简单了。 测试号申请地址以及开发文档地址 WIKI 成为开发者之前需要做如下配置: weixin_guide 成为开发者url默认的地址为: http://域名【/项目名】/msg Token 需要跟 修改配置参数.png 中的保持一致 消息加密方式 1、正式环境建议使用安全模式,将 encryptMessage 设置为 true , encodingAesKey 必须跟 开启开发模式.png 中随机生成的 EncodingAESKey 保持一致 2、如果是测试

ArrayList源码分析

江枫思渺然 提交于 2019-12-04 21:28:22
1. 源码分析    public ArrayList() {. //默认构造函数,若初始值指定为null则将赋值为一个空的数组 this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; public ArrayList(int initialCapacity) { //指定初始值 if (initialCapacity > 0) { //若大于零则初始化一个Object数组 this.elementData = new Object[initialCapacity]; } else if (initialCapacity == 0) { //赋值为一个空的数组 this.elementData = EMPTY_ELEMENTDATA; } else { throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); } } public boolean add(E e) { //添加元素 modCount++; //modCount表示容器被改变的次数 add(e, elementData, size);

HashSet源码分析

老子叫甜甜 提交于 2019-12-04 21:24:44
1. HashSet是使用HashMap来实现的 public HashSet() { map = new HashMap<>(); } private transient HashMap<E,Object> map; // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object(); //虚拟值,用来表示hashMap中的value值,在set中的值都是以key的形式存储在hashMap中 public boolean add(E e) { //add()方法将元素作为key,并以PRESENT为value存入HashMap中 return map.put(e, PRESENT)==null; } 2. 总结   (1)由于在hashMap中key不可以重复所以HashSet中的元素不可重复。   (2)同理hashMap中允许key为null,因此HashSet中的key也可以是null。   (3)LinkedHashSet是使用LinkedHashMap实现的,原理相似。   (4)TreeSet是使用NavigbleMap来实现的,原理同上。 来源: https://www.cnblogs.com

ASP.NET Core[源码分析篇] - Authentication认证

╄→尐↘猪︶ㄣ 提交于 2019-12-04 21:23:51
原文: ASP.NET Core[源码分析篇] - Authentication认证   追本溯源,从使用开始     首先看一下我们通常是如何使用微软自带的认证,一般在Startup里面配置我们所需的依赖认证服务,这里通过JWT的认证方式讲解 public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(authOpt => { authOpt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; authOpt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(o => { o.TokenValidationParameters = new TokenValidationParameters { //配置自己所要验证的参数 }; }); }   我们来看一下源码AddAuthentication主要做了什么  public static class AuthenticationServiceCollectionExtensions { public static