Spring 학습 의 JdbcTemplate
8858 단어 springJdbcTemplate
Spring 은 템 플 릿 방식 으로 jdbc 데이터베이스 작업 의 고정 절 차 를 밀봉 하고 풍부 한 callback 리 셋 인터페이스 기능 을 제공 하여 사용자 가 가공 디 테 일 을 사용자 정의 하 는 데 편리 하고 jdbc 작업 을 모듈 화 하 며 전통 적 인 JDBC 작업 의 복잡 하고 번 거 로 운 과정 을 간소화 합 니 다.
JDBCtemplate 는 주로 다음 과 같은 다섯 가지 방법 을 제공 합 니 다.
(1) execute 방법: 모든 SQL 문 구 를 실행 할 수 있 고 보통 DDL 문 구 를 실행 할 수 있 습 니 다.
jdbcTemplate.execute("CREATE TABLE t_user (user_id integer, name varchar(64))");
(2) update 방법 및 batchUpdate 방법: update 방법 은 추가, 수정, 삭제 등 문 구 를 수행 하 는 데 사 용 됩 니 다.batchUpdate 방법 은 일괄 처리 관련 문 구 를 실행 하 는 데 사 용 됩 니 다.
jdbcTemplate.update("update t_user set username=? where id=?",user.getUsername(), user.getId());
(3) query 방법 및 query ForXXX 방법: 관련 문 구 를 조회 하 는 데 사용 합 니 다.
int count = jdbcTemplate.queryForInt("select count(*) from t_user");
List<String> nicknameList = jdbcTemplate.queryForList("select nickname from t_user", String.class);
(4) call 방법: 저장 과정, 함수 관련 문 구 를 실행 하 는 데 사용 합 니 다.
JdbcTemplate 클래스 가 지원 하 는 리 셋 클래스:
(1) 사전 컴 파일 문장 및 저장 프로 세 스 생 성 리 셋
Prepared StatementCreator: 리 셋 을 통 해 JdbcTemplate 가 제공 하 는 Connection 을 가 져 옵 니 다. 사용자 가 이 Conncetion 을 사용 하여 관련 된 Prepared Statement 을 만 듭 니 다.
CallableStatementCreator: 리 셋 을 통 해 JdbcTemplate 가 제공 하 는 Connection 을 가 져 옵 니 다. 사용자 가 이 Conncetion 을 사용 하여 관련 CallableStatement 을 만 듭 니 다.
(2) 사전 컴 파일 문 설정 값 리 셋
Prepared StatementSetter: 리 셋 을 통 해 JdbcTemplate 가 제공 하 는 Prepared Statement 을 가 져 옵 니 다. 사용자 가 해당 하 는 사전 컴 파일 문 에 해당 하 는 매개 변 수 를 설정 합 니 다.BatchPreparedStatementSetter:;Prepared StatementSetter 와 유사 하지만 일괄 처리 에 사용 되 려 면 일괄 처리 크기 를 지정 해 야 합 니 다.
(3) 사용자 정의 기능 리 셋
ConnectionCallback: 리 셋 을 통 해 JdbcTemplate 가 제공 하 는 Connection 을 가 져 옵 니 다. 사용 자 는 이 Connection 에서 모든 동작 을 수행 할 수 있 습 니 다.StatementCallback: 리 셋 을 통 해 JdbcTemplate 가 제공 하 는 Statement 을 가 져 옵 니 다. 사용 자 는 이 Statement 에서 모든 작업 을 수행 할 수 있 습 니 다.Prepared Statement Callback: JdbcTemplate 에서 제공 하 는 Prepared Statement 을 되 돌려 받 으 면 사용 자 는 이 Prepared Statement 에서 모든 작업 을 수행 할 수 있 습 니 다.CallableStatementCallback: JdbcTemplate 에서 제공 하 는 CallableStatement 을 되 돌려 받 으 면 사용 자 는 이 CallableStatement 에서 모든 작업 을 수행 할 수 있 습 니 다.
(4) 결과 집합 처리 반전
RowMapper: 결과 집합 각 줄 의 데 이 터 를 필요 한 형식 으로 변환 하 는 데 사용 되 며, 사용 자 는 방법 mapRow (ResultSet rs, int rowNum) 를 실현 하여 각 줄 의 데 이 터 를 해당 하 는 형식 으로 변환 해 야 합 니 다.RowCallbackHandler: ResultSet 의 모든 줄 결 과 를 처리 하 는 데 사용 되 며, 사용 자 는 방법 processRow (ResultSet rs) 로 처 리 를 완료 해 야 합 니 다. 이 리 셋 방법 에 서 는 rs. next () 를 실행 하지 않 아 도 됩 니 다. 이 조작 은 JdbcTemplate 에서 실 행 됩 니 다. 사용 자 는 줄 에 따라 데 이 터 를 가 져 와 서 처리 하면 됩 니 다.ResultSetExtractor: 결과 집합 데이터 추출 에 사용 되 며, 사용 자 는 결과 집합 을 처리 하 는 방법 extractData (ResultSets rs) 를 실현 해 야 합 니 다. 사용 자 는 전체 결과 집합 을 처리 해 야 합 니 다.
2. JDBCtemplate 사용
JDBCtemplate 를 사용 하 는 일반적인 절 차 를 보 여 줍 니 다.
1. Spring 패키지 와 데이터베이스 드라이버 패키지 가 져 오기 2. 데이터 원본 (DBCP, C3P 0) 을 선택 하 십시오. 데이터 원본 을 가 져 오 는 패키지: DBCP 4. beans. xml 에 datasource 데이터 원본 만 들 기 5. jdbc. propertier 를 만들어 데이터베이스 연결 정 보 를 설정 합 니 다. 6. beans. xml 에 해당 하 는 properties 문 서 를 가 져 옵 니 다. < context: property - placeholder location = "jdbc. properties" / > 7. DAO 를 쓰 십시오.또한 이 DAO 에 JdbcTemplate 를 만 듭 니 다. JdbcTemplate 대상 을 통 해 데이터 작업 을 편리 하 게 수행 할 수 있 습 니 다. 8. Dao 에 해당 하 는 DataSource 를 주입 하고 JdbcTemplate @ Resource Public void setDataSource (DataSource dataSource) {this. jdbcTemplate = new JdbcTemplate (dataSource) 를 만 듭 니 다.} 9. 데이터 대상 추가 완료
우선 DataSource 를 JdbcTemplate 에 등록 해 야 합 니 다.또한, properties 파일 에 대한 지원 을 지원 하기 위해 spring 은 EL 표현 식 과 유사 한 방식 으로 properties 의 파일 매개 변 수 를 매개 변수 설정 에 도입 합 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- spring Annotation -->
<context:annotation-config />
<!-- spring Annotation -->
<context:component-scan base-package="com.spring" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- src jdbc.properties -->
<context:property-placeholder location="jdbc.properties" />
</beans>
설정 파일 jdbc. properties 는 src 디 렉 터 리 아래 에 있 습 니 다:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_teach
jdbc.username=root
jdbc.password=123
a. DataSource 를 JDBCtemplate 에 주입:
@Resource
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
b. 데이터 추가
public void add(User user, int gid) {
jdbcTemplate.update("insert into t_user(username, password, nickname, gid) value(?, ?, ?, ?)",user.getUsername(), user.getPassword(),user.getNickname(), gid);
}
c. 데이터 수정
public void update(User user) {
jdbcTemplate.update("update t_user set username=?, password=?,nickname=? where id=?", user.getUsername(), user.getPassword(), user.getNickname(), user.getId());
}
d. 데이터 삭제
public void delete(int id) {
jdbcTemplate.update("delete from t_user where id=?", id);
}
대상 을 조회 할 때 RowMappe 류 를 사용 해 야 합 니 다.
public class UserMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
Group g = new Group();
g.setId(rs.getInt("gid"));
g.setName(rs.getString("name"));
User u = new User();
u.setGroup(g);
u.setId(rs.getInt("uid"));
u.setNickname(rs.getString("nickname"));
u.setPassword(rs.getString("password"));
u.setUsername(rs.getString("username"));
return u;
}
}
e. 데이터 조회
public User load(int id) {
String sql = "select t1.id uid, t1.*, t2.* from t_user t1 left join t_group t2 on (t1.gid=t2.id) where t1.id=?";
/**
* SQL SQL ,
* RowMapper, RowMapper , RowMapper
* mapRow , mapRow rs , rs
*/
User u = (User) jdbcTemplate.queryForObject(sql, new Object[] { id }, new UserMapper());
return u;
}
f. 데이터 조회
public List<User> list(String sql, Object[] args) {
//
String sqlCount = "select count(*) from t_user";
int count = jdbcTemplate.queryForInt(sqlCount);
System.out.println("count = "+count);
// String
String sqlNickname = "select nickname from t_user";
List<String> nicknameList = jdbcTemplate.queryForList(sqlNickname, String.class);
for(String str : nicknameList){
System.out.println(str);
}
//
/*String sqlStrs = "select username, nickname from t_user";
List<User> users = jdbcTemplate.queryForList(sqlStrs, User.class);
for(User user : users){
System.out.println(user);
}*/
//
/*String sqlStrs = "select username, nickname from t_user";
List<Object []> users = jdbcTemplate.queryForObject(sqlStrs, Object[].class);*/
// RowMapper
/* String sqlStrs = "select username, nickname from t_user";
List<User> users = jdbcTemplate.query(sqlStrs, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User u = new User();
u.setUsername(rs.getString("username"));
u.setNickname(rs.getString("nickname"));
return u;
}
});
for(User user:users){
System.out.println(user);
}*/
return jdbcTemplate.query(sql, args, new UserMapper());
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.