Spring 학습 의 JdbcTemplate

8858 단어 springJdbcTemplate
JDBCtemplate
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());

	}

좋은 웹페이지 즐겨찾기