웹 개발/[KLOZ] 웹 프로젝트

[KLOZ] 한 행 입력~ 여러 행 입력~ 할 때 Dto와 Controller

cha430 2025. 6. 4. 16:03

 

@Data
@Builder
public class MainDto {

	private int result;
	private ArrayList<Item> data;

	@Data
	public static class Item {
		String accountTitle;	// 계정과목
		String assetCode;	// 자산코드
		String assetName;	// 자산명

Dto가 이런 식으로 되어있다고 치고

 


 

한 번에 여러 행을 저장하고 싶을 때

 

Controller에서

 

public MainDto insert(@RequestBody MainDto dto)

List<MainDto.Item> itemList = dto.getData();

 

이런식으로 할 수 있다.

 

getData 할 경우 Dto에다가 data를 ArrayList로 선언했기 때문에 여러 행을 한 번에 받아서 처리할 수 있다.

 

int result = service.insertAsset(dto.getData());
	return MainDto.builder().result(result).build();

 

이렇게도 가능

 


 

 

한 번에 한 행씩 저장하고 싶을 때

 

Controller에서

public MainDto insert(@RequestBody MainDto. Item item)

 

으로 단일 아이템 처리

 

int result = service.insertAsset(item);
	return MainDto.builder().result(result).build();

 

 

 

 


 

 

이 때 Vue 컴포넌트 에서는

 

// 모달 입력값을 서버로 전송하는 modelRegister
const modalRegister = async () => {
    const insertModalData = {
        data: [
            {
                accountTitle: subModal.value,
                assetName: nameModal.value,
                acqQty: quantityModal.value,
                acqDate: regDateModal.value,
                acqPrice: priceModal.value,
                project: projectModal.value,
                userId: userIdModal.value,
                useDept: deptModal.value,
                vendor: vendorModal.value,
                spec: specModal.value,
                model: modelModal.value,
                remark: remarkModal.value
            }
        ]
    }

 

이런식으로 data: [] 로 보내는 건 List 보내는 것이다

한 행 저장해서 List 보내도 문제될 건 없다.

 

const insertModalData = {
  accountTitle: subModal.value,
  assetName: nameModal.value,
  acqQty: quantityModal.value,
  acqDate: regDateModal.value,
  acqPrice: priceModal.value,
  project: projectModal.value,
  userId: userIdModal.value,
  useDept: deptModal.value,
  vendor: vendorModal.value,
  spec: specModal.value,
  model: modelModal.value,
  remark: remarkModal.value
}

 

한 행 저장하려

data 배열에 담지 않고 그냥 이렇게 객체에 담아서 보내면 됨

 

await axios.post('/main/insertAsset.do', insertModalData)

 

axois 로 POST 요청 보내기

 

 


 

 

그리고 mapper.xml에서

 

 

지금 DB의 컬럼명과(snake_case) DTO 변수명(camelCase)  다르기 때문에 (코딩 컨벤션..!)

 

select * from 하면 안 돼요~^-^

 

<select id="getItems" resultType="dev.kloz.boot.assetsmanager.main.dto.MainDto$Item">
    SELECT
        asset_code AS assetCode,
        user_id AS userId,
        account_title AS accountTitle,
        asset_name AS assetName,
        acq_qty AS acqQty,
        acq_date AS acqDate,
        acq_price AS acqPrice,
        project,
        use_dept AS useDept,
        vendor,
        spec,
        model,
        remark
    FROM tbl_asset
</select>

 

그리고 INSERT 할 때는 그냥 써주면 돼요 AS 금지 ^-^