Mybatis Generator 无法生成selectByPrimaryKey、deleteByPrimaryKey、updateByPrimaryKey MySQL

问题现象: 最近因为一张表新加了字段,重新使用 mybatis-generator 生成了一下mapper文件,结果发现新生成的文件比之前少了xxxByPrimaryKey 的几个方法,对应的xml文件中同样也少了这几个, 并且xml文件中的resultMap节点里主键id使用的是result标签,而不是id标签。 排查原因: 首先想到的是:难道表没有主键了,于是赶紧检查了一下我的表结构,发现主键没有问题呀!表结构并没有大的变化,我仅仅是加了一个普通字段而已,那怎么会这样呢? 然后我又检查了generatorConfig.xml中table项中的属性 enableSelectByPrimaryKey=”true” enableUpdateByPrimaryKey=”true” enableDeleteByPrimaryKey=”true” 看看这几个属性是否被设置成了false,默认的值是true。 发现也没有问题,这里配置也没有改动过! 唯一想到的变化是mysql连接器版本进行了升级: mysql mysql-connector-java 5.1.35 /** 升级版本 **/ mysql mysql-connector-java 8.0.11 将版本改回去重新试了下果然就可以了。那么可以确信就是 mysql-connector-java 版本升级造成的问题! 解决方法: 很纳闷为什么升级了高版本反而有问题了呢,想到这既然是普遍问题,那应该别人早就遇到过这个问题了,网上搜了下,果然很多人在问这个问题。 最终看到一篇文章找到了解决方法: 在jdbcConnection节点里配置useInformationSchema属性,可以解决mybatis-generator不识别主键问题: 参考文章:https://my.oschina.net/u/2289161/blog/1589630 另外还看到有人说:如果使用的mysql驱动5.x版本的就可以生成,使用6.x 及以上的,那就无法生成了,必须显式设置:useInformationSchema=”true” 说明一下,我使用的maven插件版本是 1.3.5 org.mybatis.generator mybatis-generator-maven-plugin 1.3.5 src/test/resources/generatorConfig.xml true ——————— 参考:https://blog.csdn.net/rchm8519/article/details/81949916

2019年1月29日 · 1 分钟 · 天边的星星

Android6.0运行时权限,拒绝了权限还返回获取成功

如题:禁用、询问的权限,居然还返回权限获取成功 推荐一个很好的项目:AndPermission 不用回来感谢了喂! 这个问题在项目中,一直存在, 主要是第三方厂商各种改,返回的状态不正常; 主要解决思路: 在第三方成功获取权限时, 再用系统原生的api去判断一下,是否真正获取了权限: /** 系统层的权限判断 @param context 上下文 @param permissions 申请的权限 Manifest.permission.READ_CONTACTS @return 是否有权限 :其中有一个获取不了就是失败了 */ public static boolean hasPermission(@NonNull Context context, @NonNull List permissions) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true; for (String permission : permissions) { String op = AppOpsManagerCompat.permissionToOp(permission); if (TextUtils.isEmpty(op)) continue; int result = AppOpsManagerCompat.noteProxyOp(context, op, context.getPackageName()); if (result == AppOpsManagerCompat.MODE_IGNORED) return false; result = ContextCompat.checkSelfPermission(context, permission); if (result != PackageManager.PERMISSION_GRANTED) return false; } return true; } ...

2019年1月26日 · 3 分钟 · 天边的星星

利用mvn deploy命令上传包 到私服

利用mvn deploy命令上传包 mvn安装 apache官方网站可以下载。 https://maven.apache.org/download.cgi 在PATH里加入maven的bin的路径 配置完毕后,在Windows命令提示符下,输入mvn -v测试一下。是否安装成功。 mvn:deploy在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。 以将ojdbc14传到nexus中的releases为例 一 配置settings.xml 因为nexus是需要登陆操作,当然可以通过配置免登陆,这是后话。 在settings.xml的 releases deployment 123456 snapshots deployment 123456 当然如果你要上传包去其他仓库,可依照此例设置相应的参数,如 central admin admin123 如果进行deploy时返回Return code is: 401错误,则需要进行用户验证或者你已经验证的信息有误。 如果进行deploy时返回Return code is: 400, ReasonPhrase: Bad Request错误,这里的原因是往往是没有部署到nexus的仓库中切换Durl路径 二 cmd输入命令 最好进入到jar包的绝对路径 mvn deploy:deploy-file -DgroupId=zhongjin -DartifactId=API4BDS -Dversion=2.3 -Dpackaging=jar -Dfile=G:\p2p\API4BDS-2.3.jar -Durl=http://192.168.34.35:81/nexus/content/repositories/releases -DrepositoryId=releases DgroupId和DartifactId构成了该jar包在pom.xml的坐标,项目就是依靠这两个属性定位。自己起名字也行。 Dfile表示需要上传的jar包的绝对路径。 Durl私服上仓库的位置,打开nexus——>repositories菜单,可以看到该路径。 DrepositoryId服务器的表示id,在nexus的configuration可以看到。 Dversion表示版本信息,怎样得到一个jar包准确的版本呢? 解压该包,会发现一个叫MANIFEST.MF的文件,这个文件就有描述该包的版本信息。 比如Manifest-Version: 1.0可以知道该包的版本了。 上传成功后,在nexus界面点击3rd party仓库可以看到这包。 今天deploy项目时,maven报错401,百度了一下,找到以下文章,解决了问题,所以就考了过来。 源地址是:http://www.netingcn.com/maven-deploy-nexus.html 首先在Nexus中创建一个自己私有的仓库,步骤为Repositories –> Add –> Hosted Repository,在页面的下半部分输入框中填入Repository ID和Repository Name即可,比如分别填入myrepo和 my repository,点击save就创建完成了。 ...

2019年1月9日 · 1 分钟 · 天边的星星

Xcode 10 beta3 Error: Multiple commands produce

最近开发一直在使用Xcode10 beta版本的,今天升级到Xcode10 beta3,但是在编译项目时编译失败,报错内容: <div class="image-view" data-width="1326" data-height="390"> ![](//upload-images.jianshu.io/upload_images/2135374-e38dfa85c14dbcd3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp) </div> </div> <div class="image-caption"> 屏幕快照 2018-07-09 上午10.28.06.png </div> `error: Multiple commands produce &lt;span class="hljs-string">'/Users/xiaoyuan/Library/Developer/Xcode/DerivedData/Boobuz-gnxeuntgkenwgdgycqnvabqubafh/Build/Products/Debug-iphoneos/Boobuz.app'&lt;/span>: 1) Target &lt;span class="hljs-string">'Boobuz'&lt;/span> has create directory &lt;span class="hljs-built_in">command&lt;/span> with output &lt;span class="hljs-string">'/Users/xiaoyuan/Library/Developer/Xcode/DerivedData/Boobuz-gnxeuntgkenwgdgycqnvabqubafh/Build/Products/Debug-iphoneos/Boobuz.app'&lt;/span> 2) That &lt;span class="hljs-built_in">command&lt;/span> depends on &lt;span class="hljs-built_in">command&lt;/span> &lt;span class="hljs-keyword">in&lt;/span> Target &lt;span class="hljs-string">'Boobuz'&lt;/span>: script phase “[CP] Copy Pods Resources” ` 引用简友[guifu_tang](/u/3b14b90a886f)的一句话原因是Xcode 10 默认使用的build system是New build system,与Xcode9不同导致。 - 第一种方法 不修改build system 分析build error 日志,错误发生在Copy Pods Resources,而且与output有关,应该是使用了cocoapods导致的,尝试删除该项目target-Copy Pods Resources-Output Files,成功解决问题。 ...

2019年1月1日 · 1 分钟 · 天边的星星

命令行打包 war文件

根据自己项目的真实情况需要注意配置jdk环境,如果jdk环境不同可能造成打出的war包不能正常运行。例如 项目使用jdk1.7 打包使用javac必须为jdk1.7中的javac命令,tomcat需要配置执行的jdk环境为1.7。如果电脑使用的和项目使用的是同一个jdk,配置路径可以省略,其他情况不能省略。 命令行打包 war文件 echo 准备java文件 dir *.java/s/b > source.txt if exist out\classes ( echo 清理中… rd /S/Q out ) echo 清理中完成 md out\classes md out\webapp echo 编译源码 set JAVA_HOME=D:\Program Files\Java\jdk1.7.0_75 %JAVA_HOME%\bin\javac -cp .;E:\apache-tomcat-8.5.35\lib*;E:\apache-tomcat-8.5.35\bin*;E:\auto_test\zchfaxgb\src\main\webapp\WEB-INF\lib* -d out\classes -encoding utf-8 @source.txt echo 复制webapp目录 xcopy src\main\webapp out\webapp /s/e/i/y echo 创建编译源码路径 md out\webapp\WEB-INF\classes echo 复制classes目录 xcopy out\classes out\webapp\WEB-INF\classes /s/e/i/y echo 复制resources目录 xcopy src\main\resources out\webapp\WEB-INF\classes /s/e/i/y echo 开始打包 cd out\webapp echo 打包中 jar -cvf zcjf.war * move zcjf.war ../../ echo 打包完成 pause ...

2018年12月24日 · 1 分钟 · 天边的星星

Android图片之处理圆形圆角

# 概述 图片格式概述: BMP:高质量绘图 保证原图质量,用于相机等 BMP格式图片是有一个一个的像素点组成,每一个像素都是一个颜色.而每一个像素显示的颜色用的二进制位也不相同,这个像素位称之为位深,位深越大,表示每一个像素点所用的二进制位越多,显示的图像也就越清晰。 png:较高质量绘图 体积小,适用于网络传输 png图片是将bmp图片进行压缩,其压缩格式类似于rar压缩——将相同的byte信息合并表示。png图片可以还原,是无损的压缩方式。 jpg:良好的绘图质量 体积小,便于传输 jpg格式图片也是对bmp图片进行压缩,因为眼睛的精度是有限的,jpg利用这一点将很多颜色相近的用同一颜色标识,而对于一大块相同的颜色,则用一个值表示。jpg格式图片不能被还原。 ## 加载大图 <div class="top-box hide"> <div class="alert-info"> </div> </div> ``` hr && wr>1){ r = wr; } if(hr>wr && hr>1){ r = hr; } //压缩图片 options.inSampleSize = r;//设置压缩比 options.inJustDecodeBounds = false;//设置加载图片内容 Bitmap bm = BitmapFactory.decodeFile(path,options); iv.setImageBitmap(bm); " data-snippet-id=“ext.f5fc8efb9581248b791731039403eb80” data-snippet-saved=“false” data-codota-status=“done”>`ImageView iv = (ImageView) findViewById(R.id.iv); <span class=“hljs-comment”>/** 在Android中,每一个应用程序所占用的内存空间大小都会有一个固定的大小限制 假设此处加载的图片是2560*1440像素,图片位深是24的jpg格式图像 虽然此图占用的磁盘空间是1.3M,但图片在加载到内存中时,实际上会先转换成位图图像 那么这张图片加载到内存中的大小就是2560144032(位深24,windows系统中,使用24位字节表示一个颜色值:#000000, 但在Android中,每一个颜色值是用32位字节表示一个颜色值:#00000000),因此,这张图片加载到内存中所需要占用的内存 大小约为:14M,因此,占用内存是极大的.若是直接将图片加载到内存中,容易造成内存溢出 解决方案:按比例压缩图片 *按比例压缩图片首先就是要获取图片的大小 */</span> String path = <span class=“hljs-string”>“mnt/sdcard/1.jpg”</span>; <span class=“hljs-comment”>//用于设置图片渲染器参数</span> BitmapFactory.Options options = <span class=“hljs-keyword”>new</span> Options(); <span class=“hljs-comment”>//设置图片加载属性:不加载图片内容,只获取图片信息</span> options.inJustDecodeBounds = <span class=“hljs-literal”>true</span>; <span class=“hljs-comment”>//加载图片信息</span> BitmapFactory.decodeFile(path,options); <span class=“hljs-comment”>//获取图片宽高</span> <span class=“hljs-keyword”>int</span> picwidth = options.outWidth; <span class=“hljs-keyword”>int</span> picheight = options.outHeight; <span class=“hljs-comment”>//获取屏幕大小</span> <span class=“hljs-comment”>//获取窗口管理器</span> WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); <span class=“hljs-comment”>//获取默认显示设备</span> Display dis =wm.getDefaultDisplay(); <span class=“hljs-comment”>//获取屏幕宽高</span> <span class=“hljs-comment”>//dis.getSize(outSize);此方法适用于新版本Android系统</span> <span class=“hljs-keyword”>int</span> diswidth = dis.getWidth(); <span class=“hljs-keyword”>int</span> disheight = dis.getHeight(); <span class=“hljs-comment”>//计算压缩比</span> <span class=“hljs-keyword”>int</span> wr = picwidth/diswidth; <span class=“hljs-keyword”>int</span> hr = picheight/disheight; <span class=“hljs-keyword”>int</span> r = <span class=“hljs-number”>1</span>; <span class=“hljs-keyword”>if</span>(wr>hr && wr><span class=“hljs-number”>1</span>){ r = wr; } <span class=“hljs-keyword”>if</span>(hr>wr && hr><span class=“hljs-number”>1</span>){ r = hr; } <span class=“hljs-comment”>//压缩图片</span> options.inSampleSize = r;<span class=“hljs-comment”>//设置压缩比</span> options.inJustDecodeBounds = <span class=“hljs-literal”>false</span>;<span class=“hljs-comment”>//设置加载图片内容</span> Bitmap bm = BitmapFactory.decodeFile(path,options); iv.setImageBitmap(bm); ` ...

2018年12月23日 · 6 分钟 · 天边的星星

Nginx 301重定向域名

## 为何要使用301重定向 在网站建设中需要网页重定向的情况很多:如网页目录结构变动,网页重命名、网页的扩展名改变、网站域名改变等。如果不做重定向,用户的收藏和搜索引擎数据库中的旧地址只能让访客得到一个404错误信息页面,访问流量白白丧失。不仅如此,之前该页面的一切积累(比如PR值)就都白费了。 301重定向不仅能使页面实现自动跳转,对于搜索引擎来说,也可能可以传递PR值。 &nbsp; **nginx重定向规则详细介绍** &nbsp; [http://www.jefflei.com/post/1015.html](http://www.jefflei.com/post/1015.html) **rewrite命令** nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,location 和IF条件判断块中,命令格式如下: rewrite 正则表达式 替换目标 flag标记 flag标记可以用以下几种格式: last – 基本上都用这个Flag。 break – 中止Rewirte,不在继续匹配 redirect – 返回临时重定向的HTTP状态302 permanent – 返回永久重定向的HTTP状态301 例如下面这段设定nginx将某个目录下面的文件重定向到另一个目录,2对应第二个括号(.)中对应的字符串: location /download/ { rewrite ^(/download/.)/m/(.).. 1/nginx-rewrite/2.gz break; } **nginx重定向的IF条件判断** 在server和location两种情况下可以使用nginx的IF条件判断,条件可以为以下几种: 正则表达式 如: 匹配判断 ~ 为区分大小写匹配; !~为区分大小写不匹配 ~* 为不区分大小写匹配;!~为不区分大小写不匹配 例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下: if (http_user_agent ~ MSIE) { rewrite ^(.*) /nginx-ie/$1 break; } **文件和目录判断 ** -f和!-f判断是否存在文件 -d和!-d判断是否存在目录 -e和!-e判断是否存在文件或目录 -x和!-x判断文件是否可执行 例如下面设定nginx在文件和目录不存在的时候重定向: if (!-e $request_filename) { proxy_pass http://127.0.0.1/; } ...

2018年12月10日 · 5 分钟 · 天边的星星

tomcat配置301重定向

tomcat默认情况下不带www的域名是不会跳转到带www的域名的,而且也无法像apache那样通过配置.htaccess来实现。如果想要把不带“www’的域名重定向到带”www”域名下,又不想写代码,可以使用UrlRewriteFilter来实现。 1.简介 urlRewriteFilter是一个用于改写URL的Web过滤器,类似于Apache的mod_rewrite。适用于任何Web应用服务器(如 Tomcat,jboss,jetty,Resin,Orion等)。其典型应用就把动态URL静态化,便于搜索引擎爬虫抓取你的动态网页。 2.下载 下载UrlRewriteFilter wget http://urlrewritefilter.googlecode.com/files/urlrewritefilter-4.0.3.jar 并放入tomcat的 WEB-INF/lib下 3.配置tomcat 编辑WEB-INF/web.xml 在其它servlet mapping前加入 <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>" data-snippet-id="ext.d9335c889eb8c29f7d0586484daf2dcb" data-snippet-saved="false" data-codota-status="done">&lt;filter&gt; &lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt; &lt;filter-class&gt;org.tuckey.web.filters.urlrewrite.UrlRewriteFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; &lt;dispatcher&gt;REQUEST&lt;/dispatcher&gt; &lt;dispatcher&gt;FORWARD&lt;/dispatcher&gt; &lt;/filter-mapping&gt; 4.添加跳转规则 在WEB-INF下新建urlrewite.xml文件,加入跳转规则 <rule> <name>seo redirect</name> <condition name=&quot;host&quot; operator=&quot;notequal&quot;>^www.example.com</condition> <condition name=&quot;host&quot; operator=&quot;notequal&quot;>^localhost</condition> <from>^/(.*)</from> <to type=&quot;permanent-redirect&quot; last=&quot;true&quot;>http://www.example.com/$1</to> </rule> </urlrewrite>" data-snippet-id="ext.8be7c6714e65fa3f79b0e1c6c6215563" data-snippet-saved="false" data-codota-status="done">&lt;urlrewrite&gt; &lt;rule&gt; &lt;name&gt;seo redirect&lt;/name&gt; &lt;condition name="host" operator="notequal"&gt;^www.example.com&lt;/condition&gt; &lt;condition name="host" operator="notequal"&gt;^localhost&lt;/condition&gt; &lt;from&gt;^/(.*)&lt;/from&gt; &lt;to type="permanent-redirect" last="true"&gt;http://www.example.com/$1&lt;/to&gt; &lt;/rule&gt; &lt;/urlrewrite&gt; 参考文章 http://nematodes.org/martin/2010/02/04/301-permanent-redirect-with-tomcat-howto/ ...

2018年12月10日 · 1 分钟 · 天边的星星

Java AES256加密解密实现

import it.sauronsoftware.base64.Base64; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.bouncycastle.jce.provider.BouncyCastleProvider; /** java实现AES256加密解密 依赖说明: bcprov-jdk15-133.jar:PKCS7Padding javabase64-1.3.1.jar:base64 local_policy.jar 和 US_export_policy.jar需添加到%JAVE_HOME%\jre\lib\security中(lib中版本适合jdk1.7) */ public class AES256 { public static byte[] encrypt(String content, String password) { try { //”AES”:请求的密钥算法的标准名称 KeyGenerator kgen = KeyGenerator.getInstance(“AES”); //256:密钥生成参数;securerandom:密钥生成器的随机源 SecureRandom securerandom = new SecureRandom(tohash256Deal(password)); kgen.init(256, securerandom); //生成秘密(对称)密钥 SecretKey secretKey = kgen.generateKey(); //返回基本编码格式的密钥 byte[] enCodeFormat = secretKey.getEncoded(); //根据给定的字节数组构造一个密钥。enCodeFormat:密钥内容;”AES”:与给定的密钥内容相关联的密钥算法的名称 SecretKeySpec key = new SecretKeySpec(enCodeFormat, “AES”); //将提供程序添加到下一个可用位置 Security.addProvider(new BouncyCastleProvider()); //创建一个实现指定转换的 Cipher对象,该转换由指定的提供程序提供。 //”AES/ECB/PKCS7Padding”:转换的名称;”BC”:提供程序的名称 Cipher cipher = Cipher.getInstance(“AES/ECB/PKCS7Padding”, “BC”); ...

2018年12月9日 · 2 分钟 · 天边的星星

配置独立sftp账号

 设置用户组和用户、并设置密码 groupadd sftp #创建sftp用户组 useradd -g sftp -s /bin/false mysftp # 创建mysftp用户 passwd mysftp #设置mysftp密码 创建并设置mysftp的主目录 mkdir mydata #创建mydata文件夹 cd mydata #进入mydata mkdir uploads #创建uploads文件夹 usermod -d /mydata/uploads/ mysftp #设置mysftp的主目录 配置sshd_config vi /etc/ssh/sshd_config #这个要放到最后(至少保证在’UseDNS’ 后面否则可能出现错误) # Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp Match Group sftp ChrootDirectory /mydata ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no 配置文件权限(至少为755权限) chown root:sftp /mydata chmod 755 /mydata chown mysftp:sftp /mydata/uploads chmod 755 /mydata/uploads ...

2018年12月8日 · 1 分钟 · 天边的星星