bd2007 发表于 2013-2-3 10:15:51

mybatis3分表插件shardbatis 2.0

shardbait2.0实现分表的功能可以用一句话描述:使用mybatis3的插件机制在执行sql之前对原始sql的里的表名进行修改。

一、配置:
1.在mybatis配置文件中添加插件配置
<plugins>      <plugin interceptor="com.google.code.shardbatis.plugin.shardplugin">                <property name="shardingconfig" value="shard_config.xml"/>      </plugin></plugins>
2.实现自己的sharding策略
实现一个简单的接口即可
/** * 分表策略接口 * @author sean.he * */public interface shardstrategy {      /**         * 得到实际表名         * @param basetablename 逻辑表名,一般是没有前缀或者是后缀的表名         * @param params mybatis执行某个statement时使用的参数         * @param mapperid mybatis配置的statement id         * @return         */      string gettargettablename(string basetablename,object params,string mapperid);}
public class testshardstrategyimpl implements shardstrategy {// 最简单的实现修改表名的逻辑public string gettargettablename(string basetablename, object params,string mapperid) {return basetablename+"_xx";}}
3.添加sharding配置
新建一个xml文件,例如:shard_config.xml
<?xml version="1.0" encoding="utf-8"?><!doctype shardingconfig public "-//shardbatis.googlecode.com//dtd shardbatis 2.0//en""http://shardbatis.googlecode.com/dtd/shardbatis-config.dtd"><shardingconfig>      <!--                ignorelist可选配置                ignorelist配置的mapperid会被分表参加忽略解析,不会对sql进行修改      -->      <ignorelist>                <value>com.google.code.shardbatis.test.mapper.apptestmapper.insertnoshard</value>      </ignorelist>      <!--               parselist可选配置                如果配置了parselist,只有在parselist范围内并且不再ignorelist内的sql才会被解析和修改      -->      <parselist>                <value>com.google.code.shardbatis.test.mapper.apptestmapper.insert</value>      </parselist>      <!--               配置分表策略      -->      <strategy tablename="app_test" strategyclass="com.google.code.shardbatis.strategy.impl.apptestshardstrategyimpl"/>      </shardingconfig>
shard_config.xml必须保存在应用的classpath中

二、代码中使用shardbatis
因为shardbatis2.0使用插件方式对mybatis功能进行增强,因此使用配置了shardbatis的mybatis3和使用原生的mybatis3没有区别
sqlsession session = sqlsessionfactory.opensession();try {      apptestmapper mapper = session.getmapper(apptestmapper.class);mapper.insert(testdo);      session.commit();} finally {      session.close();}

更多详细信息请移步google code:http://code.google.com/p/shardbatis/
页: [1]
查看完整版本: mybatis3分表插件shardbatis 2.0