일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 김성박
- 다시보자
- 깃헙
- 속성 선택자
- 가상요소 선택자
- vmin
- 다시볼 것
- 즐거운 자바
- 보충필요
- 가상클래스 선택자
- HTML Templating
- EDWITH
- 상속
- optgroup
- JavaScript
- nth-child()
- 복합 선택자
- vmax
- 부스트코스
- 즐거운자바
- ES6
- spring
- nth-of-type()
- 서블릿
- 소스트리
- jsp
- 부정 선택자
- 웹개발
- 자바
- datalist
Archives
- Today
- Total
기억의 DataBase
Spring Framework를 활용한 방명록 - 2. DB/DTO/DAO(Repository) 본문
-
DB
※ Oracle과 MySQL
NUMBER → bigint(크기에 따라 다양)
CLOB → text
DATE → datetime
unsigned : int 형의 경우 범위를 양수로 지정(확장)
( -2^63 ~ 2^63-1 → 0 ~ 2^63-1 + 2^63)
auto_increment : 새로운 열에 대해서 유니크한 값을 생성할 때 사용
(Oracle의 sequence와 유사)
PRIMARY KEY(colume) : CONSTRAINT PK_colume PRIMARY KEY(colume)
-
DTO
Field와 getter/setter를 가진 DTO 생성(toString()도 추가)
-
DAO(Repository)
@Repository
public class LogDao {
private NamedParameterJdbcTemplate jdbc;
private SimpleJdbcInsert insertAction;
public LogDao(DataSource dataSource){
this.jdbc = new NamedParameterJdbcTemplate(dataSource);
this.insertAction = new SimpleJdbcInsert(dataSource)
.withTableName("log") // 입력할 테이블의 이름
.usingGeneratedKeyColumns("id");
// 아이디가 자동으로 입력되도록 함(입력받는 것이 아니라)
// 아이디가 자동으로 입력되도록 함(입력받는 것이 아니라)
}
public Long insert(Log log){
// 입력할 dto log를 map으로 변환
SqlParameterSource params = new BeanPropertySqlParameterSource(log);
// insert 하면서, 자동 생성된 id(Long)을 반환
// insert 하면서, 자동 생성된 id(Long)을 반환
return insertAction.executeAndReturnKey(params).longValue();
}
}
DAO는 DB 연결에 관한 부분이므로 @Repository를 표시
withTableName("테이블명") : insert할 Table명을 명시
usingGeneratedKeyColumns("컬럼명") : auto_increment를 통해 생성된 값이, "컬럼명"에 자동으로 입력
excuteAndReturnKEY("map으로 변환된 입력된 DTO") : insert를 실행후에, 자동 생성된 값(auto_increment) 반환
longValue() : 값을 long으로 변환
public class GuestbookDaoSqls {
public static final String SELECT_PAGING = "SELECT id, name, content, regdate FROM guestbook
ORDER BY id DESC LIMIT :start, :limit";
//limit : 시작값, 갯수
public static final String DELETE_BY_ID = "DELETE FROM guestbook WHERE id = :id";
public static final String SELECT_COUNT = "SELECT count(*) FROM guestbook";
}
GuestbookDao에서 사용하는 SQL문을 별도로 관리하는 클래스
(1. import static kr.or.connect.guestbook.dao.GuestbookDaoSqls.*;
2. import static kr.or.connect.guestbook.dao.GuestbookDaoSqls.SELECT_PAGING;
3. GuestbookDaoSqls.SELECT_PAGING)
LIMIT( LIMIT 시작값(0부터 시작), 갯수 or LIMIT 갯수)
Paging을 하기 위해 사용한 MySQL의 Select 조건
ex) SELECT * FROM log LIMIT 5, 5 -> 6번째 부터 5개를 가져옴(0부터 시작이므로)
@Repository
public class GuestbookDao {
private NamedParameterJdbcTemplate jdbc;
private SimpleJdbcInsert insertAction;
private RowMapper<Guestbook> rowMapper = BeanPropertyRowMapper.newInstance(Guestbook.class);
public GuestbookDao(DataSource dataSource){
this.jdbc = new NamedParameterJdbcTemplate(dataSource);
this.insertAction = new SimpleJdbcInsert(dataSource)
.withTableName("guestbook")
.usingGeneratedKeyColumns("id");
}
public List<Guestbook> selectAll(Integer start, Integer limit){
Map<String, Integer> params = new HashMap<>();
params.put("start", start);
params.put("limit",limit);
return jdbc.query(SELECT_PAGING, params, rowMapper);
}
public Long insert(Guestbook guestbook){
SqlParameterSource params = new BeanPropertySqlParameterSource(guestbook);
return insertAction.executeAndReturnKey(params).longValue();
}
public int deleteById(Long id){
Map<String,?> params = Collections.singletonMap("id", id);
return jdbc.update(DELETE_BY_ID, params);
}
public int selectCount(){
return jdbc.queryForObject(SELECT_COUNT, Collections.emptyMap(), Integer.class);
}
}
RowMapper : DB에서 Select해서 가져온 결과값을, DTO의 멤버필드에 Mapping하기 위해서 필요
'Spring' 카테고리의 다른 글
Spring Framework를 활용한 방명록 - 3. Service/Controller/JSP (0) | 2019.04.05 |
---|---|
Spring Framework를 활용한 방명록 - 1.설정 (0) | 2019.03.31 |
Spring MVC (0) | 2019.03.25 |
Spring JDBC (0) | 2019.03.22 |
Java Config를 통한 IoC/DI (0) | 2019.03.21 |
Comments