Spring JDBCアクセスデータベース

7935 ワード

最近、spring DAO技術を研究しました.Springが各種の持久化技術の集積支援を含めて、以下は主にSpringに対してです.  JDBCが主な説明をします.
   Spring自体には統一した異常体系があり、実現技術とは関係なくDAO語義に向けた異常体系であり、Springは異なる耐久化技術に対してテンプレート類を提供しているため、多くの耐久化技術そのものの底辺の異常があり、テンプレート類を通じて処理すると、Spring DAOの異常体系に変換され、統一的な処理が可能である.
  
 
 
 
 
 
 
 
ORM耐久化技術
テンプレートクラス
JDBC       
org.springframe ework.jdbc.co.jdbc Template
ハイベルナー  
org.springframe ewark.orm.hibernate.Hiberg Template
iBatis     
org.springframe ework.orm.ibatis.Sql MapClient Template
JPA        
org.springframe ework.orm.jpa.Jpa Template
JDO        
org.springframe ework.orm.jdo.JdoTemplate
TopLink    
org.springframe ework.orm.jpa.Jpa Template
   テンプレートクラスがあり、サポートクラスも提供しています.対応するテンプレートとデータリソースを定義する作業を完了しました.JdbcDao Supportのようです
   以下は簡単な例でJdbcTemplateの配置と使用を紹介します.
  
@Repository
public class ForumDao {

	@Autowired
	private JdbcTemplate jdbcTemplate;

        public void initDb() {
		final String sql = "create table t_user(user_id int primary key,user_name varchar(60))";
		jdbcTemplate.execute(sql);
	}
	
	public  void  addForum(Forum forum){
		String sql="insert into t_forum(froum_name,forum_desc) values(?,?)";
		Object[] paramsObjects=new Object[]{forum.getForumName(),forum.getForumDesc()};
		jdbcTemplate.update(sql, paramsObjects);
	}

	public void addForums(final List<Forum> forums) {
        
		final String addForum="insert into t_forum(forum_name,forum_desc) values(?,?)";
		
		jdbcTemplate.batchUpdate(addForum, new BatchPreparedStatementSetter() {
			
			@Override
			public void setValues(PreparedStatement ps, int index) throws SQLException {
				Forum forum=forums.get(index);
				ps.setString(1,forum.getForumName());
				ps.setString(2,forum.getForumDesc());
				
			}
			
			@Override
			public int getBatchSize() {
				
				return forums.size();
			}
		});
	}
	
	
	public  Forum  getForum(final int forumId){
		String sql="select forum_name,forum_desc form t_forum where forum_id=?";
		
		final Forum forum=new Forum();
		
		jdbcTemplate.query(sql, new Object[]{forumId},new RowCallbackHandler() {
			
			@Override
			public void processRow(ResultSet rs) throws SQLException {
				
				forum.setForumId(forumId);
				forum.setForumName(rs.getString("forum_name"));
				forum.setForumDesc(rs.getString("forum_desc"));
				
				
			}
		});
		
		
		return forum;
	}
    public List<Forum>  getForums(final int forumId,final int toldId){
		String sql="select forum_name,forum_desc form t_forum where forum_id between ? and ?";
		final List<Forum> forums=new ArrayList<Forum>();
		
		jdbcTemplate.query(sql, new Object[]{forumId,toldId}, new RowCallbackHandler() {
			
			@Override
			public void processRow(ResultSet rs) throws SQLException {
				
				Forum forum=new Forum();
				forum.setForumId(forumId);
				forum.setForumName(rs.getString("forum_name"));
				forum.setForumDesc(rs.getString("forum_desc"));
				
				forums.add(forum);
				
				
			}
		});
		
		return forums;
		
		
	}
	
	
	public List<Forum>  getForumsByRowMapper(final int forumId,final int toldId){
		String sql="select forum_name,forum_desc form t_forum where forum_id between ? and ?";
		final List<Forum> forums=new ArrayList<Forum>();
		
		jdbcTemplate.query(sql, new Object[]{forumId,toldId},new RowMapper<Forum>() {

			@Override
			public Forum mapRow(ResultSet rs, int index) throws SQLException {
				Forum forum=new Forum();
				forum.setForumId(forumId);
				forum.setForumName(rs.getString("forum_name"));
				forum.setForumDesc(rs.getString("forum_desc"));			
				return forum;
			}
		});
		
		return forums;
		
		
	}
}
<?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:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
                        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
                        http://www.springframework.org/schema/tx 
  						http://www.springframework.org/schema/tx/spring-tx-3.2.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-3.2.xsd">
 
	<context:component-scan base-package="com.test"/>  
	
	<context:property-placeholder location="classpath:srping/jdbc.properties"/>
	
	<bean id="dataSource" class="org.apche.commons.dbcp.BasicDataSource"
	   destroy-method="close" 
	   p:driverClassName="${jdbc.driverClassName}"
	   p:url="${jdbc.url}"
	   p:username="${jdbc.username}"
	   p:password="${jdbc.password}"/>
	 
	<bean id="jdbcTemplate" class="com.springframework.jdbc.core.JdbcTemplate"
	   p:dataSource-ref="dataSource"/>
</beans>
   jdbcTemplateは多くの方法を実装し、多くの基本的な需要を満たしています.
   jdbc Template铉execute(String sql)
   jdbcTemplate(String sql,Object[]params);
   jdbcTemplate(String sql,Object[]params,int[]argTypes);
   jdbc Tempate(芫udate(String sql,PrepareStation mentSetter pss)
   PrepareStatitment Setterは、バインディングパラメータ操作を実行するためのvoid setValues(PrepareStatement ps)方法を定義したフィードバックインターフェースである.
   jdbc Tempate(菗udate(Preparestant Creator pc)
   PrepareStatit ment Creatorもまた、PreparedStation createPreParedStation(Connection conn)方法を定義するインターフェースである.
   jdbcTempate芫udate(Preparestant Creator psc、Preparestant Setter pss)
  データベーステーブルに戻ります.ホームキー(JdbcTemplate)
  int update(PreparedSttement Creator psc,KeyHolder generanted KeyHodler)
  KeyHodlerはリセットインターフェースで、Springはそれを使って追加記録を保存します.
  Number getKey()throws InvalidDataAccess AiUsageException
  Mapget Keys()throws InvalidDataAccess Access AiUsageException
  Listget KeyList()
  SpringはKeyHolderインターフェースの汎用実現系GeneratodKeyHolderを提供しています.
  jdbcTemplate一括更新データ
  public int[]batch Update(String[]sql);
  int[]  batch Update(String sql,BatPreparedStitment Setter ps)
  BaPrettparedStatitment Setterインターフェースは、2つの方法を定義しています.
  要点  getBatch Size()
  void setValues(PreparedStitment ps,int i)
 
 
  jdbcTemplateクエリデータ結果セット処理
  jdbcTemplate铅query(String sql,Object[]params,RowCallbackHandler handler handler)
RowCallbackHandlerインターフェイスは一つあります.
  void processRow(ResultSet rs)throws SQLException
結果セットの各行に対してRowCallbackHandlerコールインターフェースを呼び出してデータを処理します.
  RowMapperを使って結果セットを処理します.インターフェース方法T mapRow(ResultSet rs,int rowNum);
 
  プログラムの例はspring容器をロードした後で例が使えます.プロファイルをClass PathXml Apple ContectなどでロードしてSpring容器のコンテキスト環境を取得して使ってもいいし、web.xmlのSpring容器とウェブ容器をセットして関連させてもいいです.具体的にプロジェクトの状況を見て使います.