| @Configuration |
| @MapperScan("org.example.demo15.mapper") |
| public class MybatisPlusConfig { |
| |
| |
| |
| |
| @Bean |
| public MybatisPlusInterceptor mybatisPlusInterceptor() { |
| MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); |
| interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() { |
| @Override |
| public Expression getTenantId() { |
| return new LongValue(1); |
| } |
| |
| |
| @Override |
| public boolean ignoreTable(String tableName) { |
| return !"user".equalsIgnoreCase(tableName); |
| } |
| })); |
| |
| |
| |
| return interceptor; |
| } |
| |
| |
| |
| |
| |
| } |
| @Data |
| @Accessors(chain = true) |
| public class User { |
| private Long id; |
| |
| |
| |
| private Long tenantId; |
| private String name; |
| |
| @TableField(exist = false) |
| private String addrName; |
| |
| } |
| public interface UserMapper extends BaseMapper<User> { |
| |
| |
| |
| |
| |
| |
| Integer myCount(); |
| |
| List<User> getUserAndAddr(@Param("username") String username); |
| |
| List<User> getAddrAndUser(@Param("name") String name); |
| } |
| <?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="org.example.demo15.mapper.UserMapper"> |
| |
| <select id="myCount" resultType="java.lang.Integer"> |
| select count(1) from user |
| </select> |
| |
| <select id="getUserAndAddr" resultType="org.example.demo15.entity.User"> |
| select u.id, u.name, a.name as addr_name |
| from user u |
| left join USER_ADDR a on a.user_id=u.id |
| <where> |
| <if test="username!=null"> |
| u.name like concat(concat('%',#{username}),'%') |
| </if> |
| </where> |
| </select> |
| |
| <select id="getAddrAndUser" resultType="org.example.demo15.entity.User"> |
| select a.name as addr_name, u.id, u.name |
| from USER_ADDR a |
| left join user u on u.id=a.user_id |
| <where> |
| <if test="name!=null"> |
| a.name like concat(concat('%',#{name}),'%') |
| </if> |
| </where> |
| </select> |
| </mapper> |
| @SpringBootTest |
| public class TenantTest { |
| |
| @Resource |
| private UserMapper mapper; |
| |
| |
| |
| |
| |
| |
| |
| |
| @Test |
| public void aInsert() { |
| User user = new User(); |
| user.setName("一一"); |
| Assertions.assertTrue(mapper.insert(user) > 0); |
| user = mapper.selectById(user.getId()); |
| Assertions.assertTrue(1 == user.getTenantId()); |
| } |
| |
| |
| |
| |
| |
| @Test |
| public void bDelete() { |
| Assertions.assertTrue(mapper.deleteById(3L) > 0); |
| } |
| |
| |
| |
| |
| |
| @Test |
| public void cUpdate() { |
| Assertions.assertTrue(mapper.updateById(new User().setId(1L).setName("mp")) > 0); |
| } |
| |
| |
| |
| |
| @Test |
| public void dSelect() { |
| List<User> userList = mapper.selectList(null); |
| userList.forEach(u -> Assertions.assertTrue(1 == u.getTenantId())); |
| } |
| |
| |
| |
| |
| |
| |
| |
| @Test |
| public void manualSqlTenantFilterTest() { |
| System.out.println(mapper.myCount()); |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| @Test |
| public void testTenantFilter(){ |
| mapper.getAddrAndUser(null).forEach(System.out::println); |
| mapper.getAddrAndUser("add").forEach(System.out::println); |
| mapper.getUserAndAddr(null).forEach(System.out::println); |
| mapper.getUserAndAddr("J").forEach(System.out::println); |
| } |
| } |
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术