shardbait2.0实现分表的功能可以用一句话描述:使用mybatis3的插件机制在执行sql之前对原始sql的里的表名进行修改。
[size=medium]一、配置:[/size]
1.在mybatis配置文件中添加插件配置
2.实现自己的sharding策略
实现一个简单的接口即可
3.添加sharding配置
新建一个xml文件,例如:shard_config.xml
shard_config.xml必须保存在应用的classpath中
[size=medium]二、代码中使用shardbatis[/size]
因为shardbatis2.0使用插件方式对mybatis功能进行增强,因此使用配置了shardbatis的mybatis3和使用原生的mybatis3没有区别
更多详细信息请移步google code:[url=http://code.google.com/p/shardbatis/]http://code.google.com/p/shardbatis/[/url]
[size=medium]一、配置:[/size]
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中
[size=medium]二、代码中使用shardbatis[/size]
因为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:[url=http://code.google.com/p/shardbatis/]http://code.google.com/p/shardbatis/[/url]