文章目录

平常心博客

平常心的日常积累

标签: MySql (3)

【转载】Mybatis3.3.x技术内幕(二):动态代理之投鞭断流(自动映射器Mapper的底层实现原理)

一日小区漫步,我问朋友:Mybatis中声明一个interface接口,没有编写任何实现类,Mybatis就能返回接口实例,并调用接口方法返回数据库数据,你知道为什么不?朋友很是诧异:是啊,我也很纳闷,我们领导告诉我们按照这个模式编写就好了,我同事也感觉很奇怪,虽然我不知道具体是怎么实现的,但我觉得肯定是……(此处略去若干的漫天猜想),但是也不对啊,难道是……(再次略去若干似懂非懂)。

这激发了我写本篇文章的冲动。


动态代理的功能:通过拦截器方法回调,对目标target方法进行增强。

言外之意就是为了增强目标target方法。上面这句话没错,但也不要认为它就是真理,殊不知,动态代理还有投鞭断流的霸权,连目标target都不要的科幻模式。

注:本文默认认为,读者对动态代理的原理是理解的,如果不明白target的含义,难以看懂本篇文章,建议先理解动态代理。

1. 自定义JDK动态代理之投鞭断流实现自动映射器Mapper

【转载】Centos 7 使用Yum 安装 MySQL 有更新!

1、介绍

centos 从7 开始将原先自带的MySQL被更替为mariadb,默认情况下推荐安装mariadb或Percona,如果对于原版有比较深的情节,可以按照如下方式进行安装。

2、安装YUM Repo

Repo地址可从官方获取:https://dev.mysql.com/downloads/repo/yum/
5066d619c9a54eb086fd72ae891325e1-mysql.png
这里选择的是 Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Package(原因是CentOS就是RedHat重新编译的版本)。下载地址可以点击链接查看,或自己按照规则拼接:
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
完成后可以检测下md5是否与页面上的一致:
md5sum mysql57-community-release-el7-9.noarch.rpm
然后进行repo的安装:
rpm -ivh mysql57-community-release-el7-9.noarch.rpm

【转载】MySql+Mybatis+Druid在一个Mybatis中执行多条SQL 有更新!

做一个批量update的操作 ,sqlmap如下:

<update id="updateBatch" parameterType="java.util.List">  
  <foreach collection="list" item="item" index="index" open="" close="" separator=";">  
    update devicebdtoken   
	 <set>  
	   access_token=#{item.accessToken}  
	 <set>  
    where device_id = #{item.deviceId}  
  <foreach>  
<update>

在不设置的情况下会报错:

Caused by: java.sql.SQLException: sql injection violation, multi-statement not allow : update device_bd_token 
                 SET access_token=? 
                where device_id = ?
          ; 
                update device_bd_token 
                 SET access_token=? 
                where device_id = ?
	at com.alibaba.druid.wall.WallFilter.check(WallFilter.java:714)
	at com.alibaba.druid.wall.WallFilter.connection_prepareStatement(WallFilter.java:240)
	at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:448)
	at com.alibaba.druid.filter.FilterAdapter.connection_prepareStatement(FilterAdapter.java:928)
	at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:122)
	at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:448)
	at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement(ConnectionProxyImpl.java:342)
	at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:318)

刚开始以为是连接数据库的url上没有加上支持批量的参数,然后就改了下:

jdbc.url=jdbc:mysql://192.168.11.107:3306/alarm_db?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8

结果还是同样的错误!但是在命令行直接执行又是没问题的,这就很奇怪了!

浏览次数:1633744   文章总数:80   评论总数:6   当前访客:3
平常心博客 © 2018 ×
¥
每天领支付宝红包
Powered by B3log 开源Solo 2.4.0