日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

springboot封装统一查询对象进行多条件查询案例(mybatis和mybatis-plus+反射两种版本)

發(fā)布時間:2024/9/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot封装统一查询对象进行多条件查询案例(mybatis和mybatis-plus+反射两种版本) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • mybatis版本:
    • 通用查詢接口
    • 封裝輔助查詢類:
    • 通用controller:
    • 自定義注解
    • controller service mapper測試
  • mybatis-plus實現(xiàn)版本
    • entity
    • 自定義注解
    • 自定義輔助查詢類(利用反射)
    • controller
    • service

界面:

mybatis版本:

通用查詢接口

  • 功能:1、單條查詢 2、分頁+搜索 3、查詢數(shù)量
public interface ICommonQuery {/*** 根據(jù)id查詢明細。** @param id 資源id* @return 資源*/Object selectOne(Long id) throws Exception;/*** 自定義查詢** @param parameterMap 查詢參數(shù)* @return 查詢結(jié)果*/List<?> select(Map<String, String> parameterMap) throws Exception;/*** 查詢數(shù)量** @param parameterMap 查詢參數(shù)* @return 查詢結(jié)果*/Long counts(Map<String, String> parameterMap) throws Exception;/*** 新增數(shù)據(jù)** @param obj* @return*/int insert(JSONObject obj, HttpServletRequest request) throws Exception;/*** 更新數(shù)據(jù)** @param obj* @return*/int update(JSONObject obj, HttpServletRequest request) throws Exception;/*** 刪除數(shù)據(jù)** @param id* @return*/int delete(Long id, HttpServletRequest request) throws Exception;/*** 批量刪除數(shù)據(jù)** @param ids* @return*/int deleteBatch(String ids, HttpServletRequest request) throws Exception;/*** 查詢名稱是否存在** @param id* @return*/int checkIsNameExist(Long id, String name) throws Exception; }

封裝輔助查詢類:

@Service public class CommonQueryManager {@Resourceprivate InterfaceContainer container;/*** 查詢單條** @param apiName 接口名稱* @param id ID*/public Object selectOne(String apiName, Long id) throws Exception {if (StringUtil.isNotEmpty(apiName) && id!=null) {return container.getCommonQuery(apiName).selectOne(id);}return null;}/*** 查詢* @param apiName* @param parameterMap* @return*/public List<?> select(String apiName, Map<String, String> parameterMap)throws Exception {if (StringUtil.isNotEmpty(apiName)) {return container.getCommonQuery(apiName).select(parameterMap);}return new ArrayList<Object>();}/*** 計數(shù)* @param apiName* @param parameterMap* @return*/public Long counts(String apiName, Map<String, String> parameterMap)throws Exception {if (StringUtil.isNotEmpty(apiName)) {return container.getCommonQuery(apiName).counts(parameterMap);}return BusinessConstants.DEFAULT_LIST_NULL_NUMBER;}/*** 插入* @param apiName* @param obj* @return*/@Transactional(value = "transactionManager", rollbackFor = Exception.class)public int insert(String apiName, JSONObject obj, HttpServletRequest request) throws Exception{if (StringUtil.isNotEmpty(apiName)) {return container.getCommonQuery(apiName).insert(obj, request);}return 0;}/*** 更新* @param apiName* @param obj* @return*/@Transactional(value = "transactionManager", rollbackFor = Exception.class)public int update(String apiName, JSONObject obj, HttpServletRequest request)throws Exception {if (StringUtil.isNotEmpty(apiName)) {return container.getCommonQuery(apiName).update(obj, request);}return 0;}/*** 刪除* @param apiName* @param id* @return*/@Transactional(value = "transactionManager", rollbackFor = Exception.class)public int delete(String apiName, Long id, HttpServletRequest request)throws Exception {if (StringUtil.isNotEmpty(apiName)) {return container.getCommonQuery(apiName).delete(id, request);}return 0;}/*** 批量刪除* @param apiName* @param ids* @return*/@Transactional(value = "transactionManager", rollbackFor = Exception.class)public int deleteBatch(String apiName, String ids, HttpServletRequest request)throws Exception {if (StringUtil.isNotEmpty(apiName)) {return container.getCommonQuery(apiName).deleteBatch(ids, request);}return 0;}/*** 判斷是否存在* @param apiName* @param id* @param name* @return*/public int checkIsNameExist(String apiName, Long id, String name) throws Exception{if (StringUtil.isNotEmpty(apiName)) {return container.getCommonQuery(apiName).checkIsNameExist(id, name);}return 0;}}

CommonQueryManager中的成員變量InterfaceContainer類:

@Service public class InterfaceContainer {private final Map<String, ICommonQuery> configComponentMap = new HashMap<>();@Autowired(required = false)private synchronized void init(ICommonQuery[] configComponents) {for (ICommonQuery configComponent : configComponents) {ResourceInfo info = AnnotationUtils.getAnnotation(configComponent, ResourceInfo.class);if (info != null) {configComponentMap.put(info.value(), configComponent);}}}public ICommonQuery getCommonQuery(String apiName) {return configComponentMap.get(apiName);} }

通過

public List<?> select(String apiName, Map<String, String> parameterMap)throws Exception {if (StringUtil.isNotEmpty(apiName)) {return container.getCommonQuery(apiName).select(parameterMap);}return new ArrayList<Object>(); }

來對不同接口進行分別查詢
通過

public Long counts(String apiName, Map<String, String> parameterMap)throws Exception {if (StringUtil.isNotEmpty(apiName)) {return container.getCommonQuery(apiName).counts(parameterMap);}return BusinessConstants.DEFAULT_LIST_NULL_NUMBER;}

來對某一個接口進行條件查詢,其中parameterMap是自己傳入的參數(shù):
驗證:
在上面的方法中加上

parameterMap.entrySet().forEach(e->{log.info(e.getKey()+":"+e.getValue());});

搜索框輸入:


控制臺:

輸入:

控制臺:

通用controller:

@RestController public class ResourceController {@Resourceprivate CommonQueryManager configResourceManager;@GetMapping(value = "/{apiName}/info")public String getList(@PathVariable("apiName") String apiName,@RequestParam("id") Long id,HttpServletRequest request) throws Exception {Object obj = configResourceManager.selectOne(apiName, id);Map<String, Object> objectMap = new HashMap<String, Object>();if(obj != null) {objectMap.put("info", obj);return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);} else {return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);}}@GetMapping(value = "/{apiName}/list")public String getList(@PathVariable("apiName") String apiName,@RequestParam(value = Constants.PAGE_SIZE, required = false) Integer pageSize,@RequestParam(value = Constants.CURRENT_PAGE, required = false) Integer currentPage,@RequestParam(value = Constants.SEARCH, required = false) String search,HttpServletRequest request)throws Exception {Map<String, String> parameterMap = ParamUtils.requestToMap(request);parameterMap.put(Constants.SEARCH, search);Map<String, Object> objectMap = new HashMap<String, Object>();if (pageSize != null && pageSize <= 0) {pageSize = 10;}String offset = ParamUtils.getPageOffset(currentPage, pageSize);if (StringUtil.isNotEmpty(offset)) {parameterMap.put(Constants.OFFSET, offset);}List<?> list = configResourceManager.select(apiName, parameterMap);if (list != null) {System.out.println("訪問接口:"+apiName);objectMap.put("total", configResourceManager.counts(apiName, parameterMap));objectMap.put("rows", list);return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);} else {objectMap.put("total", BusinessConstants.DEFAULT_LIST_NULL_NUMBER);objectMap.put("rows", new ArrayList<Object>());return returnJson(objectMap, "查找不到數(shù)據(jù)", ErpInfo.OK.code);}}@PostMapping(value = "/{apiName}/add", produces = {"application/javascript", "application/json"})public String addResource(@PathVariable("apiName") String apiName,@RequestBody JSONObject obj, HttpServletRequest request)throws Exception {Map<String, Object> objectMap = new HashMap<String, Object>();int insert = configResourceManager.insert(apiName, obj, request);if(insert > 0) {return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);} else if(insert == -1) {return returnJson(objectMap, ErpInfo.TEST_USER.name, ErpInfo.TEST_USER.code);} else {return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);}}@PutMapping(value = "/{apiName}/update", produces = {"application/javascript", "application/json"})public String updateResource(@PathVariable("apiName") String apiName,@RequestBody JSONObject obj, HttpServletRequest request)throws Exception {Map<String, Object> objectMap = new HashMap<String, Object>();int update = configResourceManager.update(apiName, obj, request);if(update > 0) {return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);} else if(update == -1) {return returnJson(objectMap, ErpInfo.TEST_USER.name, ErpInfo.TEST_USER.code);} else {return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);}}@DeleteMapping(value = "/{apiName}/delete", produces = {"application/javascript", "application/json"})public String deleteResource(@PathVariable("apiName") String apiName,@RequestParam("id") Long id, HttpServletRequest request)throws Exception {Map<String, Object> objectMap = new HashMap<String, Object>();int delete = configResourceManager.delete(apiName, id, request);if(delete > 0) {return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);} else if(delete == -1) {return returnJson(objectMap, ErpInfo.TEST_USER.name, ErpInfo.TEST_USER.code);} else {return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);}}@DeleteMapping(value = "/{apiName}/deleteBatch", produces = {"application/javascript", "application/json"})public String batchDeleteResource(@PathVariable("apiName") String apiName,@RequestParam("ids") String ids, HttpServletRequest request)throws Exception {Map<String, Object> objectMap = new HashMap<String, Object>();int delete = configResourceManager.deleteBatch(apiName, ids, request);if(delete > 0) {return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);} else if(delete == -1) {return returnJson(objectMap, ErpInfo.TEST_USER.name, ErpInfo.TEST_USER.code);} else {return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);}}@GetMapping(value = "/{apiName}/checkIsNameExist")public String checkIsNameExist(@PathVariable("apiName") String apiName,@RequestParam Long id, @RequestParam(value ="name", required = false) String name,HttpServletRequest request)throws Exception {Map<String, Object> objectMap = new HashMap<String, Object>();int exist = configResourceManager.checkIsNameExist(apiName, id, name);if(exist > 0) {objectMap.put("status", true);} else {objectMap.put("status", false);}return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);}}

自定義注解

表示可以用于條件查詢的字段

@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface ResourceInfo {String value(); }

controller service mapper測試

下面以賬單為例:
對一個entity寫兩個類一個自定義注解:

AccountHeadComponent 拓展ICommonQuery接口:

@Service(value = "accountHead_component") @AccountHeadResource public class AccountHeadComponent implements ICommonQuery {//其他方法忽略private List<?> getAccountHeadList(Map<String, String> map)throws Exception {String search = map.get(Constants.SEARCH);String type = StringUtil.getInfo(search, "type");String roleType = StringUtil.getInfo(search, "roleType");String billNo = StringUtil.getInfo(search, "billNo");String beginTime = StringUtil.getInfo(search, "beginTime");String endTime = StringUtil.getInfo(search, "endTime");Long organId = StringUtil.parseStrLong(StringUtil.getInfo(search, "organId"));Long creator = StringUtil.parseStrLong(StringUtil.getInfo(search, "creator"));Long handsPersonId = StringUtil.parseStrLong(StringUtil.getInfo(search, "handsPersonId"));return accountHeadService.select(type, roleType, billNo, beginTime, endTime, organId, creator, handsPersonId, QueryUtils.offset(map), QueryUtils.rows(map));}}} @GetMapping(value = "/getStatistics")public BaseResponseInfo getStatistics(@RequestParam("name") String name,@RequestParam("serialNo") String serialNo,HttpServletRequest request) throws Exception {BaseResponseInfo res = new BaseResponseInfo();try {Map<String, Object> map = accountService.getStatistics(name, serialNo);res.code = 200;res.data = map;} catch(Exception e){e.printStackTrace();res.code = 500;res.data = "獲取數(shù)據(jù)失敗";}return res;}

service:

@Service public class AccountHeadService {private Logger logger = LoggerFactory.getLogger(AccountHeadService.class);@Resourceprivate AccountHeadMapper accountHeadMapper;@Resourceprivate AccountHeadMapperEx accountHeadMapperEx;@Resourceprivate OrgaUserRelService orgaUserRelService;@Resourceprivate AccountItemService accountItemService;@Resourceprivate SupplierService supplierService;@Resourceprivate LogService logService;@Resourceprivate AccountItemMapperEx accountItemMapperEx;//對應(yīng) CommonQueryManager的 public List<?> select(String apiName, Map<String, String> parameterMap)throws Exception { // if (StringUtil.isNotEmpty(apiName)) { // return container.getCommonQuery(apiName).select(parameterMap); // } // return new ArrayList<Object>(); // }public List<AccountHeadVo4ListEx> select(String type, String roleType, String billNo, String beginTime, String endTime,Long organId, Long creator, Long handsPersonId, int offset, int rows) throws Exception{List<AccountHeadVo4ListEx> resList = new ArrayList<>();try{String [] creatorArray = getCreatorArray(roleType);beginTime = Tools.parseDayToTime(beginTime,BusinessConstants.DAY_FIRST_TIME);endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);List<AccountHeadVo4ListEx> list = accountHeadMapperEx.selectByConditionAccountHead(type, creatorArray, billNo, beginTime, endTime, organId, creator, handsPersonId, offset, rows);if (null != list) {for (AccountHeadVo4ListEx ah : list) {if(ah.getChangeAmount() != null) {ah.setChangeAmount(ah.getChangeAmount().abs());}if(ah.getTotalPrice() != null) {ah.setTotalPrice(ah.getTotalPrice().abs());}if(ah.getBillTime() !=null) {ah.setBillTimeStr(getCenternTime(ah.getBillTime()));}resList.add(ah);}}}catch(Exception e){JshException.readFail(logger, e);}return resList;} //忽略其他增刪改的方法

mapper:

public interface AccountHeadMapperEx {List<AccountHeadVo4ListEx> selectByConditionAccountHead(@Param("type") String type,@Param("creatorArray") String[] creatorArray,@Param("billNo") String billNo,@Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("organId") Long organId,@Param("creator") Long creator,@Param("handsPersonId") Long handsPersonId,@Param("offset") Integer offset,@Param("rows") Integer rows);//省略其他方法}

連接另外的幾個表取出需要查詢的字段進行條件查詢:

<select id="selectByConditionAccountHead" parameterType="com.jsh.erp.datasource.entities.AccountHeadExample" resultMap="ResultMapEx">select ah.*, s.supplier OrganName, p.Name HandsPersonName, u.username userName, a.Name AccountNamefrom jsh_account_head ahleft join jsh_supplier s on ah.organ_id=s.id and ifnull(s.delete_Flag,'0') !='1'left join jsh_user u on ah.creator=u.id and ifnull(u.Status,'0') ='0'left join jsh_person p on ah.hands_person_id=p.id and ifnull(p.delete_Flag,'0') !='1'left join jsh_account a on ah.account_id=a.id and ifnull(a.delete_Flag,'0') !='1'where 1=1<if test="billNo != null"><bind name="bindBillNo" value="'%'+billNo+'%'"/>and ah.bill_no like #{bindBillNo}</if><if test="type != null">and ah.type=#{type}</if><if test="beginTime != null">and ah.bill_time &gt;= #{beginTime}</if><if test="endTime != null">and ah.bill_time &lt;= #{endTime}</if><if test="organId != null">and ah.organ_id=#{organId}</if><if test="handsPersonId != null">and ah.hands_person_id=#{handsPersonId}</if><if test="creator != null">and ah.creator=#{creator}</if><if test="creatorArray != null">and ah.creator in (<foreach collection="creatorArray" item="creator" separator=",">#{creator}</foreach>)</if>and ifnull(ah.delete_flag,'0') !='1'order by ah.id desc<if test="offset != null and rows != null">limit #{offset},#{rows}</if></select>

當點擊不同的選項時執(zhí)行不同的sql:
Execute SQL:SELECT COUNT(id) FROM jsh_account_head WHERE jsh_account_head.tenant_id = 63 AND 1 = 1 AND type = ‘付款’ AND ifnull(delete_flag, ‘0’) != ‘1’

Execute SQL:SELECT COUNT(id) FROM jsh_account_head WHERE jsh_account_head.tenant_id = 63 AND 1 = 1 AND type = ‘轉(zhuǎn)賬’ AND ifnull(delete_flag, ‘0’) != ‘1’

mybatis-plus實現(xiàn)版本

entity

對每一個entity都定義一個查詢類:

@Data public class DeptDto implements Serializable {/** ID */private Long id;/** 名稱 */private String name;/** 上級部門 */private Long pid;/** 狀態(tài) */private Boolean enabled;private List<DeptDto> children;/** 創(chuàng)建日期 */private Timestamp createTime;public String getLabel() {return name;} } @Data public class DeptQueryCriteria {@Query(type = Query.Type.IN, propName = "id")private Set<Long> ids;@Query(type = Query.Type.INNER_LIKE)private String name;@Queryprivate Boolean enabled;@Queryprivate Long pid;@Query(type = Query.Type.BETWEEN)private List<Timestamp> createTime; }

自定義注解

@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface Query {// Dong ZhaoYang 2017/8/7 基本對象的屬性名String propName() default "";// Dong ZhaoYang 2017/8/7 查詢方式Type type() default Type.EQUAL;/*** 多字段模糊搜索,僅支持String類型字段,多個用逗號隔開, 如@Query(blurry = "email,username")*/String blurry() default "";enum Type {// jie 2019/6/4 相等EQUAL// Dong ZhaoYang 2017/8/7 大于等于, GREATER_THAN// Dong ZhaoYang 2017/8/7 小于等于, LESS_THAN// Dong ZhaoYang 2017/8/7 中模糊查詢, INNER_LIKE// Dong ZhaoYang 2017/8/7 左模糊查詢, LEFT_LIKE// Dong ZhaoYang 2017/8/7 右模糊查詢, RIGHT_LIKE// Dong ZhaoYang 2017/8/7 小于, LESS_THAN_NQ// jie 2019/6/4 包含, IN// 不等于, NOT_EQUAL// between, BETWEEN// 不為空, NOT_NULL// 查詢時間, UNIX_TIMESTAMP}}

自定義輔助查詢類(利用反射)

package co.yixiang.common.utils;import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import co.yixiang.annotation.Query; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j;import java.lang.reflect.Field; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List;/*** @author Zheng Jie* @date 2019-6-4 14:59:48*/ @Slf4j @SuppressWarnings({"unchecked", "all"}) public class QueryHelpPlus {public static <R, Q> QueryWrapper getPredicate(R obj, Q query) {QueryWrapper<R> queryWrapper = new QueryWrapper<R>();if (query == null) {return queryWrapper;}try {List<Field> fields = getAllFields(query.getClass(), new ArrayList<>());for (Field field : fields) {boolean accessible = field.isAccessible();field.setAccessible(true);Query q = field.getAnnotation(Query.class);if (q != null) {String propName = q.propName();String blurry = q.blurry();String attributeName = isBlank(propName) ? field.getName() : propName;attributeName = humpToUnderline(attributeName);Class<?> fieldType = field.getType();Object val = field.get(query);if (ObjectUtil.isNull(val) || "".equals(val)) {continue;}// 模糊多字段if (ObjectUtil.isNotEmpty(blurry)) {String[] blurrys = blurry.split(",");//queryWrapper.or();queryWrapper.and(wrapper -> {for (int i = 0; i < blurrys.length; i++) {String column = humpToUnderline(blurrys[i]);//if(i!=0){wrapper.or();//}wrapper.like(column, val.toString());}});continue;}String finalAttributeName = attributeName;switch (q.type()) {case EQUAL://queryWrapper.and(wrapper -> wrapper.eq(finalAttributeName, val));queryWrapper.eq(attributeName, val);break;case GREATER_THAN:queryWrapper.ge(finalAttributeName, val);break;case LESS_THAN:queryWrapper.le(finalAttributeName, val);break;case LESS_THAN_NQ:queryWrapper.lt(finalAttributeName, val);break;case INNER_LIKE:queryWrapper.like(finalAttributeName, val);break;case LEFT_LIKE:queryWrapper.likeLeft(finalAttributeName, val);break;case RIGHT_LIKE:queryWrapper.likeRight(finalAttributeName, val);break;case IN:if (CollUtil.isNotEmpty((Collection<Long>) val)) {queryWrapper.in(finalAttributeName, (Collection<Long>) val);}break;case NOT_EQUAL:queryWrapper.ne(finalAttributeName, val);break;case NOT_NULL:queryWrapper.isNotNull(finalAttributeName);break;case BETWEEN:List<Object> between = new ArrayList<>((List<Object>) val);queryWrapper.between(finalAttributeName, between.get(0), between.get(1));break;case UNIX_TIMESTAMP:List<Object> UNIX_TIMESTAMP = new ArrayList<>((List<Object>) val);if (!UNIX_TIMESTAMP.isEmpty()) {SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");long time1 = fm.parse(UNIX_TIMESTAMP.get(0).toString()).getTime() / 1000;long time2 = fm.parse(UNIX_TIMESTAMP.get(1).toString()).getTime() / 1000;queryWrapper.between(finalAttributeName, time1, time2);}break;default:break;}}field.setAccessible(accessible);}} catch (Exception e) {log.error(e.getMessage(), e);}return queryWrapper;}private static boolean isBlank(final CharSequence cs) {int strLen;if (cs == null || (strLen = cs.length()) == 0) {return true;}for (int i = 0; i < strLen; i++) {if (!Character.isWhitespace(cs.charAt(i))) {return false;}}return true;}private static List<Field> getAllFields(Class clazz, List<Field> fields) {if (clazz != null) {fields.addAll(Arrays.asList(clazz.getDeclaredFields()));getAllFields(clazz.getSuperclass(), fields);}return fields;}/**** 駝峰命名轉(zhuǎn)為下劃線命名** @param para* 駝峰命名的字符串*/public static String humpToUnderline(String para) {StringBuilder sb = new StringBuilder(para);int temp = 0;//定位if (!para.contains("_")) {for (int i = 0; i < para.length(); i++) {if (Character.isUpperCase(para.charAt(i))) {sb.insert(i + temp, "_");temp += 1;}}}return sb.toString();} }

controller

@Log("查詢部門")@ApiOperation("查詢部門")@GetMapping("/dept")public ResponseEntity<Object> getDepts(DeptQueryCriteria criteria) {// 數(shù)據(jù)權(quán)限criteria.setIds(dataScope.getDeptIds());List<DeptDto> deptDtos = generator.convert(deptService.queryAll(criteria), DeptDto.class);return new ResponseEntity<>(deptService.buildTree(deptDtos), HttpStatus.OK);}

service

List<Dept> queryAll(DeptQueryCriteria criteria); @Service @AllArgsConstructor //@CacheConfig(cacheNames = "dept") @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, Dept> implements DeptService {@Overridepublic List<Dept> queryAll(DeptQueryCriteria criteria) {return baseMapper.selectList(QueryHelpPlus.getPredicate(Dept.class, criteria));}/*** 構(gòu)建樹形數(shù)據(jù)** @param deptDtos 原始數(shù)據(jù)* @return /*/@Overridepublic Object buildTree(List<DeptDto> deptDtos) {Set<DeptDto> trees = new LinkedHashSet<>();Set<DeptDto> depts = new LinkedHashSet<>();List<String> deptNames = deptDtos.stream().map(DeptDto::getName).collect(Collectors.toList());boolean isChild;DeptQueryCriteria criteria = new DeptQueryCriteria();List<Dept> deptList = this.queryAll(criteria);for (DeptDto deptDto : deptDtos) {isChild = false;if ("0".equals(deptDto.getPid().toString())) {trees.add(deptDto);}for (DeptDto it : deptDtos) {if (it.getPid().equals(deptDto.getId())) {isChild = true;if (deptDto.getChildren() == null) {deptDto.setChildren(new ArrayList<>());}deptDto.getChildren().add(it);}}if (isChild) {depts.add(deptDto);for (Dept dept : deptList) {if (dept.getId().equals(deptDto.getPid()) && !deptNames.contains(dept.getName())) {depts.add(deptDto);}}}}if (CollectionUtils.isEmpty(trees)) {trees = depts;}Integer totalElements = deptDtos.size();Map<String, Object> map = new HashMap<>(2);map.put("totalElements", totalElements);map.put("content", CollectionUtils.isEmpty(trees) ? deptDtos : trees);return map;}//省略其他方法 }

總結(jié)

以上是生活随笔為你收集整理的springboot封装统一查询对象进行多条件查询案例(mybatis和mybatis-plus+反射两种版本)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

91精品伦理| 久久久久久久国产精品 | 国产日韩在线播放 | 亚洲激情视频在线 | 99国产一区| 亚洲三级影院 | 国产成人精品av在线 | 午夜精品一区二区三区在线播放 | 天堂在线一区 | 日韩在线网址 | 九九视频免费观看视频精品 | 欧美成人手机版 | 蜜臀av性久久久久av蜜臀妖精 | 免费观看福利视频 | 日韩欧美网站 | 视频福利在线 | 久久免费的视频 | 涩涩网站在线 | 97在线观看免费观看 | 国产精品系列在线观看 | 精品亚洲欧美无人区乱码 | 黄色资源在线 | www日日夜夜 | 国产色拍拍拍拍在线精品 | 999电影免费在线观看 | 香蕉在线观看视频 | 色婷婷狠狠五月综合天色拍 | 日韩av网站在线播放 | 91九色视频在线 | 色小说在线 | 久久久在线| 西西大胆免费视频 | 天天操综 | 亚洲免费高清视频 | 国产在线观看a | 日本中文字幕在线播放 | 2024国产在线 | 高清日韩一区二区 | 国产精品短视频 | 亚州精品在线视频 | 午夜美女wwww | 日韩mv欧美mv国产精品 | 国产精品午夜av | 人人网av | 国产尤物在线观看 | 欧美性做爰猛烈叫床潮 | 国精产品一二三线999 | 91在线一区 | 亚洲日本在线视频观看 | 国产97在线看| 爱爱av网 | 久久九九影视网 | 西西444www大胆高清视频 | 深爱激情综合网 | 国产午夜三级一区二区三 | 在线视频亚洲 | 国产视频久 | 亚洲日本一区二区在线 | 精品免费在线视频 | 一区二区三区高清 | 一区二区三区在线免费观看视频 | 手机版av在线| av在线网站大全 | 国产成人精品一区二 | 成人在线视频免费 | 国产伦理久久 | 91免费看片黄 | 亚洲自拍偷拍色图 | 久久tv | 欧美一区二区三区四区夜夜大片 | 欧美午夜精品久久久久久孕妇 | 精品一区91 | 在线网址你懂得 | 欧美日韩一级在线 | 91成人免费在线视频 | 国内精品久久久久久 | 欧美激情视频在线免费观看 | 亚洲伊人成综合网 | 欧美激情第28页 | 91大神电影 | 在线色亚洲 | 国产精品久久二区 | 最近中文字幕高清字幕在线视频 | 欧美日韩视频在线观看一区二区 | 五月开心激情 | 亚洲高清免费在线 | 国产成人99av超碰超爽 | 娇妻呻吟一区二区三区 | 久久视屏网 | 深夜国产在线 | 亚洲精品中文在线资源 | 亚洲一区二区三区miaa149 | 视频国产在线观看18 | 亚洲精品国产视频 | 91麻豆精品一区二区三区 | 午夜精品一区二区三区可下载 | 国产精品18久久久久久久网站 | 最近中文字幕完整视频高清1 | japanesefreesexvideo高潮 | 国产精彩在线视频 | 伊色综合久久之综合久久 | 久草www| 麻豆精品传媒视频 | 丰满少妇久久久 | 伊人色综合久久天天网 | 国产美女精品久久久 | av福利在线免费观看 | 丁香婷婷色月天 | 国产伦理久久精品久久久久_ | 日韩理论电影在线观看 | 午夜av免费 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 国内外成人免费在线视频 | 国产手机在线播放 | 麻豆影视在线免费观看 | 日日干夜夜操视频 | 日日夜夜免费精品视频 | 久久这里只有精品首页 | 日本久久久久久 | 国产精品自产拍在线观看桃花 | 在线观看欧美成人 | 中文字幕 二区 | 97视频网站| 国产分类视频 | 国产午夜精品一区二区三区 | 久久黄页| 国产在线综合视频 | 看av免费 | 免费91在线 | 在线免费观看视频你懂的 | 狠狠操91| 国产精品自产拍在线观看网站 | 国产一区国产精品 | 国产小视频在线播放 | 久草在线久 | 国产精品乱码久久 | 亚洲精品午夜一区人人爽 | 日韩日韩日韩日韩 | 日韩在线色 | 亚洲三级黄色 | 中文永久免费观看 | 免费网站在线观看人 | 天天射天天爱天天干 | 亚洲国产精品影院 | 丁香六月婷婷开心婷婷网 | 免费看的视频 | 亚洲爱爱视频 | 91综合久久一区二区 | 色香蕉网 | 在线你懂的视频 | 成年人免费看的视频 | 夜夜操天天| 日韩精品一区二区三区电影 | 激情久久久久久久久久久久久久久久 | 日韩高清一区在线 | 国产一级不卡毛片 | 国产在线日本 | 日本精品在线视频 | 中文字幕日本特黄aa毛片 | www.亚洲视频.com | 鲁一鲁影院 | 婷婷九月丁香 | 在线看黄色av | 国产精品久久精品 | 欧美一区二区在线免费观看 | 久久综合激情 | 天天干天天操人体 | www.成人久久 | 综合久久久久久久 | 成人午夜精品久久久久久久3d | 国产精品毛片网 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 中文字幕乱码电影 | 亚洲va在线va天堂 | 91网址在线| 久久免费电影 | 久久精品99视频 | 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲最大在线视频 | 三级大片网站 | 亚洲精品在线免费 | 日产中文字幕 | 黄色在线观看免费网站 | 首页av在线 | 久久国产精品久久精品国产演员表 | 91成人在线视频 | 亚洲人精品午夜 | 亚洲一区二区观看 | 久久午夜精品视频 | 久久在线看 | 国产精品中文字幕av | 国产手机视频在线观看 | 99久高清在线观看视频99精品热在线观看视频 | 日韩一区二区免费在线观看 | 成人91在线 | 超碰大片| 天天天天干| 国产婷婷色 | 又黄又爽又刺激的视频 | 999国内精品永久免费视频 | 国产精品国产自产拍高清av | 超碰97国产在线 | 激情影院在线 | 91精品国产92久久久久 | 麻豆视频在线 | 在线视频区 | 超碰在线94 | 国产精品v欧美精品v日韩 | 精品亚洲一区二区三区 | 黄av免费 | 国产91全国探花系列在线播放 | 亚洲精品18日本一区app | 99精品国产成人一区二区 | 天天草综合网 | 国产不卡av在线 | 波多野结衣亚洲一区二区 | 国产999精品久久久久久麻豆 | 天天做天天射 | 在线看国产日韩 | 91中文字幕在线播放 | 六月丁香激情综合色啪小说 | 国产一区二区在线看 | 精品uu| 91高清视频 | 国产美女久久久 | av黄色大片 | 樱空桃av | av三级在线免费观看 | 免费十分钟 | 日韩免费在线一区 | 久久免费视频网 | 久久国产影视 | 午夜电影中文字幕 | 亚洲欧洲精品在线 | 色噜噜在线观看视频 | 中文字幕国产一区 | 最近日韩中文字幕中文 | 日韩精品影视 | 国产成人一区二区三区在线观看 | 中文字幕乱码亚洲精品一区 | 亚洲精品影视 | 亚洲天堂香蕉 | 欧美日韩国产一区二区三区 | 亚洲我射av| 青青河边草观看完整版高清 | 97超碰人人爱 | 高清久久久久久 | 人人干人人干人人干 | 人人插人人| www在线观看国产 | 久久视频网 | 色综合久久88 | 国产福利91精品 | 亚洲五月婷婷 | 91在线视频免费观看 | 九九久久久久久久久激情 | 香蕉久久国产 | 天天干天天色2020 | 九九免费在线观看 | 久久精品一区八戒影视 | www.久久91| 黄色软件网站在线观看 | 欧美一二三区在线播放 | 久草在线免费播放 | 91黄色视屏 | 久久久久国 | 99精品视频在线观看播放 | 美女视频免费一区二区 | 91成人在线观看高潮 | 97日日碰人人模人人澡分享吧 | 日韩高清成人在线 | 国产精品女同一区二区三区久久夜 | 午夜神马福利 | 中文字幕在线免费观看视频 | 黄色中文字幕在线 | 美国av大片| 国产精品 日韩精品 | 欧美精品在线观看免费 | 欧美日韩视频观看 | 少妇bbb好爽| 美女免费黄视频网站 | av在线在线 | 97干com | 97免费在线观看视频 | 免费国产ww | 精品9999| 99综合电影在线视频 | 亚洲欧美日韩精品久久奇米一区 | 婷婷中文字幕在线观看 | 看污网站 | 午夜精品久久 | 亚洲,国产成人av | 九九九九色| 日本h在线播放 | 国产小视频免费观看 | 99视频在线精品国自产拍免费观看 | 欧美一级大片在线观看 | 欧美成人性网 | 久久国产精品一区二区 | 91亚洲精品国偷拍自产在线观看 | 91黄色免费看 | 国产高清在线免费视频 | 国产99色 | 国产999在线 | 中文字幕 国产视频 | 天天天天爱天天躁 | 99综合电影在线视频 | 欧美亚洲xxx | 久久99国产精品视频 | 2019中文字幕第一页 | 狠狠干夜夜 | 人人要人人澡人人爽人人dvd | 久久av黄色 | 一区二区三区免费在线播放 | 欧美国产精品一区二区 | 久久中文字幕视频 | 中文字幕亚洲国产 | 亚洲精品视频 | 91丨九色丨国产女 | 九九九九精品九九九九 | 欧美日韩一区久久 | 欧美十八| 激情电影影院 | 毛片视频网址 | 亚洲精品日韩一区二区电影 | 国产精品美女久久久久久久久久久 | 激情欧美一区二区三区免费看 | 欧美一区二区免费在线观看 | 婷婷国产视频 | 人人玩人人添人人澡超碰 | 在线免费观看av网站 | 91视频免费视频 | 婷婷精品在线视频 | 国产亚洲精品成人 | 国产盗摄精品一区二区 | 黄a网站 | av在线激情 | 国产va在线观看免费 | 国产精品黄色影片导航在线观看 | 啪啪免费试看 | 最近中文字幕国语免费高清6 | 日韩精品中文字幕在线观看 | 在线观看免费av网 | 日韩欧美视频二区 | 日韩在线观看高清 | 蜜臀av性久久久久av蜜臀三区 | 在线国产能看的 | 97国产在线 | 国产一区视频在线播放 | 久久久夜色 | 99在线精品视频观看 | 免费av视屏 | 69av在线视频 | 国产福利小视频在线 | 久久人人爽视频 | 免费观看完整版无人区 | 国产精品毛片一区视频播 | 在线观看视频精品 | 在线看的毛片 | 日日躁夜夜躁aaaaxxxx | 激情婷婷色 | 中文资源在线官网 | 日韩欧美精品一区 | 精品日韩在线一区 | 久久国产精品影视 | 人人澡人人添人人爽一区二区 | 亚洲一区二区三区在线看 | 国产小视频你懂的 | 手机看片久久 | 欧美性黑人 | 一级免费看 | 欧美激情精品久久久久久免费印度 | 99久久夜色精品国产亚洲96 | 免费在线观看黄网站 | 久久九九精品 | 欧美久久影院 | 国产a视频免费观看 | 天天天干天天射天天天操 | www.天天射.com | 最近中文字幕mv免费高清在线 | 国产视频精品免费 | av成人免费观看 | 天天干,狠狠干 | 激情视频二区 | 国产中文字幕免费 | 中文字幕免费观看全部电影 | 丝袜美腿亚洲综合 | 美女久久久久久久久久久 | 能在线观看的日韩av | 欧美视频在线二区 | 国产精品成人av电影 | 69国产盗摄一区二区三区五区 | 色在线最新 | 在线a人v观看视频 | 亚洲综合导航 | 国产日产精品久久久久快鸭 | 欧美日韩国产精品一区二区 | 欧美日韩免费一区二区三区 | 日夜夜精品视频 | 精品国产乱码久久久久久1区二区 | 最近免费观看的电影完整版 | 成人小视频在线 | 欧美成年黄网站色视频 | 久久综合狠狠综合 | 在线观看91视频 | 亚洲免费小视频 | 欧美精品在线一区二区 | 日韩在线激情 | 在线观看mv的中文字幕网站 | 日韩成人精品 | 91免费的视频在线播放 | 国产一区二区不卡在线 | 最新av网址在线 | 最新日韩视频在线观看 | av青草| 国产精品免费大片视频 | 国产精品久久久久久久久软件 | 正在播放国产一区二区 | 美女久久99 | 国产精品久久久久久久久久ktv | 手机av在线网站 | 人人澡人人爽欧一区 | 亚洲成人av在线播放 | 久久伦理影院 | 天天操天天操天天操天天操天天操天天操 | 成人免费视频视频在线观看 免费 | 亚洲1级片 | 国内精品久久久久影院男同志 | 久久专区| 亚洲六月丁香色婷婷综合久久 | 国产麻豆果冻传媒在线观看 | 一区二区三区四区精品 | 成人av片免费看 | 毛片美女网站 | 久久久免费视频播放 | 麻豆传媒一区二区 | 日韩高清成人在线 | 国产精品区免费视频 | 在线免费观看欧美日韩 | 成人黄色片在线播放 | 成年人视频在线免费 | 五月天色中色 | 午夜av片 | 国产中文欧美日韩在线 | 亚洲闷骚少妇在线观看网站 | 国产色视频 | 欧美激情视频一区 | 亚洲国产97在线精品一区 | 亚洲高清资源 | 久在线观看视频 | 午夜精品一二区 | 97超碰中文字幕 | 成人教育av| 九九久久精品视频 | 精品99999| 日韩av在线小说 | 亚洲精欧美一区二区精品 | 中文字幕资源在线观看 | 天天干,天天射,天天操,天天摸 | 97国产精品 | 日韩欧美在线综合网 | 久久久久久高潮国产精品视 | 在线中文字幕观看 | 美女久久久久久 | 免费亚洲婷婷 | 国产精品久久久久一区二区 | 成人免费在线视频 | 久久成人免费视频 | 亚洲美女视频在线 | 国产一区欧美一区 | 91av视频播放| 在线观看亚洲 | 91在线观看黄| 国产91丝袜在线播放动漫 | 视频在线观看91 | 国产婷婷在线观看 | 亚洲美女精品区人人人人 | 欧美久久久久久久久中文字幕 | 岛国av在线不卡 | 一区二区在线电影 | 日韩毛片在线一区二区毛片 | 麻豆视频一区二区 | 黄色影院在线免费观看 | 欧美亚洲精品在线观看 | 日韩午夜在线播放 | 精品国产一区二区三区久久久蜜臀 | 国产精品视频专区 | 中文字幕欧美激情 | av成人免费观看 | 亚洲精品午夜aaa久久久 | 免费观看黄色12片一级视频 | 国产色在线观看 | 在线免费高清视频 | 久久久综合香蕉尹人综合网 | 亚洲综合欧美日韩狠狠色 | 免费人成在线观看 | 久草在线视频精品 | 免费激情在线电影 | 亚洲综合欧美激情 | 一区二区三区免费在线观看视频 | 国产精品久久久久久久久久久久久 | 欧美一级看片 | 欧美激情精品久久久久久变态 | 欧美无极色 | 欧美成人性战久久 | 亚洲精品小视频 | 中文av资源站 | 国产我不卡| 久久精品日产第一区二区三区乱码 | 在线免费观看国产精品 | 国产小视频你懂的 | 国产情侣一区 | 天天干天天插 | 中文字幕在线有码 | 在线视频电影 | 手机av观看 | 久久久亚洲影院 | 五月天婷亚洲天综合网鲁鲁鲁 | 欧美性生活小视频 | 久久久久久久久网站 | 91麻豆精品国产91久久久使用方法 | 91成年人在线观看 | 亚洲婷婷免费 | 国产精品乱码一区二区视频 | 久操视频在线 | 日韩在线视频免费观看 | 国产精品一区二区美女视频免费看 | 曰本三级在线 | 国产精品成人自产拍在线观看 | 中文字幕在线看视频 | 男女免费av | 色综合天天狠天天透天天伊人 | 久久国产精品精品国产色婷婷 | 色噜噜噜噜 | 久草在线视频中文 | 国产精品久久片 | 国产在线欧美在线 | 免费日韩一区 | 成人三级网站在线观看 | 精品日韩在线一区 | 日韩午夜精品 | 伊人电影在线观看 | 亚洲日本一区二区在线 | 亚洲天天综合网 | 91精品国产高清 | 欧美日韩免费在线视频 | www夜夜操 | 五月天,com| 午夜精品久久久久久久久久久久久久 | 久久av中文字幕片 | 91精品国产乱码久久桃 | 最近中文字幕mv | 人人讲 | 欧美激情综合色 | av三区在线 | 亚洲精品午夜国产va久久成人 | 国产一级黄| 色五婷婷| 国产黑丝一区二区三区 | 亚洲日本一区二区在线 | 蜜桃视频成人在线观看 | 又色又爽又黄高潮的免费视频 | 日韩有码在线播放 | 日本中文字幕网址 | 在线影视 一区 二区 三区 | 久久国产91| 久久99精品国产一区二区三区 | 国产精品1区2区3区 久久免费视频7 | 国产 中文 日韩 欧美 | 日韩成人邪恶影片 | 最近最新最好看中文视频 | 97超碰影视 | 久久国产精品99久久人人澡 | 国产精品一级视频 | 亚洲视频高清 | 免费网站在线观看人 | 911久久| 日韩av影视在线 | 日韩黄色在线观看 | 91九色视频在线 | 中文字幕亚洲字幕 | 日韩欧美一区视频 | 在线观看91精品视频 | 欧美性生活大片 | 亚洲男人天堂a | 亚洲第五色综合网 | jizz18欧美18| 中文字幕电影在线 | 国产精品久久片 | 午夜久操 | 视频在线一区二区三区 | 永久免费观看视频 | 波多野结衣视频一区 | 久久精品男人的天堂 | 国产日韩欧美自拍 | 亚洲精品免费在线观看 | 五月天丁香亚洲 | 91视频久久 | 狠狠的干狠狠的操 | av在线播放国产 | 日韩黄色网络 | 精品久久网 | 综合色站导航 | 天天干夜夜操视频 | 五月天激情综合 | 久久久久久中文字幕 | 丁香花在线视频观看免费 | 天天干天天拍天天操天天拍 | 亚洲女同videos| 欧美日韩二三区 | 人人舔人人爽 | 在线看不卡av | 天天操比 | 狠狠ri| 亚洲一级二级三级 | 日韩久久精品一区二区 | 国产精品免费久久 | 久99视频 | 99亚洲国产 | 在线国产一区二区三区 | 亚洲成人在线免费 | 国内一区二区视频 | 日韩在线免费高清视频 | 96久久欧美麻豆网站 | 日日干 天天干 | 中文字幕av在线不卡 | 国产99久久久久久免费看 | 国产精品美女999 | 欧美日韩国产精品爽爽 | 亚洲一区二区视频在线 | 国产二区免费视频 | 久久99国产一区二区三区 | 国产在线观看h | 国产裸体bbb视频 | 麻豆91精品视频 | 日韩成人免费电影 | 国产伦精品一区二区三区免费 | 伊人中文在线 | 粉嫩av一区二区三区免费 | 日韩欧美在线中文字幕 | 日韩av黄| 97超碰在线久草超碰在线观看 | 久久综合网色—综合色88 | 五月天亚洲综合小说网 | 天天操天天透 | 亚洲精品国产成人av在线 | av大片免费看 | 亚洲最新av网址 | 在线观看日韩免费视频 | 亚洲一级电影在线观看 | 在线黄色av| 欧美日韩国产在线 | 欧美性色xo影院 | 日韩精品在线观看av | 亚洲精品白浆高清久久久久久 | 在线观看免费中文字幕 | 亚洲精品乱码久久久久久蜜桃91 | h久久| 成人在线观看资源 | 97人人模人人爽人人少妇 | 精品免费国产一区二区三区四区 | 国偷自产中文字幕亚洲手机在线 | 色婷婷狠狠干 | 国产成人61精品免费看片 | 操碰av| 日本韩国精品一区二区在线观看 | 国产成在线观看免费视频 | 999视频网| 精品五月天 | 国产精品一区在线观看 | 高潮久久久久久久久 | 国产综合片 | 三级视频日韩 | 色国产视频 | 久久一本综合 | 中文字幕在线一区二区三区 | 亚洲五月综合 | 亚洲更新最快 | 不卡视频在线 | 亚洲免费av电影 | 中文字幕 成人 | 日韩欧美在线免费观看 | 中文字幕在线影院 | 欧美色操| 国产亚洲高清视频 | 特黄特色特刺激视频免费播放 | 欧美日韩中文字幕在线视频 | 自拍超碰在线 | 美女视频黄色免费 | 天天插天天爱 | 最新午夜| 亚洲伊人第一页 | av福利资源| 久久久久久久久久久免费 | 色婷婷激婷婷情综天天 | 女人18毛片a级毛片一区二区 | 伊人伊成久久人综合网站 | 国色天香永久免费 | 中文字幕视频播放 | av在线观 | 精品国产91亚洲一区二区三区www | 国产成人精品一区二区在线观看 | 色网站在线免费观看 | 超碰在线97观看 | 国产精品麻豆一区二区三区 | 一本一本久久aa综合精品 | 久一在线 | 欧美另类性 | 欧美日韩三级 | 狠狠狠色狠狠色综合 | 欧美黄色软件 | 毛片在线播放网址 | 国产91在线播放 | 国产最新精品视频 | 久久久久久久久久影视 | 日本黄色免费电影网站 | 日韩欧美一区二区三区免费观看 | 国产最新91| 一级免费黄视频 | 欧美日韩一区二区在线观看 | 不卡在线一区 | 欧美日韩国产精品一区二区亚洲 | 伊人超碰在线 | 天天干,天天操 | 精品国内自产拍在线观看视频 | 黄色网址中文字幕 | 久久国内精品99久久6app | 久久人人添人人爽添人人88v | 最新国产一区二区三区 | 欧美日韩午夜爽爽 | 日本狠狠干 | 欧美人交a欧美精品 | 狠狠色狠狠色综合日日92 | 一级久久精品 | 玖操| 91亚洲精品久久久蜜桃借种 | 国产网站在线免费观看 | 国产一级黄大片 | 亚洲精品福利在线观看 | 国产精品美女在线观看 | 国产一区二区三区免费在线观看 | 国产高清在线视频 | 色香蕉视频 | 色婷婷在线播放 | 九九99视频 | 人人爽人人爽 | 欧美日韩国产一区 | 黄色av电影一级片 | 亚洲国产精品传媒在线观看 | 精品99久久 | 欧美一级久久久 | 在线观看色网 | 黄色成人在线网站 | 婷婷av电影 | 久久国产精品一区二区三区四区 | 国产亚洲精品无 | 中文字幕在线视频第一页 | 亚洲婷婷丁香 | 久久精品国产免费观看 | 天天摸夜夜添 | 久久麻豆视频 | 亚洲午夜大片 | 岛国片在线 | 国产做爰视频 | 亚洲另类xxxx | 国产91aaa | 亚洲精品久久久久中文字幕m男 | 91亚洲精品乱码久久久久久蜜桃 | 久久国色夜色精品国产 | 四虎永久视频 | 久久九九精品 | 91精品国产自产在线观看 | 一区二区丝袜 | 国产九九九九九 | 国产精品视频在线观看 | 亚洲电影久久 | 激情综合五月 | 91在线网站 | 国产视频一区在线播放 | 国产露脸91国语对白 | 国产精品情侣视频 | 国产精品欧美久久久久无广告 | 99在线免费观看 | 国产精品自产拍在线观看网站 | 国产精品去看片 | 亚洲精品国偷自产在线91正片 | 久久精品亚洲一区二区三区观看模式 | 亚洲专区在线播放 | 国产九九九精品视频 | 欧美日韩观看 | 一区二区三区在线电影 | 久草.com | 91精品国产成人观看 | 欧美激情视频一区 | 日本视频高清 | 午夜在线观看一区 | 国产一区在线免费观看 | 成人av播放 | 久久精品一区二 | 免费av小说 | 久草资源在线观看 | av中文字幕在线免费观看 | 亚洲1级片 | 91探花系列在线播放 | 免费高清无人区完整版 | 日韩中文字幕免费在线观看 | 亚洲第一av在线播放 | 黄色a在线观看 | 四虎影视成人永久免费观看亚洲欧美 | 韩国中文三级 | 婷婷在线免费观看 | 亚洲视频 在线观看 | 爱爱av网| 国产麻豆精品传媒av国产下载 | 日韩高清一区在线 | 久久电影网站中文字幕 | 91免费在线看片 | 国产精品久久久精品 | 国产精品99久久久久久人免费 | 日韩在线免费视频 | 欧美伦理一区二区三区 | 日韩v在线| 国产亚洲婷婷免费 | 81精品国产乱码久久久久久 | 久久99爱视频 | 狠狠色丁香婷婷综合久小说久 | 天天干夜夜干 | 最新av网站在线观看 | 人人干天天射 | 狠狠色噜噜狠狠狠合久 | 蜜臀久久99精品久久久久久网站 | av视屏在线播放 | 久草热久草视频 | 99久久久国产精品免费观看 | 91久久偷偷做嫩草影院 | 国产免费不卡av | 日韩精品在线看 | 国产区 在线 | 天天曰天天干 | 久久怡红院 | 中文字幕在线观看免费高清电影 | 久久99精品久久久久婷婷 | 久久精品爱视频 | av理论电影 | 美女视频一区 | 成人av网址大全 | 久久久www免费电影网 | 国内精品久久久久久久影视简单 | 国模精品在线 | 色婷婷综合久久久久中文字幕1 | 美女国内精品自产拍在线播放 | 91视频91色 | 亚洲国产69 | 日日操日日操 | 久久精品视频国产 | 中文字幕中文字幕 | 亚洲丁香日韩 | 国产精品涩涩屋www在线观看 | 国产日韩欧美精品在线观看 | 久久综合九色综合97_ 久久久 | 亚洲欧美日韩国产一区二区三区 | 91av免费观看 | 国产成人中文字幕 | 少妇bbbb | 国际精品久久久 | 国产亚洲视频在线观看 | 久久国产精品精品国产色婷婷 | 国产精品资源在线 | 久久久久久久久久久久电影 | 视频精品一区二区三区 | 亚洲欧美日韩精品久久奇米一区 | 天天躁日日躁狠狠躁av麻豆 | 久久国产精品免费一区二区三区 | aaa黄色毛片 | 丁香午夜| 成年人免费电影在线观看 | 国产精品久久久久久久久久ktv | 一区二区三区 中文字幕 | 免费在线色电影 | 五月天丁香亚洲 | 亚洲日本色 | 亚洲色图美腿丝袜 | 日日操天天射 | 亚洲一区二区三区四区在线视频 | 超碰在线最新地址 | 在线国产精品一区 | 久久久免费高清视频 | 女人高潮特级毛片 | 99免费看片 | 免费黄色网址大全 | 亚洲成年人免费网站 | 国产亚洲久久 | 国产黄色资源 | 69久久久| 97免费视频在线 | 国产一级片免费视频 | 午夜影视一区 | 中文字幕日韩无 | 黄色电影网站在线观看 | 久久九九网站 | 成年人在线看视频 | 国产不卡在线观看视频 | 国产精品剧情 | 久久激情婷婷 | 久久一区国产 | 人人爽人人爽人人片av | 91精品一| 久久久久国产精品视频 | 日韩视频在线观看视频 | 天天碰天天操视频 | 国产日韩欧美自拍 | 亚洲在线网址 | 日韩视频免费 | 日韩理论影院 | 午夜黄网 | 00av视频 | 欧美精品久久久久久久久久久 | 久久手机视频 | 国产小视频在线播放 | 久久国产三级 | 99精品系列 | 人人干狠狠操 | 五月婷婷激情五月 | 日本xxxxav | 久久99在线观看 | а天堂中文最新一区二区三区 | 九九热中文字幕 | www.日本色 | 国产精品免费看久久久8精臀av | 伊人婷婷 | 99视频在线精品国自产拍免费观看 | 夜夜婷婷| 91麻豆精品国产91久久久使用方法 | 亚洲综合成人av | 成人黄色片在线播放 | 激情图片qvod | 91久久精品日日躁夜夜躁国产 | 黄色aaaaa| 日韩精品一区二区三区在线播放 | 成年人视频在线观看免费 | 日本精品xxxx | 中文字幕黄色 | 午夜 久久 tv | 国产精品毛片网 | 不卡中文字幕av | 亚洲精品午夜一区人人爽 | 五月婷婷丁香 | 久草电影网 | 在线亚洲午夜片av大片 | 婷婷在线综合 | 国产精品乱码久久久久 | 婷婷午夜激情 | av国产网站| 中文免费观看 | 国产高清专区 | bbw av| 91精品色| 蜜桃视频成人在线观看 | 91成人精品一区在线播放69 | 久草网在线视频 | 黄色片网站免费 | 国产资源av | 黄色片视频免费 | 91在线观看欧美日韩 | 69国产精品视频免费观看 | 亚洲精品国产欧美在线观看 | 九九热免费精品视频 | 999久久久 | 日本黄色免费网站 | 午夜精品久久久久久中宇69 | 亚洲国产一区av | 91av原创 | 久久久国产日韩 | 高清中文字幕av | 久久精品波多野结衣 | 成人国产电影在线观看 | 韩国一区二区三区视频 | 午夜在线免费观看视频 | 天天摸天天舔天天操 | 日韩精品免费专区 | 日韩精品一区二区在线观看视频 | 中文字幕免费高清av | 久草网站在线 | 久久久久成人精品 | 精品久久网 | 青青河边草免费观看完整版高清 | 成人一级影视 | av电影中文字幕在线观看 | 婷婷国产视频 | 中文字幕亚洲在线观看 | 91久草视频| 国产亲近乱来精品 | 久久久久久久国产精品影院 | av网站免费看 | 精品婷婷 | 美女视频黄频 | 在线观看一级视频 | 国产这里只有精品 |