提交 5677b719 编写于 作者: M MaxKey

find

上级 6be4ebc4
......@@ -48,7 +48,9 @@ public interface IJpaBaseMapper<T> {
* @return one
*/
@SelectProvider(type = MapperSqlProvider.class, method = "get")
public T get(@Param ("entityClass")Class<?> entityClass,@Param ("id") String id);
public T get(
@Param ("entityClass")Class<?> entityClass,
@Param ("id") String id);
//follow function for insert update and delete
......@@ -71,13 +73,25 @@ public interface IJpaBaseMapper<T> {
* @return
*/
@DeleteProvider(type = MapperSqlProvider.class, method = "remove")
public Integer remove(@Param ("entityClass")Class<?> entityClass,@Param ("id") String id);
public Integer remove( @Param ("entityClass")Class<?> entityClass,
@Param ("id") String id);
@DeleteProvider(type = MapperSqlProvider.class, method = "deleteBatch")
public Integer deleteBatch(@Param ("entityClass")Class<?> entityClass,@Param ("idList") List<String> idList);
public Integer deleteBatch(
@Param ("entityClass")Class<?> entityClass,
@Param ("idList") List<String> idList);
@DeleteProvider(type = MapperSqlProvider.class, method = "logicDelete")
public Integer logicDelete(@Param ("entityClass")Class<?> entityClass,@Param ("idList") List<String> idList);
public Integer logicDelete(
@Param ("entityClass") Class<?> entityClass,
@Param ("idList") List<String> idList);
@SelectProvider(type = MapperSqlProvider.class, method = "find")
public List<T> find( @Param ("entityClass") Class<?> entityClass,
@Param ("filter") String filter,
@Param ("args") Object[] args,
@Param ("argTypes") int[] argTypes);
}
......@@ -219,7 +219,10 @@ public class JpaBaseService <T extends JpaBaseEntity> {
return null;
}
/**
* findAll from table
* @return
*/
public List<T> findAll() {
try {
return getMapper().findAll(this.entityClass);
......@@ -229,6 +232,69 @@ public class JpaBaseService <T extends JpaBaseEntity> {
return null;
}
/**
* select with filter and args
*
* <pre>
* find(" StdNo = ? or StdNo = ?",new Object[]{"10024","10004"},new int[]{Types.VARCHAR,Types.INTEGER})
* </pre>
* @param filter
* @param args
* @param argTypes
* @return List<T>
*
*/
public List<T> find(String filter , Object[] args , int[] argTypes) {
try {
return getMapper().find(this.entityClass,filter ,args , argTypes);
} catch(Exception e) {
_logger.error("findAll Exception " , e);
}
return null;
}
/**
* select with filter
* <pre>
* find(" StdNo = '10024')
* </pre>
* @param filter
* @return List<T>
*/
public List<T> find(String filter) {
return find(filter ,null , null);
}
/**
* select with filter and args
* @param filter
* @param args
* @param argTypes
* @return T
*/
public T findOne(String filter , Object[] args , int[] argTypes) {
try {
List<T> findList = find(filter ,args , argTypes);
return (findList == null ||findList.size() == 0) ? null : findList.get(0);
} catch(Exception e) {
_logger.error("findAll Exception " , e);
}
return null;
}
/**
* select with filter
* <pre>
* find(" StdNo = '10024')
* </pre>
* @param filter
* @return T
*/
public T findOne(String filter) {
return findOne( filter ,null , null);
}
/**
* query one entity by entity
* @param entity
......@@ -259,16 +325,6 @@ public class JpaBaseService <T extends JpaBaseEntity> {
return null;
}
public T find(Class<T> entityClass,Object primaryKey) {
try {
_logger.debug("entityClass {} , primaryKey {}" , entityClass.toGenericString() , primaryKey);
return getMapper().get(entityClass,primaryKey.toString());
} catch(Exception e) {
_logger.error("find Exception " , e);
}
return null;
}
//follow function for insert update and delete
/**
* insert new entity
......
......@@ -55,6 +55,10 @@ public class MapperMetadata <T extends JpaBaseEntity>{
}
public static String ENTITY_CLASS = "entityClass";
public static String QUERY_FILTER = "filter";
public static String QUERY_ARGS = "args";
public static String QUERY_ARGTYPES = "argTypes";
/**
* 表名和字段名
*/
......
......@@ -45,12 +45,16 @@ public class MapperSqlProvider <T extends JpaBaseEntity>{
return new SqlProviderQuery().get(parametersMap);
}
public String find(Map<String, Object> parametersMap) throws Exception {
return new SqlProviderQuery().find(parametersMap);
}
public String findAll(Map<String, Object> parametersMap) {
return new SqlProviderQuery().findAll(parametersMap);
}
public String remove(Map<String, Object> parametersMap) {
return new SqlProviderDelete().execute(parametersMap);
return new SqlProviderDelete().remove(parametersMap);
}
public String deleteBatch(Map<String, Object> parametersMap) {
......@@ -66,7 +70,7 @@ public class MapperSqlProvider <T extends JpaBaseEntity>{
* @return insert sql String
*/
public String insert(T entity) {
return new SqlProviderInsert().execute(entity);
return new SqlProviderInsert().insert(entity);
}
/**
......@@ -74,7 +78,7 @@ public class MapperSqlProvider <T extends JpaBaseEntity>{
* @return update sql String
*/
public String update(T entity) {
return new SqlProviderUpdate().execute(entity);
return new SqlProviderUpdate().update(entity);
}
/**
......@@ -86,7 +90,7 @@ public class MapperSqlProvider <T extends JpaBaseEntity>{
}
public String query(T entity) {
return new SqlProviderQuery().execute(entity);
return new SqlProviderQuery().query(entity);
}
}
......@@ -38,7 +38,7 @@ public class SqlProviderDelete <T extends JpaBaseEntity>{
private static final Logger _logger = LoggerFactory.getLogger(SqlProviderDelete.class);
public String execute(Map<String, Object> parametersMap) {
public String remove(Map<String, Object> parametersMap) {
Class<?> entityClass=(Class<?>)parametersMap.get(MapperMetadata.ENTITY_CLASS);
MapperMetadata.buildColumnList(entityClass);
if (MapperMetadata.sqlsMap.containsKey(MapperMetadata.getTableName(entityClass) + SQL_TYPE.REMOVE_SQL)) {
......
......@@ -43,7 +43,7 @@ public class SqlProviderInsert <T extends JpaBaseEntity>{
* @param entity
* @return insert sql String
*/
public String execute(T entity) {
public String insert(T entity) {
MapperMetadata.buildColumnList(entity.getClass());
List<FieldColumnMapper> listFields = MapperMetadata.fieldsMap.get(entity.getClass().getSimpleName());
......
......@@ -20,7 +20,10 @@
*/
package org.apache.mybatis.jpa.persistence.provider;
import java.sql.Types;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.jdbc.SQL;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.ParameterMapping;
......@@ -81,8 +84,61 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
MapperMetadata.sqlsMap.put(MapperMetadata.getTableName(entityClass) + SQL_TYPE.FINDALL_SQL,findAllSql);
return findAllSql;
}
public String find(Map<String, Object> parametersMap) throws Exception {
Class<?> entityClass=(Class<?>) parametersMap.get(MapperMetadata.ENTITY_CLASS);
Object[] args = (Object[]) parametersMap.get(MapperMetadata.QUERY_ARGS);
int[] argTypes = (int[]) parametersMap.get(MapperMetadata.QUERY_ARGTYPES);
String filterSql = parametersMap.get(MapperMetadata.QUERY_FILTER).toString().trim();
MapperMetadata.buildColumnList(entityClass);
if(filterSql.toLowerCase().startsWith("where")) {
filterSql = filterSql.substring(5);
}
if(args == null || args.length == 0) {
filterSql = replace(filterSql);
}else {
int countMatches = StringUtils.countMatches(filterSql, "?");
if(args.length < countMatches) {
_logger.error("args length {} < parameter placeholder {}" , countMatches,args.length);
throw new Exception("args length < parameter placeholder");
}
String filterSqls [] = filterSql.split("\\?");
StringBuffer sqlBuffer = new StringBuffer("");
for(int i = 0 ;i < args.length ; i++){
_logger.trace("Find args[{}] {}" , i, args[i]);
if(argTypes[i] == Types.VARCHAR ||argTypes[i] == Types.NVARCHAR
||argTypes[i] == Types.CHAR||argTypes[i] == Types.NCHAR
||argTypes[i] == Types.LONGVARCHAR ||argTypes[i] == Types.LONGNVARCHAR) {
sqlBuffer
.append(filterSqls[i])
.append("'")
.append(args[i].toString().replaceAll("'", ""))
.append("'");
}else {
sqlBuffer
.append(filterSqls[i])
.append(args[i]);
}
}
filterSql = replace(sqlBuffer.toString());
}
SQL sql=new SQL()
.SELECT(selectColumnMapper(entityClass))
.FROM(MapperMetadata.getTableName(entityClass)+" sel_tmp_table ")
.WHERE(filterSql);
String findSql = sql.toString();
_logger.trace("Find SQL \n" + findSql);
public String execute(T entity) {
return findSql;
}
public String query(T entity) {
MapperMetadata.buildColumnList(entity.getClass());
SQL sql=new SQL()
.SELECT(selectColumnMapper(entity.getClass()))
......@@ -92,9 +148,8 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
String fieldValue = BeanUtil.getValue(entity, fieldColumnMapper.getFieldName());
String fieldType=fieldColumnMapper.getFieldType().toLowerCase();
_logger.trace("ColumnName "+fieldColumnMapper.getColumnName()
+" , FieldType "+fieldType
+" , value " + fieldValue);
_logger.trace("ColumnName {} , FieldType {} , value {}" ,
fieldColumnMapper.getColumnName(),fieldType, fieldValue);
if(fieldValue==null
||(fieldType.equals("string")&&fieldValue.equals(""))
......@@ -107,7 +162,7 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
) {
//skip null field value
}else {
sql.WHERE(fieldColumnMapper.getColumnName() + "=#{" + fieldColumnMapper.getFieldName() + "}");
sql.WHERE(fieldColumnMapper.getColumnName() + " = #{" + fieldColumnMapper.getFieldName() + "}");
}
}
......@@ -142,11 +197,8 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
PageResultsSqlCache pageResultsSqlCache =
JpaBaseService.pageResultsBoundSqlCache.getIfPresent(pagination.getPageResultSelectUUID());
//多个空格 tab 替换成1个空格
String selectSql = pageResultsSqlCache.getSql()
.replaceAll("\r\n+", " \n")
.replaceAll("\n+", " \n")
.replaceAll("\t", " ")
.replaceAll(" +"," ");
String selectSql = replace(pageResultsSqlCache.getSql());
BoundSql boundSql = (BoundSql)pageResultsSqlCache.getBoundSql();
_logger.trace("Count original SQL :\n{}" , selectSql);
......@@ -191,4 +243,11 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
return sql.toString();
}
public static String replace(String sql) {
return sql.replaceAll("\r\n+", " \n")
.replaceAll("\n+", " \n")
.replaceAll("\t", " ")
.replaceAll(" +"," ");
}
}
......@@ -41,7 +41,7 @@ public class SqlProviderUpdate <T extends JpaBaseEntity>{
* @param entity
* @return update sql String
*/
public String execute(T entity) {
public String update(T entity) {
MapperMetadata.buildColumnList(entity.getClass());
List<FieldColumnMapper> listFields = MapperMetadata.fieldsMap.get(entity.getClass().getSimpleName());
......
......@@ -17,6 +17,7 @@
package org.apache.mybatis.jpa.test;
import java.sql.Types;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
......@@ -79,6 +80,23 @@ public class MyBatisTestRunner {
}
@Test
public void find() throws Exception{
_logger.info("find...");
_logger.info("find by filter "
+ service.find(" StdNo = '10024' or StdNo = '10004'")
);
_logger.info("find by filter with args "
+ service.find(
" StdNo = ? or StdNo = ? ",
new Object[]{"10024","10004"},
new int[]{Types.VARCHAR,Types.INTEGER}
)
);
}
@Test
public void get() throws Exception{
_logger.info("get...");
......@@ -105,17 +123,6 @@ public class MyBatisTestRunner {
_logger.info("updateed2.");
}
@Test
public void find() throws Exception{
_logger.info("find...");
Students student=service.find(Students.class,"317d5eda-927c-4871-a916-472a8062df23");
System.out.println("Students "+student);
_logger.info("Students "+student);
}
@Test
public void remove() throws Exception{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册