4月14日

21267 ワード

きょう習った

  • 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);	// 제품 삭제
    }
    
  • リソースフォルダにmapperフォルダを作成した後、その中にあります.xmlファイル
  • を生成する
  • マッパータグ内に抽象メソッドを入力インタフェースファイルの位置
  • を設定する.
  • idは抽象メソッド名、resultTypeは結果を格納して返されるオブジェクト
    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>
    ビューを必要としないRestControlであるため、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);
    	}
    }