前言
官方网站http://shardingsphere.apache.org/index_zh.html
网上费了老大力气找各种整合ssm整合shardingjdbc的项目发现都是1.x的,连个or查询都不支持,有毛用,废话不说了,直接上干货
目录
一.sql准备
二. mvn配置
三.数据源配置
五,实体层无任何区别
六,dao层和原来没任何区别
七,mapper层和原来没任何区别
八,在一个service层中调用
一.sql准备
准备两张表user_0,user_1
DROP TABLE IF EXISTS `user_0`;
CREATE TABLE `user_0` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(100) DEFAULT NULL,`age` int(11) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;-- ----------------------------
-- Table structure for user_1
-- ----------------------------
DROP TABLE IF EXISTS `user_1`;
CREATE TABLE `user_1` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(100) DEFAULT NULL,`age` int(11) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
二. mvn配置
org.apache.shardingspheresharding-jdbc-core4.1.0
org.apache.shardingspheresharding-jdbc-spring-namespace4.1.0
注意:此处只贴出shardingsphere的,此次示例是老ssm项目新加shardingsphere的故其它不再展示
ssm和druid版本也贴一下吧
4.0.8.RELEASE
3.2.8
1.2.2
1.1.10
三.数据源配置
在你的原数据配置文件中找到老数据源配置,在老数据源配置下面新增数据源配置 shardingDataSource,并把老数据源连接改成 shardingDataSource
{id % 2}" />{0..1}" table-strategy-ref="userTableStrategy" />false
注意:一定要用$->{...} 不要用 ${...} 来自官方建议,不信可以试试哈,有惊喜呀
https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/configuration/spring-namespace/sharding/
行表达式标识符可以使用 ${...}
或 $->{...}
,但前者与 Spring 本身的属性文件占位符冲突,因此在 Spring 环境中使用行表达式标识符建议使用 $->{...}
。
五,实体层无任何区别
public class UserEntity {private int id;private String name;private int age;public UserEntity() {}public UserEntity(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}@Overridepublic String toString() {return "UserEntity{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}
六,dao层和原来没任何区别
import com.thinkgem.jeesite.common.persistence.CrudDao;
import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
import com.thinkgem.jeesite.modules.sharding.entity.UserEntity;@MyBatisDao
public interface ShardingUserDao extends CrudDao {int insertOne(UserEntity user);UserEntity selectByPk(int id);
}
七,mapper层和原来没任何区别
INSERT INTO user(id, name,age) VALUE(#{id},#{name},#{age})
八,在一个service层中调用
@Autowiredprivate ShardingUserDao userDao;@Transactional(readOnly = false)public void save() {userDao.insertOne(new UserEntity(12, "333", 1122));userDao.insertOne(new UserEntity(14, "3333", 1122));System.out.println(userDao.selectByPk(1));System.out.println(userDao.selectByPk(2));}
结果
原创不易,转载请注明出处