AnnotationベースのStruts 2.0+Hibernate 3.3+Spring 2.5統合開発(1)



このテーマを書いた文章はネット上ではしばらくないでしょうが、SSH統合開発の本もたくさん読んだことがあります.多くは古いバージョンのフレームワーク統合で、ほとんどがXMLプロファイルの方式で、Annotationといえばそのフレームワークの一つです.オープンソースフレームワークの更新バージョンでAnnotationのサポートが導入されるにつれて、従来のように問題が発生するとJavaビューとXMLビューを切り替えることなく、一方的にクラスと関係を管理することができます.はい、始めましょう.ネットにこの方面の文章がない以上、私は先例を作ります.自分で探求して勉強して、みんなに勉強して批判と提案を提出させます.
まず、私たちの開発準備について話しましょう.
開発環境:Tomcat 6.0,JDK 1.6,MySQL 5.0
開発ツール:Eclipse-jee(Eclipseの公式サイトでダウンロード)
ダウンロードするフレームワークパッケージ:struts-2.0.11.2-all.zip,spring-framework-2.5.5-with-dependencies.zip,hibernate-distribution-3.3.1.GA-dist.zipの3つの圧縮パッケージは、公式サイトでダウンロードできます.もちろん、この小さなプロジェクトはこれだけではありません.私たちが使うときにダウンロードします.
では、第1段階の探索であるHibernate 3.3のAnnotationの実現を始めましょう.
私達のDynamic Web Projectを新しく建てて、“ssh_annotation”と名付けて、Tomcat 6.0の支持を構成して、MySQLを開いて、1つの空のデータベースを創立して、“ssh_と名付けますannotation」.MySQLのJDBCドライバパッケージmysql-connector-java-5.0.8-bin.jarを導入することを覚えています.
解凍したhibernate-distribution-3.3.1.GAディレクトリで、hibernate.jarとlibrequiredの下で使用したjarパッケージを私たちのプロジェクトのlibディレクトリに導入します.
Hibernate 3.3で開発したことがある方は、上記のパッケージを用意してHibernateテストクラスを開発するとCaused by:java.lang.NoClassDefFoundError:org/slf 4 j/impl/staticLoggerBinderまたはCaused by:java.lang.NoClassDefFoundError:org/apache/log 4 j/LaogManagerのエラーに遭遇することはないでしょうか.これはHibernate 3.3が提供しているからですのjarパッケージにslf 4 j-log 4 j 12.jarというパッケージが欠けています.解決策は、Hibernateの公式サイトでhibernate-annotations-3.4.0.GA.zipをダウンロードし、解凍し、libの下のslf 4 j-log 4 j 12.jarを私たちのプロジェクトのlibディレクトリに導入します.このjarパッケージを導入した後、log 4 j.jarを導入しなければjava.lang.NoClassDefFoundError:org/apache/log 4j/LOgManagerのエラーは、slf 4 j-log 4 j 12.jarがlog 4 jを呼び出すクラスを使用するのではないでしょうか.log 4 j.jarも導入します.
もちろん、hibernate-annotations-3.4.0.GA.zipは私たちがHibernate Annotationを開発するために使用するもので、上のjarパッケージのほかに、hibernate-annotations.jarとlibの下のhibernate-commons-annotations.jar、ejb 3-persistence.jarを導入します.はい、しばらくはこれらについて、私たちは次にどのjarパッケージを使用する必要があるかを導入します.
では、最初のステップでは、エンティティークラスUserを開発します.コードは次のとおりです.
 
package com.rong.entity;
 
import javax.persistence.Column;
 
import javax.persistence.Entity;
 
import javax.persistence.GeneratedValue;
 
import javax.persistence.GenerationType;
 
import javax.persistence.Id;
 
import javax.persistence.Table;
 
@Entity
 
@Table(name="tb_user")
 
public class User {
 
    
 
    @Id    @GeneratedValue(strategy=GenerationType.IDENTITY)
 
    private int id;
 
    
 
    @Column(name="username", length=15)
 
    private String username;
 
    
 
    @Column(name="password", length=15)
 
    private String password;
 
    
 
    public int getId() {
 
        return id;
 
    }
 
    public void setId(int id) {
 
        this.id = id;
 
    }
 
    public String getUsername() {
 
        return username;
 
    }
 
    public void setUsername(String username) {
 
        this.username = username;
 
    }
 
    public String getPassword() {
 
        return password;
 
    }
 
    public void setPassword(String password) {
 
        this.password = password;
 
    }
 
}  
 
 
簡単に説明しましょう.
@Entity定義Userクラスはエンティティークラス、@Id定義この属性に対応する列をプライマリ・キー、@GeneratedValue(strategy=GenerationType.IDENTITY)定義プライマリ・キー生成ポリシーはIndentityであり、MySQLやMS SQLなどのデータベースに適用されます.@Column(name=「username」、length=15)は列名と値の長さを定義します.
難しくないはずですが、Hibernateに関する注釈は、私が整理したHibernate Annotationヘルプドキュメント/FIles/rongxh 7/hibernateAannotations.rarをダウンロードして参考にしてください.ゆっくり勉強しましょう.
 
 
 
 もちろん、必要なXMLプロファイルは次のとおりです.
 
<?xml version='1.0' encoding='utf-8'?>
 
<!DOCTYPE hibernate-configuration PUBLIC
 
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 
<hibernate-configuration>
 
    <session-factory>
 
        <!-- Database connection settings -->
 
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
 
        <property name="connection.url">jdbc:mysql://localhost:3306/ssh_annotation</property>
 
        <property name="connection.username">root</property>
 
        <property name="connection.password">root</property>
 
        <!--      -->
 
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
 
        
 
        <!--  Session         -->
 
        <property name="current_session_context_class">thread</property>
 
        <!--       SQL   -->
 
        <property name="show_sql">true</property>
 
        <!--                      -->
 
        <property name="hbm2ddl.auto">update</property>
 
         
 
        <!--  
 
        <mapping resource="com/rong/entity/User.hbm.xml"/>
 
         -->
 
         
 
         <!--  Hibernate   User   ,         resource   -->
 
         <mapping class="com.rong.entity.User"/>
 
    </session-factory>
 
</hibernate-configuration>
 
ここではTomcatを実行し、Hibernateはhbm 2 ddl.autoに基づいてエンティティクラスと属性をデータベースのテーブルとカラムに自動的に変換します.ただし、このステップでは、事前にデータベースにssh_という名前のannotationの空のデータベースです.はい、あなたのデータベースに「tb_user」のテーブルが生成されました?!
次に、HibernateUtilというパッケージクラスを開発します.コードは次のとおりです.
package test.rong.hibernate;
 
import org.hibernate.SessionFactory;
 
import org.hibernate.cfg.AnnotationConfiguration;
 
public class HibernateUtil {
 
    
 
    private static final SessionFactory sessionFactory;
 
    static {
 
        try {
 
            // xxx.hbm.xml        
 
            //sessionFactory = new Configuration().configure().buildSessionFactory();
 
            // Annotation        
 
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
 
        } catch (Throwable ex) {
 
            System.err.println("Initial SessionFactory creation failed." + ex);
 
            throw new ExceptionInInitializerError(ex);
 
        }
 
    }
 
    public static SessionFactory getSessionFactory() {
 
        return sessionFactory;
 
    }
 
}
 
Hibernateを学んだことのある方は、このクラスに慣れているのではないでしょうか.ここでは、あまり説明しないので、私の注釈のところに注意すればいいです.次は、テストを行い、最新バージョンのJunit 4.5.jarをダウンロードして、気分を試してみましょう.もちろん、古いバージョンのはずでも問題ありません.テストコードを書くのは以下の通りです.
package test.rong.hibernate;
 
import java.util.Iterator;
 
import java.util.List;
 
import org.hibernate.Query;
 
import org.hibernate.Session;
 
import org.junit.Before;
 
import org.junit.Test;
 
import com.rong.entity.User;
 
public class EntityTest {
 
    
 
    private Session session;
 
    
 
    @Before
 
    public void initSession(){
 
        this.session = HibernateUtil.getSessionFactory().getCurrentSession();
 
    }
 
    
 
    @Test    //      
 
    public void testSave(){
 
        session.beginTransaction();
 
        User user = new User();
 
        user.setUsername("rongxh7");
 
        user.setPassword("blogjava");
 
        session.save(user);
 
        session.getTransaction().commit();
 
    }
 
    
 
    @Test    //        
 
    @SuppressWarnings("unchecked")
 
    public void testQuery(){
 
        session.beginTransaction();
 
        Query query = session.createQuery("from User u");
 
        List<User> users = query.list();
 
        for(Iterator<User> it = users.iterator() ; it.hasNext() ; ){
 
            User user = it.next();
 
            System.out.println("username = " + user.getUsername());
 
        }
 
        session.beginTransaction().commit();
 
    }
 
    
 
    @Test    //        
 
    public void testGet(){
 
        session.beginTransaction();
 
        User user = (User)session.get(User.class, 1);
 
        System.out.println("username = " + user.getUsername());
 
        session.getTransaction().commit();
 
    }
 
    
 
    @Test    //        
 
    public void testUpdate(){
 
        session.beginTransaction();
 
        User user = (User)session.load(User.class, 1);
 
        user.setPassword("hello blogjava");
 
        session.update(user);
 
        session.getTransaction().commit();
 
    }
 
    
 
    @Test    //      
 
    public void testDelete(){
 
        session.beginTransaction();
 
        session.delete(session.load(User.class, 1));
 
        session.getTransaction().commit();
 
    }
 
}
 
 
これで、私たちのHibernate Annotationの開発は完了しました.成功しましたか?何か問題があったら、返事してください.私は全力を尽くしてあなたのために答えます!はい、第1段階は一段落しました.忘れないでください.私たちはAnnotatiolnベースのSSH統合開発をしています.次の段階を楽しみましょう.
(*^-^*)本文オリジナル、転載は出典を明記してください、http://www.blogjava.net/rongxh7ありがとうございます!(*^-^*)