Skip to content

Commit 794d6f0

Browse files
committed
LogicalMapper实现和部分测试
1 parent fca2ce2 commit 794d6f0

File tree

8 files changed

+763
-111
lines changed

8 files changed

+763
-111
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.mybatis.mapper.logical;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
/**
9+
* 标记该字段为逻辑状态列
10+
* <p>NOTE: 单张表中仅支持标记一个字段</p>
11+
*
12+
* @author hzw
13+
*/
14+
@Retention(RetentionPolicy.RUNTIME)
15+
@Target(ElementType.FIELD)
16+
public @interface LogicalColumn {
17+
/**
18+
* 表示逻辑删除的值,默认为null
19+
*/
20+
String delete() default "null";
21+
}
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
package io.mybatis.mapper.logical;
2+
3+
import io.mybatis.mapper.BaseMapper;
4+
import io.mybatis.mapper.example.Example;
5+
import io.mybatis.mapper.example.ExampleProvider;
6+
import io.mybatis.mapper.fn.Fn;
7+
import io.mybatis.mapper.fn.FnMapper;
8+
import io.mybatis.mapper.fn.FnProvider;
9+
import io.mybatis.provider.Caching;
10+
import org.apache.ibatis.annotations.DeleteProvider;
11+
import org.apache.ibatis.annotations.Lang;
12+
import org.apache.ibatis.annotations.SelectProvider;
13+
import org.apache.ibatis.annotations.UpdateProvider;
14+
import org.apache.ibatis.cursor.Cursor;
15+
import org.apache.ibatis.session.RowBounds;
16+
17+
import java.io.Serializable;
18+
import java.util.List;
19+
import java.util.Optional;
20+
21+
/**
22+
* 逻辑删除的 Mapper 方法
23+
*
24+
* @author hzw
25+
*/
26+
public interface LogicalMapper<T, I extends Serializable> extends BaseMapper<T, I>, FnMapper<T> {
27+
/* BaseMapper +++ */
28+
29+
@Override
30+
@Lang(Caching.class)
31+
@UpdateProvider(type = LogicalProvider.class, method = "updateByPrimaryKeySelectiveWithForceFields")
32+
int updateByPrimaryKeySelectiveWithForceFields(T entity, Fn.Fns<T> forceUpdateFields);
33+
34+
/* BaseMapper --- */
35+
36+
/* FnMapper +++ */
37+
38+
@Override
39+
@Lang(Caching.class)
40+
@SelectProvider(type = FnProvider.class, method = "selectColumns")
41+
Optional<T> selectColumnsOne(T entity, Fn.Fns<T> selectFileds);
42+
43+
@Override
44+
@Lang(Caching.class)
45+
@SelectProvider(type = FnProvider.class, method = "selectColumns")
46+
List<T> selectColumns(T entity, Fn.Fns<T> selectFileds);
47+
48+
/* FnMapper --- */
49+
50+
/* EntityMapper +++ */
51+
52+
@Override
53+
@Lang(Caching.class)
54+
@DeleteProvider(type = LogicalProvider.class, method = "deleteByPrimaryKey")
55+
int deleteByPrimaryKey(I id);
56+
57+
@Override
58+
@Lang(Caching.class)
59+
@DeleteProvider(type = LogicalProvider.class, method = "delete")
60+
int delete(T entity);
61+
62+
@Override
63+
@Lang(Caching.class)
64+
@UpdateProvider(type = LogicalProvider.class, method = "updateByPrimaryKey")
65+
int updateByPrimaryKey(T entity);
66+
67+
@Override
68+
@Lang(Caching.class)
69+
@UpdateProvider(type = LogicalProvider.class, method = "updateByPrimaryKeySelective")
70+
int updateByPrimaryKeySelective(T entity);
71+
72+
@Override
73+
@Lang(Caching.class)
74+
@SelectProvider(type = LogicalProvider.class, method = "selectByPrimaryKey")
75+
Optional<T> selectByPrimaryKey(I id);
76+
77+
@Override
78+
@Lang(Caching.class)
79+
@SelectProvider(type = LogicalProvider.class, method = "select")
80+
Optional<T> selectOne(T entity);
81+
82+
@Override
83+
@Lang(Caching.class)
84+
@SelectProvider(type = LogicalProvider.class, method = "select")
85+
List<T> selectList(T entity);
86+
87+
@Override
88+
@Lang(Caching.class)
89+
@SelectProvider(type = LogicalProvider.class, method = "selectCount")
90+
long selectCount(T entity);
91+
92+
/* EntityMapper --- */
93+
94+
/* CursorMapper +++ */
95+
96+
@Override
97+
@Lang(Caching.class)
98+
@SelectProvider(type = LogicalProvider.class, method = "select")
99+
Cursor<T> selectCursor(T entity);
100+
101+
@Override
102+
@Lang(Caching.class)
103+
@SelectProvider(type = LogicalProvider.class, method = "selectByExample")
104+
Cursor<T> selectCursorByExample(Example<T> example);
105+
106+
/* CursorMapper --- */
107+
108+
/* ExampleMapper +++ */
109+
@Override
110+
default Example<T> example() {
111+
return BaseMapper.super.example();
112+
}
113+
114+
@Override
115+
@Lang(Caching.class)
116+
@DeleteProvider(type = LogicalProvider.class, method = "deleteByExample")
117+
int deleteByExample(Example<T> example);
118+
119+
@Override
120+
@Lang(Caching.class)
121+
@UpdateProvider(type = LogicalProvider.class, method = "updateByExample")
122+
int updateByExample(T entity, Example<T> example);
123+
124+
@Override
125+
@Lang(Caching.class)
126+
@UpdateProvider(type = LogicalProvider.class, method = "updateByExampleSetValues")
127+
int updateByExampleSetValues(Example<T> example);
128+
129+
@Override
130+
@Lang(Caching.class)
131+
@UpdateProvider(type = LogicalProvider.class, method = "updateByExampleSelective")
132+
int updateByExampleSelective(T entity, Example<T> example);
133+
134+
@Override
135+
@Lang(Caching.class)
136+
@SelectProvider(type = LogicalProvider.class, method = "selectByExample")
137+
List<T> selectByExample(Example<T> example);
138+
139+
@Override
140+
@Lang(Caching.class)
141+
@SelectProvider(type = LogicalProvider.class, method = "selectByExample")
142+
Optional<T> selectOneByExample(Example<T> example);
143+
144+
@Override
145+
@Lang(Caching.class)
146+
@SelectProvider(type = ExampleProvider.class, method = "countByExample")
147+
long countByExample(Example<T> example);
148+
149+
@Override
150+
List<T> selectByExample(Example<T> example, RowBounds rowBounds);
151+
152+
/* ExampleMapper --- */
153+
}

0 commit comments

Comments
 (0)