Skip to content

Commit 76c5c41

Browse files
authored
Merge pull request #2 from codingapi/dev
Dev
2 parents ee69b91 + 974474e commit 76c5c41

33 files changed

+461
-561
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>com.codingapi</groupId>
77
<artifactId>simple-mybatis</artifactId>
8-
<version>1.1.0</version>
8+
<version>1.2.0</version>
99
<name>simple-mybatis</name>
1010
<url>https://github.com/codingapi/simple-mybatis</url>
1111
<description>simple mybatis project for Spring Boot</description>

readme.md

Lines changed: 32 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public class Demo implements ITree<Long>{ //ITree根据业务需要可不实现
5858
int save(T t);
5959

6060
//批量保存
61-
int saveAll(@Param("list") List<T> list);
61+
int saveAll(List<T> list);
6262

6363
//修改数据,修改数据只会替换非null对象
6464
int update(T t);
@@ -67,29 +67,29 @@ public class Demo implements ITree<Long>{ //ITree根据业务需要可不实现
6767
int delete(T t);
6868

6969
//批量删除,删除条件为Id
70-
int deleteAll(@Param("list") List<T> list);
70+
int deleteAll(List<T> list);
7171

7272
//通过Id直接删除
73-
int deleteById(@Param("id") Object id);
73+
int deleteById(Object id);
7474

7575
//通过Id批量删除
76-
int deleteAllById(@Param("list") List id);
76+
int deleteAllById(List id);
7777
```
7878

7979
* `QueryMapper`提供常用的查询操作
8080
```java
8181

8282
//通过Id查询
83-
T getById(@Param("id") Object id);
83+
T getById(Object id);
8484

8585
//查询属于数据
8686
List<T> findAll();
8787

8888
//通过Query查询数据
89-
List<T> query(@Param("query") Query query);
89+
List<T> query(Query query);
9090

9191
//通过Query查询试图数据,返回List Map对象
92-
List<Map<String,Object>> queryMap(@Param("query") Query query);
92+
List<Map<String,Object>> queryMap(Query query);
9393

9494
//通过Query查询试图数据,返回List Bean对象
9595
<V> List<V> queryView(Class<V> clazz, Query query);
@@ -117,61 +117,38 @@ public class Demo implements ITree<Long>{ //ITree根据业务需要可不实现
117117
log.info("treeLists:{}",treeLists);
118118
```
119119

120-
* 用户根据自己的Mapper来选择集成对应的功能接口
121-
122-
```java
123-
@Mapper
124-
public interface DemoMapper extends QueryMapper<Demo>,IPageQuery<Demo>,ITreeQuery<Demo,Long> {
125-
126-
127-
}
128-
129-
@Mapper
130-
public interface DemoMapper extends SimpleMapper<Demo> {
131-
132-
133-
}
134-
@Mapper
135-
public interface DemoMapper extends CommandMapper<Demo> {
136-
137-
138-
}
139-
140-
```
141-
142120

143121
* query使用说明
144122
query 通过QueryBuilder来创建,当查询返回的是表的数据,则不需要写select语句,直接拼接where()查询条件。
145123
若查询返回的是视图格式的数据则需要写select语句,select语句中可以写join关联.
146124
select语句中的字段可以用下划线,也可以直接处理成小驼峰。都可以转成java bean对象。
147125
```java
148126
@Test
149-
void viewList(){
150-
//select d.name,d.super_id from t_demo d join t_test t on t.demo_id = d.id where d.time = STR_TO_DATE('2020-04-12','%Y-$m-%d') or d.id = 31 and d.id in (1,2,3,4,5,6,7,8,9,10) and d.name like '%2%' order by d.name desc
151-
List<DemoView> list =
152-
demoMapper.queryView(
153-
DemoView.class,
154-
QueryBuilder.Build()
155-
.select("select d.name,d.super_id from t_demo d join t_test t on t.demo_id = d.id ")
156-
.where()
157-
.date("d.time","2020-04-12")
158-
.or()
159-
.equal("d.id",31)
160-
.and()
161-
.in("d.id",1,2,3,4,5,6,7,8,9,10)
162-
.and()
163-
.like("d.name","2")
164-
.orderBy("d.name desc")
165-
.builder());
166-
log.info("list:{}",list);
167-
}
168-
169-
@Test
170-
void queryList(){
171-
//select * from t_demo where name = '123'
172-
List<Demo> list = demoMapper.query(QueryBuilder.Build().where().equal("name","123").builder());
173-
log.info("list:{}",list);
174-
}
127+
void viewList(){
128+
List<DemoView> list =
129+
demoMapper.queryView(
130+
DemoView.class,
131+
QueryBuilder.Build()
132+
.select("select * from t_demo d left join t_refrigerator r on d.id = r.ID ")
133+
.where()
134+
.condition("d.id between #{small} and #{larger}", Map.of("small",1,"larger",10))
135+
.or()
136+
.condition("r.state = #{state}",1)
137+
.and()
138+
.condition("d.id in (${ids})",1,2,3,4,5,6,7,8,9,10)
139+
.or()
140+
.condition("d.name like '%${name}%'","2")
141+
.orderBy("d.id desc")
142+
.builder());
143+
log.info("list:{}",list);
144+
}
145+
146+
@Test
147+
void queryList(){
148+
//select * from t_demo where name = '123'
149+
List<Demo> list = demoMapper.query(QueryBuilder.Build().where().condition("name=#{name}","123").builder());
150+
log.info("list:{}",list);
151+
}
175152
```
176153
## 示例
177154

src/main/java/com/codingapi/simplemybatis/mapper/QueryMapper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,14 @@ public interface QueryMapper<T> extends BaseMapper<T> {
3030
@SelectProvider(type = QueryProvider.class, method = "queryView")
3131
List<Map<String, Object>> queryMap(@Param("query") Query query);
3232

33+
@SuppressWarnings("unchecked")
3334
default <V> List<V> queryView(Class<V> clazz, Query query) {
3435
List<Map<String, Object>> list = queryMap(query);
3536
return list.stream().map(item -> {
3637
MapCamelUtils.camelMap(item);
38+
if (Map.class.isAssignableFrom(clazz)) {
39+
return (V) item;
40+
}
3741
return MapBeanUtils.toBean(clazz, item);
3842
}).collect(Collectors.toList());
3943
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.codingapi.simplemybatis.mapper;
2+
3+
import com.codingapi.simplemybatis.page.PageList;
4+
import com.codingapi.simplemybatis.page.PageRequest;
5+
import com.codingapi.simplemybatis.provider.QueryProvider;
6+
import com.codingapi.simplemybatis.query.Query;
7+
import com.codingapi.simplemybatis.utils.MapBeanUtils;
8+
import com.codingapi.simplemybatis.utils.MapCamelUtils;
9+
import com.github.pagehelper.PageHelper;
10+
import org.apache.ibatis.annotations.Param;
11+
import org.apache.ibatis.annotations.SelectProvider;
12+
13+
import java.util.List;
14+
import java.util.Map;
15+
import java.util.function.Supplier;
16+
import java.util.stream.Collectors;
17+
18+
/**
19+
* @author lorne
20+
* @date 2020/4/27
21+
*/
22+
public interface ViewMapper {
23+
24+
@SelectProvider(type = QueryProvider.class, method = "queryView")
25+
List<Map<String, Object>> queryMap(@Param("query") Query query);
26+
27+
default <V> List<V> queryView(Class<V> clazz, Query query) {
28+
List<Map<String, Object>> list = queryMap(query);
29+
return list.stream().map(item -> {
30+
MapCamelUtils.camelMap(item);
31+
return MapBeanUtils.toBean(clazz, item);
32+
}).collect(Collectors.toList());
33+
}
34+
35+
default <T> PageList<T> page(int nowPage, int pageSize, Supplier<List<T>> supplier) {
36+
PageHelper.startPage(nowPage, pageSize);
37+
return new PageList<>(supplier.get());
38+
}
39+
40+
default <T> PageList<T> page(PageRequest request, Supplier<List<T>> supplier) {
41+
return page(request.getNowPage(), request.getPageSize(), supplier);
42+
}
43+
44+
45+
}

src/main/java/com/codingapi/simplemybatis/parser/SqlParser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.codingapi.simplemybatis.parser;
22

33
import com.codingapi.simplemybatis.query.Query;
4-
import com.codingapi.simplemybatis.query.QuerySqlBuilder;
4+
import com.codingapi.simplemybatis.query.SqlBuilder;
55

66
import java.lang.reflect.InvocationTargetException;
77
import java.util.List;
@@ -37,14 +37,14 @@ public String createSelectAll() {
3737
}
3838

3939
public String createQuery(Query query) {
40-
QuerySqlBuilder querySqlBuilder = new QuerySqlBuilder(tableInfo.columnToFiled(), tableInfo.getTableName(), query);
41-
return querySqlBuilder.getSql();
40+
SqlBuilder sqlBuilder = new SqlBuilder(tableInfo.columnToFiled(), tableInfo.getTableName(), query);
41+
return sqlBuilder.getSql();
4242
}
4343

4444

4545
public String createUpdateSql() {
4646
if (tableInfo.getIdColumnFiled().getValue() == null) {
47-
throw new RuntimeException("no Id value,do't create update sql.");
47+
throw new RuntimeException("no Id value,don't create update sql.");
4848
}
4949
StringBuilder stringBuilder = new StringBuilder();
5050
stringBuilder.append("update ");

src/main/java/com/codingapi/simplemybatis/parser/TableParser.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.codingapi.simplemybatis.parser;
22

3-
import com.codingapi.simplemybatis.properties.DbProperties.ColumnNameStyle;
4-
import com.codingapi.simplemybatis.properties.GlabelProperties;
3+
import com.codingapi.simplemybatis.properties.SimpleMybatisProperties.ColumnNameStyle;
4+
import com.codingapi.simplemybatis.properties.SimpleMybatisPropertiesContext;
55
import com.codingapi.simplemybatis.utils.StringCharacterUtils;
66
import org.apache.commons.beanutils.PropertyUtils;
77
import org.apache.commons.lang3.StringUtils;
@@ -36,21 +36,23 @@ public class TableParser {
3636

3737
public TableParser(Class<?> clazz) {
3838
this.clazz = clazz;
39-
columnNameStyle = GlabelProperties.getInstance().getColumnNameStyle();
39+
columnNameStyle = SimpleMybatisPropertiesContext.getInstance().getColumnNameStyle();
4040
propertyDescriptors = PropertyUtils.getPropertyDescriptors(clazz);
4141
columns = new ArrayList<>();
4242
loadTableName();
4343
}
4444

4545

46-
public void parser(Object obj) throws IllegalAccessException, InvocationTargetException {
46+
public TableInfo parser(Object obj) throws IllegalAccessException, InvocationTargetException {
4747
loadColumnNames(obj);
48+
return new TableInfo(tableName, idColumn, columns);
4849
}
4950

5051
private void loadColumnNames(Object obj) throws IllegalAccessException, InvocationTargetException {
5152
Field[] fields = clazz.getDeclaredFields();
5253
for (Field field : fields) {
53-
if(field.isSynthetic()){
54+
Method method = getFieldMethod(field);
55+
if(method==null||field.isSynthetic()){
5456
continue;
5557
}
5658
Transient transientField = field.getAnnotation(Transient.class);
@@ -61,7 +63,6 @@ private void loadColumnNames(Object obj) throws IllegalAccessException, Invocati
6163
Id id = field.getAnnotation(Id.class);
6264
if (id != null) {
6365
String idColumnName = getColumnName(field.getAnnotation(Column.class), field);
64-
Method method = getFieldMethod(field);
6566
Object idValue = getFieldValue(method, obj);
6667
String fieldName = field.getName();
6768
idColumn = new ColumnFiled(fieldName, idColumnName, idValue, method);
@@ -70,7 +71,6 @@ private void loadColumnNames(Object obj) throws IllegalAccessException, Invocati
7071
}
7172
Column column = field.getAnnotation(Column.class);
7273
String columnName = getColumnName(column, field);
73-
Method method = getFieldMethod(field);
7474
Object value = getFieldValue(method, obj);
7575
columns.add(new ColumnFiled(field.getName(), columnName, value, method));
7676
}
@@ -139,9 +139,6 @@ private String getColumnStyleName(String name) {
139139
}
140140
}
141141

142-
public TableInfo getTableInfo() {
143-
return new TableInfo(tableName, idColumn, columns);
144-
}
145142

146143

147144
public static class ColumnFiled {

src/main/java/com/codingapi/simplemybatis/properties/GlabelProperties.java

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/main/java/com/codingapi/simplemybatis/properties/DbProperties.java renamed to src/main/java/com/codingapi/simplemybatis/properties/SimpleMybatisProperties.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.codingapi.simplemybatis.properties;
22

33

4-
public class DbProperties {
4+
public class SimpleMybatisProperties {
55

66
private ColumnNameStyle columnNameStyle = ColumnNameStyle.UNDERLINE;
77

@@ -12,4 +12,8 @@ public enum ColumnNameStyle {
1212
public ColumnNameStyle getColumnNameStyle() {
1313
return columnNameStyle;
1414
}
15+
16+
public void setColumnNameStyle(ColumnNameStyle columnNameStyle) {
17+
this.columnNameStyle = columnNameStyle;
18+
}
1519
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.codingapi.simplemybatis.properties;
2+
3+
4+
import com.codingapi.simplemybatis.properties.SimpleMybatisProperties.ColumnNameStyle;
5+
6+
public class SimpleMybatisPropertiesContext {
7+
8+
private static SimpleMybatisPropertiesContext instance;
9+
10+
public static SimpleMybatisPropertiesContext getInstance() {
11+
if(instance==null){
12+
synchronized (SimpleMybatisPropertiesContext.class){
13+
instance = new SimpleMybatisPropertiesContext();
14+
}
15+
}
16+
return instance;
17+
}
18+
19+
private final SimpleMybatisProperties simpleMybatisProperties;
20+
21+
private SimpleMybatisPropertiesContext() {
22+
simpleMybatisProperties = new SimpleMybatisProperties();
23+
}
24+
25+
public void setColumnNameStyle(ColumnNameStyle columnNameStyle) {
26+
simpleMybatisProperties.setColumnNameStyle(columnNameStyle);
27+
}
28+
29+
public ColumnNameStyle getColumnNameStyle() {
30+
return simpleMybatisProperties.getColumnNameStyle();
31+
}
32+
33+
34+
}

0 commit comments

Comments
 (0)