개발 순서
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();
}
}