오전내용 못함
책 <스프링 퀵 스타트>
Q. 시퀀스로 만들어지는 경우, DB에서 가져올때 현재 아이디를 받아오고 싶음. 책 p 499
A. 인서트 + 셀렉트, 자바 안에서 리턴 타입을 Void가 아닌, Integer, String 등으로 세팅한다.
EX) 쇼핑몰 - 주문 상세와 주문 원장. 주문 원장이 Insert 되지만 이때의 ID가 주문 상세에 들어가야함.
CDATA Section
크거나 작다, 작거나 등의 부등호를 쓸떄 사용해야함. p.501
p503의 LIKE 사용 방법 확인
전체 폴더구조
contents.vo = 객체 정의
contentsmapper.xml = SQL문 담고있음.
mybatis.xml = com.vo.아래 객체를 무엇이라 부를지 정의
매퍼의 위치 정의
com.dao = 한줄로 줄어들었음. 잘 모르겠다.
com.biz = ContentsBiz.java 이전의 Service 부분과 같은 역할인 듯. 스프링연결 되어있음.
dao부분 한줄로 모든 요청을 처리하는 방법인 듯... 어떻게? -> dao를 인터페이스로 설정했기 때문에 가능한 것.
Dao 밑에 두개가 있었지만, 오늘은 바로 한다. 완전히는 모르겠다.
dao를 인터페이스로 바꿧기 때문에 매퍼도 달라진다.
스몰 워크샵
vo아래 user 추가 후, app2를 이용하여 User에 대한 CRUD 구현.세팅 부분
- mybatis 아래에 usermapper.xml을 만든다
- SQL문 내용을 바꾼다.
- namespace를 바꾼다.
- resulttype도 바꾼다.
- 1234567891011121314151617181920212223242526272829303132333435363738394041<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-//mybatis.org/DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.dao.UserDao"><insert id="insert" parameterType="user">INSERT INTO USERS VALUES (CSEQ.NEXTVAL,#{title},#{content},SYSDATE,0,#{author})</insert><update id="update" parameterType="user">UPDATE USERS SET TITLE=#{title}, CONTENT=#{content} WHERE ID=#{id}</update><delete id="delete" parameterType="Integer">DELETE USERS FROM CONTENTS WHERE ID=#{k}</delete><select id="select" parameterType="Integer"resultType="contents">SELECT * FROM USERS WHERE ID=#{k}</select><select id="selectall" resultType="user">SELECT * FROM USERS</select><update id="setcnt" parameterType="Integer">UPDATE USERS SET CNT=CNT+1 WHERE ID=#{k}</update><select id="search" parameterType="java.util.HashMap"resultType="contents"><![CDATA[SELECT * FROM USERSWHERE CNT > #{start}AND CNT <= #{end}]]></select></mapper>
cs - Dao아래 frame을 이용하요 UserDao를 만든다.
- @Repository("udao")
- 1234567891011package com.dao;import org.springframework.stereotype.Repository;import com.frame.Dao;import com.vo.UserVO;@Repository("udao")public interface UserDao extends Dao<String, UserVO> {}
cs - mybatis.xml에 usermapper의 위치를 추가(?)한다.
- 123456789101112131415<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//mybatis.org/DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><typeAliases><typeAlias type="com.vo.ContentsVO" alias="contents"/><typeAlias type="com.vo.UserVO" alias="user"/></typeAliases><mappers><mapper resource="com/mybatis/contentsmapper.xml"/><mapper resource="com/mybatis/usermapper.xml"/></mappers></configuration>
cs - Frame의 Biz를 이용하요 UserBiz를 만든다. 필요한 기능을 dao에 호출하는 기능.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 package com.biz;import java.util.ArrayList;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.dao.UserDao;import com.frame.Biz;import com.vo.UserVO;@Service("ubiz")public class UserBiz implements Biz<String, UserVO> {@AutowiredUserDao dao;@Overridepublic void register(UserVO v) throws Exception {dao.insert(v);}@Overridepublic void remove(String k) throws Exception {int result = dao.delete(k);if(result == 0 ) {throw new Exception();}}@Overridepublic void modify(UserVO v) throws Exception {int result = dao.update(v);if(result == 0 ) {throw new Exception();}}@Overridepublic UserVO get(String k) throws Exception {UserVO user = null;user = dao.select(k);return user;}@Overridepublic ArrayList<UserVO> get() throws Exception {ArrayList<UserVO> list = null;list = dao.selectall();return list;}@Overridepublic ArrayList<UserVO> search(Object obj) throws Exception {// TODO Auto-generated method stubreturn null;}}cs
앱 테스트 부분
- get bean 부분을 ubiz로 바꾼다.
1234567891011121314151617181920212223242526272829303132333435363738 package com.test;import java.util.ArrayList;import java.util.HashMap;import org.springframework.context.support.AbstractApplicationContext;import org.springframework.context.support.GenericXmlApplicationContext;import com.frame.Biz;import com.vo.ContentsVO;import com.vo.UserVO;public class App2 {public static void main(String[] args) {System.out.println("App Start .......");AbstractApplicationContext factory =new GenericXmlApplicationContext("myspring.xml");System.out.println("Spring Started .......");// IoCBiz<String,UserVO> biz =(Biz)factory.getBean("ubiz"); // ubiz로 변경됨//get allArrayList<UserVO> user = null;try {System.out.println(user = biz.get());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}factory.close();System.out.println("Spring End .......");System.out.println("App End .......");}}cs
- 비즈 부분에 트렌젝셔널 세팅 -> 인서트를 두개 동시에 하면, 안들어간다. 왜냐하면 아이디 중복.
오류 유형
이름에 스페이스때문에 조회가 안되는 경우
Q. 델레트나, 업데이트가 실패해도 app부분에선 그냥 실행된 것으로 뜸.
해결방법
Dao인터페이스의 해당 기능들을 int 리턴하도록 바꿈. -> Biz 부분에 가서 결과값을 int에 할당한 후, 0인 경우에 error 를 던지도록 세팅한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | package com.frame; import java.util.ArrayList; public interface Dao<K,V> { public int insert(V v) throws Exception; //int로 바꾼것을 확인. public int delete(K k) throws Exception; public int update(V v) throws Exception; public V select(K k) throws Exception; public ArrayList<V> selectall() throws Exception; public ArrayList<V> search(Object obj) throws Exception; } | cs |
Dao 부분
1 2 3 4 5 6 7 8 9 10 11 12 | package com.dao; import org.springframework.stereotype.Repository; import com.frame.Dao; import com.vo.UserVO; @Repository("udao") public interface UserDao extends Dao<String, UserVO> { } | cs |
UserDao에는 내용이 없기때문에 바로 반영.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | package com.biz; import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.dao.UserDao; import com.frame.Biz; import com.vo.UserVO; @Service("ubiz") public class UserBiz implements Biz<String, UserVO> { @Autowired UserDao dao; @Override public void register(UserVO v) throws Exception { dao.insert(v); } @Override public void remove(String k) throws Exception { int result = dao.delete(k); // delete의 결과 값을 result에 할당한 후 만약 안되면 오류를 던지도록 if(result == 0 ) { throw new Exception(); } } @Override public void modify(UserVO v) throws Exception { int result = dao.update(v); // if(result == 0 ) { throw new Exception(); } } @Override public UserVO get(String k) throws Exception { UserVO user = null; user = dao.select(k); return user; } @Override public ArrayList<UserVO> get() throws Exception { ArrayList<UserVO> list = null; list = dao.selectall(); return list; } @Override public ArrayList<UserVO> search(Object obj) throws Exception { // TODO Auto-generated method stub return null; } } | cs |
UserBiz부분
댓글
댓글 쓰기