sql >> データベース >  >> RDS >> Mysql

多くのオプションパラメータを処理するJavaSpringREST API

    これは、JpaSpecificationExecutorを使用して簡単に行うことができます。 およびカスタムのSpecification https:// spring .io / blog / 2011/04/26 / Advanced-spring-data-jpa-specifications-and-querydsl /

    HashMapをすべてのオプションのgetparamsを含むDTOに置き換えてから、そのDTOに基づいて仕様を構築します。もちろん、HashMapを保持し、それに基づいて仕様を構築することもできます。

    基本的に:

    public class VehicleFilter implements Specification<Vehicle>
    {
        private String art;
        private String userId;
        private String vehicle;
        private String identifier;
    
        @Override
        public Predicate toPredicate(Root<Vehicle> root, CriteriaQuery<?> query, CriteriaBuilder cb)
        {
            ArrayList<Predicate> predicates = new ArrayList<>();
    
            if (StringUtils.isNotBlank(art))
            {
                predicates.add(cb.equal(root.get("art"), art));
            }
            if (StringUtils.isNotBlank(userId))
            {
                predicates.add(cb.equal(root.get("userId"), userId));
            }
            if (StringUtils.isNotBlank(vehicle))
            {
                predicates.add(cb.equal(root.get("vehicle"), vehicle));
            }
            if (StringUtils.isNotBlank(identifier))
            {
                predicates.add(cb.equal(root.get("identifier"), fab));
            }
    
            return predicates.size() <= 0 ? null : cb.and(predicates.toArray(new Predicate[predicates.size()]));
        }
    
    // getter & setter
    }
    

    そしてコントローラー:

    @RequestMapping(value = "/{ticket}/count", method = RequestMethod.GET)
    public long getItemsCount(
        @PathVariable String ticket,
        VehicleFilter filter,
        HttpServletRequest request
    ) throws Exception
    {
        return vehicleService.getCount(filter);
    }
    

    サービス:

    @Override
    public long getCount(VehicleFilter filter)
    {
        return vehicleRepository.count(filter);
    }
    

    リポジトリ:

    @Repository
    public interface VehicleRepository extends JpaRepository<Vehicle, Integer>, JpaSpecificationExecutor<Vehicle>
    {
    }
    

    会社のコードを応用した簡単な例で、アイデアが浮かびます!



    1. Pythonでデータベース接続をインポートする

    2. 無料のホストを介してmysqlをリモートで接続する

    3. SQLiteクエリ結果に列名を含める

    4. 制限と大きなオフセットを使用したMySQLクエリは永久に使用されます