Axboot 신규화면 만들기 3 - 정상적인 CRUD를 위한 JAVA소스 수정

Axboot 신규화면 만들기 3 - 정상적인 CRUD를 위한 JAVA소스 수정

◆ 정상적인 CRUD를 위한 JAVA소스 수정

1. 먼저 maven 의 generate-sources 를 해준다.    

           그러면 아래와 같이 target하위에 소스가 생긴다.

2.  JAVA 소스 수정

 - com/dasdes/shopmng/contrillers/ProductController.java : 조회조건 받을수 있도록 수정 

 - com/dasdes/shopmng/domain/prdt/Product.java           : 필수값체크

 - com/dasdes/shopmng/domain/BaseService.java             : Entity 와 연결되는 QProduct.java(위 generate에서 생성됨) 선언

 - com/dasdes/shopmng/domain/prdt/ProductService.java  : 조회조건 filter추가 및 list 리턴객체 교체

  1) ProductController.java 수정

package com.dasdes.shopmng.controllers;


import com.chequer.axboot.core.api.response.Responses;

import com.chequer.axboot.core.controllers.BaseController;

import com.chequer.axboot.core.parameter.RequestParams;

import org.springframework.stereotype.Controller;

import com.chequer.axboot.core.api.response.ApiResponse;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import com.dasdes.shopmng.domain.prdt.Product;

import com.dasdes.shopmng.domain.prdt.ProductService;

import com.wordnik.swagger.annotations.ApiImplicitParam;  //추가

import com.wordnik.swagger.annotations.ApiImplicitParams; //추가


import javax.inject.Inject;

import java.util.List;


@Controller

@RequestMapping(value = "/api/v1/product")

public class ProductController extends BaseController {


    @Inject

    private ProductService productService;


    @RequestMapping(method = RequestMethod.GET, produces = APPLICATION_JSON)

    @ApiImplicitParams({

            @ApiImplicitParam(name = "prdtCd", value = "제품코드", dataType = "String", paramType = "query"),

            @ApiImplicitParam(name = "prdtNm", value = "제품명", dataType = "String", paramType = "query"),

            @ApiImplicitParam(name = "filter", value = "검색어", dataType = "String", paramType = "query")

    })    

    public Responses.ListResponse list(RequestParams<Product> requestParams) {

        List<Product> list = productService.gets(requestParams);

        return Responses.ListResponse.of(list);

    }


    @RequestMapping(method = {RequestMethod.PUT}, produces = APPLICATION_JSON)

    public ApiResponse save(@RequestBody List<Product> request) {

        productService.savePrdt(request);

        return ok();

    }

}

  2) Product.java 수정

package com.dasdes.shopmng.domain.prdt;


import com.chequer.axboot.core.annotations.ColumnPosition;

import com.dasdes.shopmng.domain.SimpleJpaModel;

import lombok.*;

import org.apache.ibatis.type.Alias;

import org.hibernate.annotations.DynamicInsert;

import org.hibernate.annotations.DynamicUpdate;

import com.chequer.axboot.core.annotations.Comment;

import javax.persistence.*;


import javax.validation.constraints.NotNull;



@Setter

@Getter

@DynamicInsert

@DynamicUpdate

@Entity

@EqualsAndHashCode(callSuper = true)

@Table(name = "prdt_base")

@Comment(value = "")

@Alias("product")

public class Product extends SimpleJpaModel<String> {


@Id

@Column(name = "prdt_cd", length = 50, nullable = false)

@NotNull(message = "제품코드를 입력하세요")   //pk이므로 not null 체크 추가

@Comment(value = "제품코드")

private String prdtCd;


@Column(name = "prdt_nm", length = 50, nullable = false)

@Comment(value = "제품명")

private String prdtNm;


@Column(name = "origin", length = 50, nullable = false)

@Comment(value = "원산지")

private String origin;


@Column(name = "purchase_price", precision = 10, nullable = false)

@Comment(value = "매입가격")

private Integer purchasePrice;


@Column(name = "sales_price", precision = 10, nullable = false)

@Comment(value = "판매가격")

private Integer salesPrice;



    @Override

    public String getId() {

        return prdtCd;

    }

3) BaseService.java 수정

package com.dasdes.shopmng.domain;


import com.dasdes.shopmng.domain.code.QCommonCode;

import com.dasdes.shopmng.domain.file.QCommonFile;

import com.dasdes.shopmng.domain.program.QProgram;

import com.dasdes.shopmng.domain.program.menu.QMenu;

import com.dasdes.shopmng.domain.user.QUser;

import com.dasdes.shopmng.domain.user.auth.QUserAuth;

import com.dasdes.shopmng.domain.user.auth.menu.QAuthGroupMenu;

import com.dasdes.shopmng.domain.user.role.QUserRole;

import com.chequer.axboot.core.domain.base.AXBootBaseService;

import com.chequer.axboot.core.domain.base.AXBootJPAQueryDSLRepository;

import com.dasdes.shopmng.domain.prdt.QProduct;  //추가


import java.io.Serializable;



public class BaseService<T, ID extends Serializable> extends AXBootBaseService<T, ID> {


    protected QUserRole qUserRole = QUserRole.userRole;

    protected QAuthGroupMenu qAuthGroupMenu = QAuthGroupMenu.authGroupMenu;

    protected QCommonCode qCommonCode = QCommonCode.commonCode;

    protected QUser qUser = QUser.user;

    protected QProgram qProgram = QProgram.program;

    protected QUserAuth qUserAuth = QUserAuth.userAuth;

    protected QMenu qMenu = QMenu.menu;

    protected QCommonFile qCommonFile = QCommonFile.commonFile;

    protected QProduct qProduct = QProduct.product; //추가


    protected AXBootJPAQueryDSLRepository<T, ID> repository;


    public BaseService() {

        super();

    }


    public BaseService(AXBootJPAQueryDSLRepository<T, ID> repository) {

        super(repository);

        this.repository = repository;

    }

}

4) ProductService.java 수정

package com.dasdes.shopmng.domain.prdt;


import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional; //추가


import com.dasdes.shopmng.domain.BaseService;

import com.querydsl.core.BooleanBuilder;  //추가


import javax.inject.Inject;

import com.chequer.axboot.core.parameter.RequestParams;

import java.util.List;


@Service

public class ProductService extends BaseService<Product, String> {

    private ProductRepository productRepository;


    @Inject

    public ProductService(ProductRepository productRepository) {

        super(productRepository);

        this.productRepository = productRepository;

    }


    public List<Product> gets(RequestParams<Product> requestParams) {

    String prdtCd=requestParams.getString("prdtCd", "");

    String prdtNm=requestParams.getString("prdtNm", "");

    String filter = requestParams.getString("filter");

   

    BooleanBuilder builder = new BooleanBuilder();



        if (isNotEmpty(prdtCd)) {

            builder.and(qProduct.prdtCd.eq(prdtCd));

        }


        if (isNotEmpty(prdtNm)) {

            builder.and(qProduct.prdtNm.eq(prdtNm));

        }


        List<Product> prdtList = select().from(qProduct).where(builder).orderBy(qProduct.prdtCd.asc(), qProduct.prdtNm.asc()).fetch();


        if (isNotEmpty(filter)) {

        prdtList = filter(prdtList, filter);

        }

   

        return prdtList;

    }

    

    //저장

    @Transactional

    public void savePrdt(List<Product> product) {

        save(product);

    }

}

3. 서버구동 및 CRUD 테스트

1) 저장/수정테스트 : 정상작동 OK

2) 검색필터 테스트 : 필터링 잘 됨. OK

Axboot 신규화면 만들기 4 - Detail 내역 컬럼 콤보박스 만들기(DB연동) 에서 계속........

만족하셨나요? ~~~~~~~

#axisj #Axboot #Axboot 신규화면 #Axboot화면생성 #Axboot 화면만들기 #Axboot 사용법 #Axboot 프로그래밍 #Axboot매뉴얼 #axboot강좌

Read more

2025년  ERP/CRM/SCM 시스템 종류

2025년 ERP/CRM/SCM 시스템 종류

2025년 글로벌 ERP/CRM/SCM 시스템 순위: 회사, 커뮤니티, 기능 비교 분석 기업들은 효율적인 운영과 경쟁력 강화를 위해 ERP, CRM, SCM 시스템 도입을 적극 검토하고 있습니다. 본 글에서는 시장 점유율, 기능, 고객 만족도, 기술 발전을 고려하여 주요 시스템들의 순위와 특징을 정리했습니다. 아래 순위는 주관적 평가이며, 실제 도입 시 기업의 규모와

해외여행 준비 체크리스트

해외여행 준비 체크리스트

해외여행 준비 체크리스트: 완벽한 여행을 위한 필수 준비 가이드 꿈꿔왔던 해외여행, 설렘과 함께 걱정도 따라옵니다. 꼼꼼한 준비가 완벽한 여행의 시작입니다. 2025년 최신 정보를 바탕으로, 놓치기 쉬운 부분까지 포함한 상세 체크리스트와 함께 걱정 없이 여행을 즐겨보세요! 본 가이드는 항공권 예매부터 현지 적응까지, 단계별로 필요한 정보를 제공합니다. 1. 여행 계획 수립 및

ChatGPT 무료와 유료 차이 비교

ChatGPT 무료와 유료 차이 비교

ChatGPT 무료와 유료(Plus,Pro) 차이 비교 ChatGPT는 오픈AI가 개발한 강력한 대규모 언어 모델로, 다양한 작업에 활용 가능한 놀라운 도구입니다. 무료 버전과 유료 버전인 ChatGPT Plus는 여러 측면에서 차이가 있으며, 어떤 버전을 선택해야 할지는 사용 목적과 예산에 따라 달라집니다. 이 글에서는 ChatGPT 무료와 유료 버전의 차이점을 상세하게 비교 분석하여, 여러분의

손흥민의 축구 인생

손흥민의 축구 인생

손흥민, 축구 역사의 한 페이지: 시대별 주요 활약상 손흥민, 대한민국을 대표하는 축구 스타이자 프리미어 리그를 빛낸 월드클래스 선수. 그의 놀라운 여정을 시대별로 나누어 살펴봅니다. 1. 어린 시절과 유소년 시절 (1992-2008) 손흥민은 1992년 강원도 춘천에서 태어나 어린 시절부터 축구에 몰두했습니다. 아버지 손웅정의 지도 아래 체계적인 훈련을 받으며 뛰어난 기술과 슈팅 능력을

Image 3
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Image 4
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.