4월 14일
오늘 배운 것
- MyBatis XML을 이용하여 사용하기
MyBatis XML을 이용하여 사용하기
- XML을 이용할 Mapper를 새로 생성
package com.myapp.mybatis.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.myapp.mybatis.model.Product;
@Mapper
public interface ProductMapper {
// 구현이 안된 추상메소드들을 연결된 mapper폴더의 ProductMapper.xml에서 작성한다.
Product selectProductById(Long id); // id로 제품 하나 검색
List<Product> selectAllProducts(); // 모든 제품 검색
void insertProduct(Product product); // 제품 생성
void updateProduct(Product product); // 제품 수정
void deleteProductById(Long id); // 제품 삭제
}
- resources 폴더 안에 mapper폴더 생성 후 안에 .xml파일 생성
- mapper 태그안에 추상메소드를 입력한 Interface파일의 위치를 설정
- id는 추상메소드이름, resultType은 결과를 저장하고 Return할 객체
parameterType은 입력한 데이터를 받을 객체
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- com.myapp.mybatis.mapper 패키지 안의 ProductMapper.java를 여기서 입력하겠다는 설정 -->
<mapper namespace="com.myapp.mybatis.mapper.ProductMapper">
<select id="selectProductById" resultType="Product"> <!-- application.properties에 설정을 하지 않았다면 resultType="com.myapp.mybatis.model.Product" 라고 적었야함 -->
SELECT prod_id
,prod_name
,prod_price
FROM products
WHERE prod_id = #{prodId}
</select>
<select id="selectAllProducts" resultType="Product">
SELECT prod_id
,prod_name
,prod_price
FROM products
</select>
<insert id="insertProduct" parameterType="Product">
INSERT INTO products (prod_name, prod_price)
VALUES (#{prodName}, #{prodPrice})
</insert>
<update id="updateProduct" parameterType="Product">
UPDATE products
SET prod_name=#{prodName}, prod_price=#{prodPrice}
WHERE prod_id=#{prodId}
</update>
<delete id="deleteProductById">
DELETE FROM products
WHERE prod_id=#{prodId}
</delete>
</mapper>
- View가 필요없는 RestController라서 Postman으로 테스트
package com.myapp.mybatis.controller;
import java.util.List;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.myapp.mybatis.mapper.ProductMapper;
import com.myapp.mybatis.model.Product;
@RestController // view 없이 바로 return
@RequestMapping("/products")
public class ProductController {
private ProductMapper productMapper;
// 생성자 주입(객체를 생성자 주입으로 입력시 @Autowired 필요없음)
public ProductController(ProductMapper productMapper) {
this.productMapper = productMapper;
}
@GetMapping("/{id}")
public Product getProduct(@PathVariable("id") Long prodId) {
// mybatis는 repository 대신 매퍼를 만듬
Product product = productMapper.selectProductById(prodId);
return product;
}
@GetMapping
public List<Product> getproductList() {
List<Product> products = productMapper.selectAllProducts();
return products;
}
@PostMapping // Parameter로 prodName, prodPrice가 들어와야 한다.
public void createProduct(@RequestParam("prodName") String prodName, @RequestParam("prodPrice") int prodPrice) {
productMapper.insertProduct(new Product(prodName, prodPrice));
}
@PutMapping("/{id}")
public void updateProduct(@PathVariable("id") Long prodId ,@RequestParam("prodName") String prodName, @RequestParam("prodPrice") int prodPrice) {
productMapper.updateProduct(new Product(prodId, prodName, prodPrice));
}
@DeleteMapping("/{id}")
public void deleteProduct(@PathVariable("id") Long prodId) {
productMapper.deleteProductById(prodId);
}
}
package com.myapp.mybatis.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.myapp.mybatis.model.Product;
@Mapper
public interface ProductMapper {
// 구현이 안된 추상메소드들을 연결된 mapper폴더의 ProductMapper.xml에서 작성한다.
Product selectProductById(Long id); // id로 제품 하나 검색
List<Product> selectAllProducts(); // 모든 제품 검색
void insertProduct(Product product); // 제품 생성
void updateProduct(Product product); // 제품 수정
void deleteProductById(Long id); // 제품 삭제
}
parameterType은 입력한 데이터를 받을 객체
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- com.myapp.mybatis.mapper 패키지 안의 ProductMapper.java를 여기서 입력하겠다는 설정 -->
<mapper namespace="com.myapp.mybatis.mapper.ProductMapper">
<select id="selectProductById" resultType="Product"> <!-- application.properties에 설정을 하지 않았다면 resultType="com.myapp.mybatis.model.Product" 라고 적었야함 -->
SELECT prod_id
,prod_name
,prod_price
FROM products
WHERE prod_id = #{prodId}
</select>
<select id="selectAllProducts" resultType="Product">
SELECT prod_id
,prod_name
,prod_price
FROM products
</select>
<insert id="insertProduct" parameterType="Product">
INSERT INTO products (prod_name, prod_price)
VALUES (#{prodName}, #{prodPrice})
</insert>
<update id="updateProduct" parameterType="Product">
UPDATE products
SET prod_name=#{prodName}, prod_price=#{prodPrice}
WHERE prod_id=#{prodId}
</update>
<delete id="deleteProductById">
DELETE FROM products
WHERE prod_id=#{prodId}
</delete>
</mapper>
package com.myapp.mybatis.controller;
import java.util.List;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.myapp.mybatis.mapper.ProductMapper;
import com.myapp.mybatis.model.Product;
@RestController // view 없이 바로 return
@RequestMapping("/products")
public class ProductController {
private ProductMapper productMapper;
// 생성자 주입(객체를 생성자 주입으로 입력시 @Autowired 필요없음)
public ProductController(ProductMapper productMapper) {
this.productMapper = productMapper;
}
@GetMapping("/{id}")
public Product getProduct(@PathVariable("id") Long prodId) {
// mybatis는 repository 대신 매퍼를 만듬
Product product = productMapper.selectProductById(prodId);
return product;
}
@GetMapping
public List<Product> getproductList() {
List<Product> products = productMapper.selectAllProducts();
return products;
}
@PostMapping // Parameter로 prodName, prodPrice가 들어와야 한다.
public void createProduct(@RequestParam("prodName") String prodName, @RequestParam("prodPrice") int prodPrice) {
productMapper.insertProduct(new Product(prodName, prodPrice));
}
@PutMapping("/{id}")
public void updateProduct(@PathVariable("id") Long prodId ,@RequestParam("prodName") String prodName, @RequestParam("prodPrice") int prodPrice) {
productMapper.updateProduct(new Product(prodId, prodName, prodPrice));
}
@DeleteMapping("/{id}")
public void deleteProduct(@PathVariable("id") Long prodId) {
productMapper.deleteProductById(prodId);
}
}
Author And Source
이 문제에 관하여(4월 14일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tutu10000/4월-14일저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)