Skip to content

Dev #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Jan 31, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<groupId>com.codingapi</groupId>
<artifactId>simple-mybatis</artifactId>
<version>1.1.0</version>
<version>1.2.0</version>
<name>simple-mybatis</name>
<url>https://github.com/codingapi/simple-mybatis</url>
<description>simple mybatis project for Spring Boot</description>
Expand Down
87 changes: 32 additions & 55 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public class Demo implements ITree<Long>{ //ITree根据业务需要可不实现
int save(T t);

//批量保存
int saveAll(@Param("list") List<T> list);
int saveAll(List<T> list);

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

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

//通过Id直接删除
int deleteById(@Param("id") Object id);
int deleteById(Object id);

//通过Id批量删除
int deleteAllById(@Param("list") List id);
int deleteAllById(List id);
```

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

//通过Id查询
T getById(@Param("id") Object id);
T getById(Object id);

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

//通过Query查询数据
List<T> query(@Param("query") Query query);
List<T> query(Query query);

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

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

* 用户根据自己的Mapper来选择集成对应的功能接口

```java
@Mapper
public interface DemoMapper extends QueryMapper<Demo>,IPageQuery<Demo>,ITreeQuery<Demo,Long> {


}

@Mapper
public interface DemoMapper extends SimpleMapper<Demo> {


}
@Mapper
public interface DemoMapper extends CommandMapper<Demo> {


}

```


* query使用说明
query 通过QueryBuilder来创建,当查询返回的是表的数据,则不需要写select语句,直接拼接where()查询条件。
若查询返回的是视图格式的数据则需要写select语句,select语句中可以写join关联.
select语句中的字段可以用下划线,也可以直接处理成小驼峰。都可以转成java bean对象。
```java
@Test
void viewList(){
//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
List<DemoView> list =
demoMapper.queryView(
DemoView.class,
QueryBuilder.Build()
.select("select d.name,d.super_id from t_demo d join t_test t on t.demo_id = d.id ")
.where()
.date("d.time","2020-04-12")
.or()
.equal("d.id",31)
.and()
.in("d.id",1,2,3,4,5,6,7,8,9,10)
.and()
.like("d.name","2")
.orderBy("d.name desc")
.builder());
log.info("list:{}",list);
}

@Test
void queryList(){
//select * from t_demo where name = '123'
List<Demo> list = demoMapper.query(QueryBuilder.Build().where().equal("name","123").builder());
log.info("list:{}",list);
}
void viewList(){
List<DemoView> list =
demoMapper.queryView(
DemoView.class,
QueryBuilder.Build()
.select("select * from t_demo d left join t_refrigerator r on d.id = r.ID ")
.where()
.condition("d.id between #{small} and #{larger}", Map.of("small",1,"larger",10))
.or()
.condition("r.state = #{state}",1)
.and()
.condition("d.id in (${ids})",1,2,3,4,5,6,7,8,9,10)
.or()
.condition("d.name like '%${name}%'","2")
.orderBy("d.id desc")
.builder());
log.info("list:{}",list);
}

@Test
void queryList(){
//select * from t_demo where name = '123'
List<Demo> list = demoMapper.query(QueryBuilder.Build().where().condition("name=#{name}","123").builder());
log.info("list:{}",list);
}
```
## 示例

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,14 @@ public interface QueryMapper<T> extends BaseMapper<T> {
@SelectProvider(type = QueryProvider.class, method = "queryView")
List<Map<String, Object>> queryMap(@Param("query") Query query);

@SuppressWarnings("unchecked")
default <V> List<V> queryView(Class<V> clazz, Query query) {
List<Map<String, Object>> list = queryMap(query);
return list.stream().map(item -> {
MapCamelUtils.camelMap(item);
if (Map.class.isAssignableFrom(clazz)) {
return (V) item;
}
return MapBeanUtils.toBean(clazz, item);
}).collect(Collectors.toList());
}
Expand Down
45 changes: 45 additions & 0 deletions src/main/java/com/codingapi/simplemybatis/mapper/ViewMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.codingapi.simplemybatis.mapper;

import com.codingapi.simplemybatis.page.PageList;
import com.codingapi.simplemybatis.page.PageRequest;
import com.codingapi.simplemybatis.provider.QueryProvider;
import com.codingapi.simplemybatis.query.Query;
import com.codingapi.simplemybatis.utils.MapBeanUtils;
import com.codingapi.simplemybatis.utils.MapCamelUtils;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;

import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
import java.util.stream.Collectors;

/**
* @author lorne
* @date 2020/4/27
*/
public interface ViewMapper {

@SelectProvider(type = QueryProvider.class, method = "queryView")
List<Map<String, Object>> queryMap(@Param("query") Query query);

default <V> List<V> queryView(Class<V> clazz, Query query) {
List<Map<String, Object>> list = queryMap(query);
return list.stream().map(item -> {
MapCamelUtils.camelMap(item);
return MapBeanUtils.toBean(clazz, item);
}).collect(Collectors.toList());
}

default <T> PageList<T> page(int nowPage, int pageSize, Supplier<List<T>> supplier) {
PageHelper.startPage(nowPage, pageSize);
return new PageList<>(supplier.get());
}

default <T> PageList<T> page(PageRequest request, Supplier<List<T>> supplier) {
return page(request.getNowPage(), request.getPageSize(), supplier);
}


}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.codingapi.simplemybatis.parser;

import com.codingapi.simplemybatis.query.Query;
import com.codingapi.simplemybatis.query.QuerySqlBuilder;
import com.codingapi.simplemybatis.query.SqlBuilder;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
Expand Down Expand Up @@ -37,14 +37,14 @@ public String createSelectAll() {
}

public String createQuery(Query query) {
QuerySqlBuilder querySqlBuilder = new QuerySqlBuilder(tableInfo.columnToFiled(), tableInfo.getTableName(), query);
return querySqlBuilder.getSql();
SqlBuilder sqlBuilder = new SqlBuilder(tableInfo.columnToFiled(), tableInfo.getTableName(), query);
return sqlBuilder.getSql();
}


public String createUpdateSql() {
if (tableInfo.getIdColumnFiled().getValue() == null) {
throw new RuntimeException("no Id value,do't create update sql.");
throw new RuntimeException("no Id value,don't create update sql.");
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("update ");
Expand Down
17 changes: 7 additions & 10 deletions src/main/java/com/codingapi/simplemybatis/parser/TableParser.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.codingapi.simplemybatis.parser;

import com.codingapi.simplemybatis.properties.DbProperties.ColumnNameStyle;
import com.codingapi.simplemybatis.properties.GlabelProperties;
import com.codingapi.simplemybatis.properties.SimpleMybatisProperties.ColumnNameStyle;
import com.codingapi.simplemybatis.properties.SimpleMybatisPropertiesContext;
import com.codingapi.simplemybatis.utils.StringCharacterUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -36,21 +36,23 @@ public class TableParser {

public TableParser(Class<?> clazz) {
this.clazz = clazz;
columnNameStyle = GlabelProperties.getInstance().getColumnNameStyle();
columnNameStyle = SimpleMybatisPropertiesContext.getInstance().getColumnNameStyle();
propertyDescriptors = PropertyUtils.getPropertyDescriptors(clazz);
columns = new ArrayList<>();
loadTableName();
}


public void parser(Object obj) throws IllegalAccessException, InvocationTargetException {
public TableInfo parser(Object obj) throws IllegalAccessException, InvocationTargetException {
loadColumnNames(obj);
return new TableInfo(tableName, idColumn, columns);
}

private void loadColumnNames(Object obj) throws IllegalAccessException, InvocationTargetException {
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if(field.isSynthetic()){
Method method = getFieldMethod(field);
if(method==null||field.isSynthetic()){
continue;
}
Transient transientField = field.getAnnotation(Transient.class);
Expand All @@ -61,7 +63,6 @@ private void loadColumnNames(Object obj) throws IllegalAccessException, Invocati
Id id = field.getAnnotation(Id.class);
if (id != null) {
String idColumnName = getColumnName(field.getAnnotation(Column.class), field);
Method method = getFieldMethod(field);
Object idValue = getFieldValue(method, obj);
String fieldName = field.getName();
idColumn = new ColumnFiled(fieldName, idColumnName, idValue, method);
Expand All @@ -70,7 +71,6 @@ private void loadColumnNames(Object obj) throws IllegalAccessException, Invocati
}
Column column = field.getAnnotation(Column.class);
String columnName = getColumnName(column, field);
Method method = getFieldMethod(field);
Object value = getFieldValue(method, obj);
columns.add(new ColumnFiled(field.getName(), columnName, value, method));
}
Expand Down Expand Up @@ -139,9 +139,6 @@ private String getColumnStyleName(String name) {
}
}

public TableInfo getTableInfo() {
return new TableInfo(tableName, idColumn, columns);
}


public static class ColumnFiled {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.codingapi.simplemybatis.properties;


public class DbProperties {
public class SimpleMybatisProperties {

private ColumnNameStyle columnNameStyle = ColumnNameStyle.UNDERLINE;

Expand All @@ -12,4 +12,8 @@ public enum ColumnNameStyle {
public ColumnNameStyle getColumnNameStyle() {
return columnNameStyle;
}

public void setColumnNameStyle(ColumnNameStyle columnNameStyle) {
this.columnNameStyle = columnNameStyle;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.codingapi.simplemybatis.properties;


import com.codingapi.simplemybatis.properties.SimpleMybatisProperties.ColumnNameStyle;

public class SimpleMybatisPropertiesContext {

private static SimpleMybatisPropertiesContext instance;

public static SimpleMybatisPropertiesContext getInstance() {
if(instance==null){
synchronized (SimpleMybatisPropertiesContext.class){
instance = new SimpleMybatisPropertiesContext();
}
}
return instance;
}

private final SimpleMybatisProperties simpleMybatisProperties;

private SimpleMybatisPropertiesContext() {
simpleMybatisProperties = new SimpleMybatisProperties();
}

public void setColumnNameStyle(ColumnNameStyle columnNameStyle) {
simpleMybatisProperties.setColumnNameStyle(columnNameStyle);
}

public ColumnNameStyle getColumnNameStyle() {
return simpleMybatisProperties.getColumnNameStyle();
}


}
Loading