본문 바로가기
project

project - spring legacy

by hj_it 2024. 5. 3.

 

개발 순서

1. 테이블 생성(goods)
  - 상품코드, 상품명, 상품유형(공산/농산/유제품/신선), 
    상품가격, 생산자, 상품상태(판매중/판매중지), 수량
2. MyBatis 프로젝트 생성: pom.xml
3. 스프링컨테이너 설정
   가. BasicDatasource / SqlSessionFactoryBean / SqlSessionTemplate
   나. 컴포넌트 설정: @Component / @Autowired 가능하도록 설정
4. 테이블에 대응되는 Dto 클래스 생성: Goods
5. 실행클래스 생성: 컨테이너 테스트
6. mapper 클래스 생성
    가. 기능: select/insert/update
    나. namespace: goods
7. Dao 클래스 생성: GoodsDao / GoodsDaoImpl

 

- E-R 다이어그램

 

 

1. 테이블 생성

- Oracle SQL Developer를 이용하여 GOODS 테이블을 생성

 

2. MyBatis 프로젝트 생성

- pom.xml  설정

 

 

3. 스프링 컨테이너 설정

- config.xml 파일 설정

 컴포넌트 설정

 BasicDataSource, SqlSessionFactoryBean, SqlSessionTemplate 추가

	<context:component-scan 
		base-package="com.kitri.springGoods" />
	
	<bean 
		class="org.apache.commons.dbcp2.BasicDataSource" 
		name="datasource" 
		p:driverClassName="oracle.jdbc.OracleDriver" 
		p:url="jdbc:oracle:thin:@192.168.10.11:1521:DB19"
		p:username="dst09" p:password="dst09" />
		
	<bean 
		class="org.mybatis.spring.SqlSessionFactoryBean" 
		name="sqlSessionFactoryBean" 
		p:dataSource-ref="datasource" 
		p:mapperLocations="classpath:/mybatis/*.xml" 
		p:typeAliasesPackage="com.kitri.springGoods.dto" />
	
	<bean 
		class="org.mybatis.spring.SqlSessionTemplate" 
		name="sqlSessionTemplate" 
		c:sqlSessionFactory-ref="sqlSessionFactoryBean" />

 

 

4. Dto 클래스 생성

- Goods 클래스 생성

public class Goods {
	private String goodscd;
	private String goodsnm;
	private String type;
	private double price;
	private String provider;
	private String status;
	private int qty;
		
	public Goods() {}
	public Goods(String goodscd, String goodsnm, String type, double price, String provider, String status, int qty) {
		this.goodscd = goodscd;
		this.goodsnm = goodsnm;
		this.type = type;
		this.price = price;
		this.provider = provider;
		this.status = status;
		this.qty = qty;
	}
	
	public String getGoodscd() { return goodscd; }
	public void setGoodscd(String goodscd) {
		this.goodscd = goodscd;
	}
	public String getGoodsnm() { return goodsnm; }
	public void setGoodsnm(String goodsnm) {
		this.goodsnm = goodsnm;
	}
	public String getType() { return type; }
	public void setType(String type) {
		this.type = type;
	}
	public double getPrice() { return price; }
	public void setPrice(double price) {
		this.price = price;
	}
	public String getProvider() { return provider; }
	public void setProvider(String provider) {
		this.provider = provider;
	}
	public String getStatus() { return status; }
	public void setStatus(String status) {
		this.status = status;
	}
	public int getQty() { return qty; }
	public void setQty(int qty) {
		this.qty = qty;
	}
	
	@Override
	public String toString() {
		return "Goods [goodscd=" + goodscd + ", goodsnm=" + goodsnm + ", type=" + type + ", price=" + price
				+ ", provider=" + provider + ", status=" + status + ", qty=" + qty + "]";
	}
}

 

 

 

5. 실행 클래스 생성
public class RunMain {
	public static void main(String[] args) throws IOException {
		// 스프링 컨테이너 생성
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
				"classpath:com/kitri/springGoods/config.xml");
	
		// 빈 객체 활용		

		// 스프링컨테이너 소멸
		ctx.close();
	}
}

 

 

6.  mapper 클래스 생성

-  mapper.xml 파일 생성 후 select, insert, update 문 작성

- namespace: goods

<?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">

<mapper namespace="goods" >
	<!-- org.kitri.springmybatis.dto.Member -->
	<select id="findGoods" resultType="goods"> 
	<![CDATA[
	SELECT * FROM goods
	]]>
	</select>
	
	<!-- org.kitri.springmybatis.dto.Member -->
	<!-- int(primitive)/_int(Integer) -->
	<select id="findGoodsByNo" parameterType="String" resultType="goods"> 
	<![CDATA[
	SELECT *
	FROM goods
	WHERE goodscd=#{goodscd}
	]]>
	</select>
	
	<insert id="registergoods" parameterType="goods">
	<![CDATA[
	INSERT INTO goods
	VALUES(#{goodscd}, #{goodsnm}, #{type}, #{price}, #{provider}, #{status}, #{qty})
	]]>
	</insert>
	
	<update id="goodsUpdate" parameterType="goods">
	<![CDATA[
	UPDATE goods
	SET price = #{price}, status = #{status}, qty = #{qty}
	WHERE goodscd=#{goodscd}
	AND goodsnm=#{goodsnm}
	]]>
	</update>
</mapper>

 

 

7. Dao 클래스 생성

- GoodsDao 인터페이스 생성

public interface GoodsDao {
	List<Goods> findGoods();
	Goods findGoodsByNo(String no);
	int registerGoods(Goods goods);
	int updateGoods(
		UpdateConditions updateConditions);	
}

 

- GoodsDaoImpl 클래스 생성

@Component
public class GoodsDaoImpl implements GoodsDao{
	@Autowired
	private SqlSessionTemplate sqlSessionTemplate; 
	
	// select All
	@Override
	public List<Goods> findGoods() {
		List<Goods> memberList = 
				sqlSessionTemplate.selectList(
				"goods.findGoods");
		return memberList;
	}
	
	// select One
	@Override
	public Goods findGoodsByNo(String no) {
		Goods goods = sqlSessionTemplate.selectOne(
			"goods.findGoodsByNo", no);
		return goods;
	}
	
	// insert
	@Override
	public int registerGoods(Goods goods) {
		int cnt = sqlSessionTemplate.insert(
			"goods.registergoods", goods);
		return cnt;
	}

	// update
	@Override
	public int updateGoods(
		UpdateConditions updateConditions) {
		int cnt = sqlSessionTemplate.update(
			"goods.goodsUpdate", updateConditions);
		return cnt;
	}
	
	public SqlSessionTemplate getSqlSessionTemplate() {
		return sqlSessionTemplate;
	}
	public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
		this.sqlSessionTemplate = sqlSessionTemplate;
	}
}

 

 

 

8. 업데이트 시 필요한 dto 생성

- UpdateConditions, MultiConditions 클래스 생성

public class UpdateConditions {
	private double price;
	private String status;
	private int qty;
	private String goodscd;
	private String goodsnm;

	public UpdateConditions() {}	
	public UpdateConditions(double price, String status, int qty, String goodscd, String goodsnm) {
		this.price = price;
		this.status = status;
		this.qty = qty;
		this.goodscd = goodscd;
		this.goodsnm = goodsnm;
	}

	public double getPrice() { return price; }
	public void setPrice(double price) {
		this.price = price;
	}
	public String getStatus() { return status; }
	public void setStatus(String status) {
		this.status = status;
	}
	public int getQty() { return qty; }
	public void setQty(int qty) {
		this.qty = qty;
	}
	public String getGoodscd() { return goodscd; }
	public void setGoodscd(String goodscd) {
		this.goodscd = goodscd;
	}
	public String getGoodsnm() { return goodsnm; }
	public void setGoodsnm(String goodsnm) {
		this.goodsnm = goodsnm;
	}
}
public class MultiConditions {
	private String goodscd;
	private String goodsnm;

	public MultiConditions() {}
	public MultiConditions(String goodscd, String goodsnm) {
		this.goodscd = goodscd;
		this.goodsnm = goodsnm;
	}
	
	public String getGoodscd() { return goodscd; }
	public void setGoodscd(String goodscd) {
		this.goodscd = goodscd;
	}
	public String getGoodsnm() { return goodsnm; }
	public void setGoodsnm(String goodsnm) {
		this.goodsnm = goodsnm;
	}
}

 

 

9. 실행

- 실행 시 동시에 실행 x, 하나의 항목만 활성화하고 나머지는 주석처리 후 실행

public class RunMain {
	
	//private static ClassPathXmlApplicationContext ctx;
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		// 스프링 컨테이너 생성
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
				"classpath:com/kitri/springGoods/config.xml");
	
		// 빈 객체 활용		
		GoodsDao goodsDao =
				(GoodsDao)ctx.getBean("goodsDaoImpl");
		
		// select All
		List<Goods> goodsList = goodsDao.findGoods();
		for(Goods goods : goodsList) {
			System.out.println(goods);
		}
		
		// select One
		System.out.print("상품 번호 입력: ");
		String inputNo = br.readLine();
		Goods goods = goodsDao.findGoodsByNo(inputNo);
		System.out.println(goods);
		
		// insert
		System.out.print("추가할 데이터 입력: ");
		String s = br.readLine();
		String[] arr = s.split(" ");
		String goodscd = arr[0];
		String goodsnm = arr[1];
		String type = arr[2];
		double price = Double.parseDouble(arr[3]);
		String provider = arr[4];
		String status = arr[5];
		int qty = Integer.parseInt(arr[6]);
		
		Goods goods = new Goods(goodscd, goodsnm, type, price, provider, status, qty);
		int cnt = goodsDao.registerGoods(goods);
		System.out.println(cnt + "개 데이터 추가");
		
		// update
		System.out.print("업데이트 할 품목: ");
		String s = br.readLine();
		String[] arr = s.split(" ");
		String goodscd = arr[0];
		String goodsnm = arr[1];
		MultiConditions multiConditions = new MultiConditions(goodscd, goodsnm);
		
		System.out.print("변경할 값: ");
		String s2 = br.readLine();
		String[] arr2 = s2.split(" ");
		double price = Double.parseDouble(arr2[0]);
		String status = arr2[1];
		int qty = Integer.parseInt(arr2[2]);
		
		UpdateConditions updateConditions = 
				new UpdateConditions(price, status, qty, multiConditions.getGoodscd(), multiConditions.getGoodsnm());
		int cnt = goodsDao.updateGoods(updateConditions);
		System.out.println(cnt + "개 데이터 업데이트");
		
		// 스프링컨테이너 소멸
		br.close();
		ctx.close();
	}
}