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]