Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 에프랩
- Flutter
- 성능테스트
- 자바백엔드
- 부트캠프
- redis
- 로드밸런서
- 후기
- github
- 백엔드
- MySQL
- 플러터
- 코딩테스트
- Spring
- EC2
- 도커
- 레디스
- AWS
- java
- 데이터구조
- grafana
- nGrinder
- 멘토링
- F-Lab
- backend
- error
- 알고리즘
- 자바
- FLAB
- 트러블슈팅
Archives
- Today
- Total
민스씨의 일취일장
LogT | Java Spring로 DB 다루기에 대해 알게된 모든 내용과 고민들 본문
Programming Language & Framework/JAVA & Spring
LogT | Java Spring로 DB 다루기에 대해 알게된 모든 내용과 고민들
읻민스 2023. 1. 13. 22:46반응형
Java Spring으로 DB를 다루는 방법에 대해서 알게된 모든 내용과 고민들을 시간순으로 기록하는 페이지이다.
Java를 이용해서 DB 연결하기
사용한 DB : MySQL
- JDBC API를 사용한다.
- DriverManager 객체를 사용한다.
- 데이터를 테이블로 읽어와서 한줄 (row) 단위로 읽으면서 사용한다.
Spring을 이용해서 DB 연결하기
사용한 DB : MySQL
- Spring JDBC API를 사용한다.
- DriverManagerDataSource 객체를 사용한다.
- root-context.xml에 Bean으로 연결 정보를 저장해서 연결을 단순화 하고 향후 수정해야 할 곳을 한곳으로 모을 수 있다.
Bean
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://[host]/[DB-NAME]?useUnicode=true&characterEncoding=utf8"></property>
<property name="username" value="[Registered-DB-ID]"></property>
<property name="password" value="[Registered-DB-Password]"></property>
</bean>
위에서 [host], [DB-NAME], [Registered-DB-ID], [Registered-DB-Password]에는 각자 상황에 맞는 값을 넣어주어야 한다.
대입해야 할 곳 | 예시 |
host | localhost:3306 |
DB-NAME | ydminsdb |
Registered-DB-ID | root |
Registered-DB-Password | 실제 등록한 비밀번호 |
직접 연결
ApplicationContext ac = new GenericXmlApplicationContext("file:src/main/webapp/WEB-INF/spring/**/root-context.xml");
DataSource ds = ac.getBean(DataSource.class);
Connection conn = ds.getConnection();
Annotation을 이용한 자동 연결
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
public class DBConnectionTest2Test {
@Autowired
DataSource ds;
. . .}
Spring을 이용해서 DB에서 사용할 Query 사용하는 방법
PreparedStatement 객체를 사용한다.
직접 작성
Connection conn = ds.getConnection();
String sql = "insert int board values ('id', 'ydmins', '2023-01-13", "DB 학습");"
PreparedStatement pstmt = conn.prepareStatement(sql);
int rowCnt = pstmt.executeUpdate();
- excueteUpdate()
SQL Query의 insert, delete, update에 사용하는 함수이다. return 값은 작업한 행의 수, 즉 int값을 반환한다. return 값이 0일 경우 실패한 것이다.
PrearedStatement의 메서드를 사용
Connection conn = ds.getConnection();
String sql = "insert into board values (?,?,?,?);";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "[id]");
pstmt.setString(2, "[name]");
pstmt.setDate(3, "[contents]");
pstmt.setDate(4,"[date]");
int rowCnt = pstmt.executeUpdate();
SQL Query문에서 DB에 저장할 값들의 자리에 ?를 넣는다. 그다음 settter를 활용해 하나하나 값을 넣어준다. 이렇게 했을 때의 두가지 장점이 있다.
- SQL Injection 공격 방지
SQL Query 영역에 의도치 않은 Query를 주입하는 공격에 대비할 수 있다.
- 성능 향상
sql에 저장된 쿼리문을 인스턴스 변수처럼 사용하기 때문에 하나의 쿼리문으로 인식해 성능 향상을 기대할 수 있다. 직접작성할 경우 각각의 Query Execute에 사용된 쿼리문을 각각 인식하기 때문이다. [* 설명히 개념들의 오인으로 틀릴 수 있음을 미리 알린다.]
728x90
반응형
'Programming Language & Framework > JAVA & Spring' 카테고리의 다른 글
LogT | Java Spring의 DAO에 대해 알게된 모든 내용과 고민들 (0) | 2023.01.17 |
---|---|
TIssue | org.springframework.beans.factory.NoSuchBeanDefinitionException (0) | 2023.01.17 |
LogT | Java Spring의 Exception 처리에 대해 알게 된 모든 내용과 고민들 (0) | 2023.01.12 |
LogT | Java Spring의 쿠키와 세션에 대해 알게 된 모든 내용과 고민들 (0) | 2023.01.11 |
LogT | Java Spring의 Application내의 데이터 저장소인 내장객체의 유효범위와 속성에 대해 알게된 모든 내용과 고민들 (0) | 2023.01.10 |