手把手教你 ssm 项目整合shardingsphere4.10

前言

官方网站Apache ShardingSphere

网上费了老大力气找各种整合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配置

<dependency>
	<groupId>org.apache.shardingsphere</groupId>
	<artifactId>sharding-jdbc-core</artifactId>
	<version>4.1.0</version>
</dependency>

<dependency>
	<groupId>org.apache.shardingsphere</groupId>
	<artifactId>sharding-jdbc-spring-namespace</artifactId>
	<version>4.1.0</version>
</dependency>

注意:此处只贴出shardingsphere的,此次示例是老ssm项目新加shardingsphere的故其它不再展示

ssm和druid版本也贴一下吧

<spring.version>4.0.8.RELEASE</spring.version>
<mybatis.version>3.2.8</mybatis.version>
<mybatis-spring.version>1.2.2</mybatis-spring.version>
<druid.version>1.1.10</druid.version>

三.数据源配置

在你的原数据配置文件中找到老数据源配置,在老数据源配置下面新增数据源配置 shardingDataSource,并把老数据源连接改成  shardingDataSource

<!--shardingJDBC配置开始 根据user.id 的奇偶来分片  -->

	<bean id="demo_ds" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql://localhost:3306/crm_db?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC" />
		<property name="username" value="root" />
		<property name="password" value="root" />
	</bean>


	<sharding:inline-strategy id="userTableStrategy" sharding-column="id" algorithm-expression="user_$->{id % 2}" />
	<sharding:data-source id="shardingDataSource">
		<sharding:sharding-rule data-source-names="demo_ds">
			<sharding:table-rules>
				<sharding:table-rule logic-table="user" actual-data-nodes="demo_ds.user_$->{0..1}" table-strategy-ref="userTableStrategy"   />
			</sharding:table-rules>
		</sharding:sharding-rule>
		<sharding:props>
			<prop key="sql.show">false</prop>
		</sharding:props>
	</sharding:data-source>

<!--sharding JDBC结束   -->

 注意:一定要用$->{...}  不要用  ${...}  来自官方建议,不信可以试试哈,有惊喜呀

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;
    }

    @Override
    public 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<ShardingUserDao> {

    int insertOne(UserEntity user);

    UserEntity selectByPk(int id);
}

七,mapper层和原来没任何区别

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.thinkgem.jeesite.modules.sharding.dao.ShardingUserDao">

	<insert id="insertOne" parameterType="com.thinkgem.jeesite.modules.sharding.entity.UserEntity">
        INSERT INTO user(id, name,age) VALUE(#{id},#{name},#{age})
    </insert>

	<select id="selectByPk" resultType="com.thinkgem.jeesite.modules.sharding.entity.UserEntity" parameterType="java.lang.Integer">
        select * from user where id=#{id}
    </select>

</mapper>

八,在一个service层中调用


@Autowired
	private 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));


}

结果

原创不易,转载请注明出处

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值