Spring JDBC 순서
5. pom.xml: spring-jdbc, ojdbc6(datanucleus)
6. web.xml: *.do, encodingFilter
7. src/main/resource/sqls/
- db.properties
- jdbc.sql
00. 익명함수(Anonymous Functions)
함수의 이름이 없는 함수로, 공통적으로 일급객체(First Clss Citizen)라는 특징을 가지고 있다.
일급객체란, 다른 객체에 적용가능한 연산을 모두 지원하는 개체를 가르킨다. 함수를 값으로 사용할 수 있으며 파라미터로 전달 및 변수에 대입하기와 같은 연산이 가능하다.
※ 자바 익명함수는 메소드를 하나만 가지고 있을 때 람다식으로 표현 가능하다.
▶︎ @FunctionalInterface(함수형 인터페이스)
- 구현해야 할 추상메소드가 하나만 정의된 인터페이스(메소드가 두개 이상 선언되면 컴파일러에서 오류발생)
@FunctionalInterface // 함수형 interface 선언
interface Math {
public int Calc(int first, int second);
}
01. Lamda(람다)
- 익명함수를 지칭하며 수학에서 사용되는 함수를 단순하게 표현하는 방법
- 람다 대수는 이름을 가질 필요가 없다.(익명함수)
▶︎ 장단점
장점
- 코드의 간결성 : 불필요한 반복문의 삭제 가능, 복잡한 식을 단순하게 표현
- 지연연산 수행 : 지연연산을 수행함으로써 불필요한 연산을 최소화
- 병렬처리 수행 : 멀티스레드를 활용하여 병렬처리 사용
단점
- 호출이 까다롭다
- 람다 stream을 사용 할때 단순 for문 혹은 while문 사용시 성능 저하
- 불필요하게 자주 사용하면 오히려 가독성 저해
▶︎ 람다 표현식
1. 람다는 매개변수 화살표(->) 함수몸체로 이용하여 사용 할 수 있습니다.
2. 매개변수가 하나일 경우 매개변수를 생략 할 수 있습니다.
3. 함수몸체가 단일 실행문이면 괄호{}를 생략 할 수 있습니다.
4. 함수몸체가 return문으로만 구성되어 있는 경우 괄호{}를 생략 할 수 없습니다.
1. (매개변수) -> {함수몸체}
2. () -> {함수몸체}
3. (매개변수) -> 함수몸체
4. (매개변수) -> {return 0;}
02. JDBC Template을 활용하여 DaoImpl 구현하기
▶︎ 자바 익명함수
// 자바 익명함수(Functional interface) -> 람다 가능
@Override
public List<JDBCDto> selectList() {
List<JDBCDto> list = null;
String sql = " SELECT SEQ, WRITER, TITLE, CONTENT, REGDATE FROM JDBCBOARD ORDER BY SEQ DESC ";
list = jdbcTemplate.query(sql, new RowMapper<JDBCDto>() {
// 익명함수 == 람다 거의 비슷함
// 자바 익명함수 는 메소드를 하나만 가지고 있을 때 람다식으로 구현할 수 있다.
@Override
public JDBCDto mapRow(ResultSet rs, int rowNum) throws SQLException {
JDBCDto res = new JDBCDto(rs.getInt(1), rs.getString(2), rs.getString(3),rs.getString(4), rs.getDate(5));
return res;
}
});
return list;
}
▶︎ 람다식
@Override
public List<JDBCDto> selectList() {
List<JDBCDto> list = null;
String sql = " SELECT SEQ, WRITER, TITLE, CONTENT, REGDATE FROM JDBCBOARD ORDER BY SEQ DESC ";
list = jdbcTemplate.query(sql,
// java 8버전부터 나온 Lamda식 사용
(rs,rowNum) -> {
JDBCDto dto = new JDBCDto(rs.getInt(1), rs.getString(2),
rs.getString(3), rs.getString(4),rs.getDate(5));
return dto;
});
return list;
}
▶︎ RowMapper inner class
private static final class MyMapper implements RowMapper<JDBCDto>{
@Override
public JDBCDto mapRow(ResultSet rs, int rowNum) throws SQLException {
JDBCDto dto = new JDBCDto();
dto.setSeq(rs.getInt(1));
dto.setWriter(rs.getString(2));
dto.setTitle(rs.getString(3));
dto.setContent(rs.getString(4));
dto.setRegdate(rs.getDate(5));
return dto;
}
}
@Override
public List<JDBCDto> selectList() {
List<JDBCDto> list = null;
String sql = " SELECT SEQ, WRITER, TITLE, CONTENT, REGDATE FROM JDBCBOARD ORDER BY SEQ DESC ";
list = jdbcTemplate.query(sql, new MyMapper());
return list;
}
@Override
public JDBCDto selectOne(int seq) {
JDBCDto res = null;
String sql = " SELECT SEQ, WRITER, TITLE, CONTENT, REGDATE FROM JDBCBOARD WHERE SEQ = ? ";
// sql query에 바인딩 하기 위한 artument로서 object를 담아주고,여기에 {@link --}안에 sql파라미터 값을 넣어줌
// arg는 값뿐만 아니라 타입이나 부가적인 범위(특징)을 포함한다.
// sql문을 실행하고 반환된 한개의 result row를 RowMapper을 통해 새로운 object에 바인딩 하여 리턴한다.
res = jdbcTemplate.queryForObject(sql, new Object[] {seq}, new MyMapper());
return res;
}
@Override
public int insert(JDBCDto dto) {
int res = 0;
System.out.println(dto.getWriter());
String sql = " INSERT INTO JDBCBOARD VALUES(JDBCBOARDSEQ.NEXTVAL, ?, ?, ?, SYSDATE) ";
res = jdbcTemplate.update(sql, new Object[] {dto.getWriter(), dto.getTitle(), dto.getContent()});
return res;
}
@Override
public int update(JDBCDto dto) {
int res = 0;
String sql = " UPDATE JDBCBOARD SET TITLE =?, CONTENT =? WHERE SEQ = ? ";
res = jdbcTemplate.update(sql, dto.getTitle(), dto.getContent(), dto.getSeq());
return res;
}
@Override
public int delete(int seq) {
int res = 0;
String sql = " DELETE FROM JDBCBOARD WHERE SEQ = ? ";
res = jdbcTemplate.update(sql, seq);
return res;
}
'Web > Spring' 카테고리의 다른 글
[Spring]SpringBoot02_Thymeleaf: utility, expression, params.. (0) | 2020.11.11 |
---|---|
[Spring]SpringBoot01 (0) | 2020.11.10 |
[Spring]MVC_07.update (0) | 2020.11.07 |
[Spring]MVC_06.file (0) | 2020.11.06 |
[Spring]MVC_05.security (0) | 2020.11.06 |