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/
 

你可能感兴趣的:(java,工作)