SargerasWang's Blog

我常常思考为什么鸟儿拥有整片天空,却常常停留在一个地方。然后我问了自己同样的问题。

Mybatis中association查询与主查询在不同数据库的解决方法

问题描述

Mybatis 关联的嵌套查询 官方的例子:

1
2
3
4
5
6
7
8
9
10
11
<resultMap id="blogResult" type="Blog">
  <association property="author" column="author_id" javaType="Author" select="selectAuthor"/>
</resultMap>

<select id="selectBlog" resultMap="blogResult">
  SELECT * FROM BLOG WHERE ID = #{id}
</select>

<select id="selectAuthor" resultType="Author">
  SELECT * FROM AUTHOR WHERE ID = #{id}
</select>

这个时候,如果AUTHOR表与BLOG在两个不同的数据库中,执行会报找不到AUTHOR表.

解决思路

新建一个Mybatis的Plugins插件,在第二次查询也就是selectAuthor执行之前,切换数据源为另一个数据库.看一下Plugins都可以用于哪些地方:

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)

简单的linux下maven程序自动部署脚本

vps服务器弄好之后,每次更改完代码都是本地打包,上传war到服务器,再替换数据库配置,重启服务. 刚开始偶尔一次还好,但频繁操作就受不了了,然后写了以下脚本.

部署流程

1.从github更新

1
git pull

2.替换数据库配置

1
cp -f ../db_config/db.properties ./src/main/resources/props/db.properties

修改log4j配置文件的第一行,服务器端有mail,本机没有

1
sed -i '1c log4j.rootLogger=INFO,stdout,stderr,mail' ./src/main/resources/log4j.properties

3.打包

1
mvn package

4.停止tomcat

1
service tomcat stop

5.删除原文件夹

1
rm -rf /var/lib/tomcat7/webapps/ROOT

6.改名+复制包到tomcat

1
2
mv target/WebManager.war target/ROOT.war
cp -f target/ROOT.war /var/lib/tomcat7/webapps/

7.启动tomcat

1
service tomcat7 start

shell:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh                                                                                                                                   
echo "==============================开始部署=============================="
cd /usr/local/project/csm-framework/
echo "##############################更新git##############################"
git pull
echo "########################替换数据库配置#############################"
cp -f ../db_config/db.properties ./src/main/resources/props/db.properties
echo "########################修改Log4j配置#############################"
sed -i '1c log4j.rootLogger=INFO,stdout,stderr,mail' ./src/main/resources/log4j.properties
echo "############################打包###################################"
mvn clean package
echo "#########################停止tomcat################################"
service tomcat7 stop
echo "##########################删除原文件夹#############################"
rm -rf /var/lib/tomcat7/webapps/*
echo "##########################解压到webapps############################"
unzip -o target/WebManager.war -d /var/lib/tomcat7/webapps/ROOT/
echo "############################启动tomcat#############################"
service tomcat7 start
echo "==============================部署完成=============================="

在VPS上搭建tomcat+mysql

很久没有写blog了,从去年底开始一直在整一个框架,现在最最基础的东西好了. 就想着给基友演示一下,看了一下国外的VPS,价格还可以接受,而且还可以增强linux的操作熟练度,就租了. 这篇是写从租服务器开始直到可以通过http://csm.sargeraswang.com访问到我的站点.

准备

  1. 你自己的域名
  2. 支持VISA或者MasterCard的信用卡
  3. 你的网站程序

bootbox.js 4.3.0设置为中文

bootbox.js 是bootstrap用的alert/confirm插件,支持多语言.中文设置方法:

1
bootbox.setDefaults({locale:"zh_CN"});

然后alert的确认按钮,还是显示为OK,直接去源码修改: bootbox.js 最后位置

1
2
3
4
5
zh_CN : {
      OK      : "OK",//修改这里
      CANCEL  : "取消",
      CONFIRM : "确认"
    }