首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

SpringSide 3.1.4 實戰(上):從項目生成到 MySQL 遷移與領域模型構建

     編輯:Java 相關知識

快速啟動四步走

  1. 下載 all-in-one 包:官網 www.springside.org.cn,解壓後運行 bin/quickstart.bat 啟動三大示例項目
  2. 安裝 Maven:將 Maven/bin 加入 PATH,刪除 ~/.m2 加速首次構建
  3. 生成項目:運行 bin/new-project.bat,輸入 groupId=youxia.personal、artifactId=MultiDatasourceExample、package=personal.youxia
  4. Eclipse 導入:Eclipse 3.4+ 支援 Run On Server 一鍵部署,項目零紅叉可直接運行

注意:默認使用 Derby,需先運行 start-db.bat 再運行 init-db.jar 初始化數據。

第五步:遷移到 MySQL

1. Schema 適配

修改 schema.sql:DROP TABLE IF EXISTS、AUTO_INCREMENT 替換 GENERATED ALWAYS AS IDENTITY。

2. 數據源與 Hibernate 配置

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="${jdbc.url}"/> ...
</bean>
<bean id="sessionFactory" class="...AnnotationSessionFactoryBean">
  <property name="hibernateProperties">
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> ...
  </property>
</bean>

下載 mysql-connector-java-5.x.jar 到 WEB-INF/lib。

第六步:領域模型構建

1. 獨立源碼目錄

創建 src/main/java-self,四層包結構:entity、dao、service、web,避開框架自帶包干擾。

2. Entity(JPA + Hibernate 擴展註解)

@Entity @Table(name="articles")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Article extends IdEntity {
    private String subject, content;
    private Set<Comment> comments = new LinkedHashSet<Comment>();
    
    @OneToMany(cascade=CascadeType.ALL) @JoinColumn(name="article_id")
    @Fetch(FetchMode.SUBSELECT) @OrderBy("id")
    @Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
    public Set<Comment> getComments() { return comments; }
    // getter/setter...
}
@Entity @Table(name="comments")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Comment extends IdEntity {
    private String content;
    private Long articleId;
    
    @Column(name="article_id")
    public Long getArticleId() { return articleId; }
    // getter/setter...
}

3. DAO 零代碼

public class ArticleDao extends HibernateDao<Article, Long> { }
public class CommentDao extends HibernateDao<Comment, Long> { }

4. Service (Manager) 模板化

@Service
public class ArticleManager extends EntityManager<Article, Long> {
    @Autowired private ArticleDao articleDao;
    @Override protected HibernateDao<Article, Long> getEntityDao() { return articleDao; }
}

5. 單元測試驗證

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/applicationContext*.xml" })
public class DataAccessTest extends SpringTxTestCase {
    @Autowired private ArticleManager articleManager;
    @Autowired private CommentManager commentManager;
    
    @Test public void addArticle() {
        Article a = new Article(); a.setSubject("test"); a.setContent("test");
        articleManager.save(a);
        Comment c = new Comment(); c.setArticleId(a.getId());
        commentManager.save(c);
    }
}

6. 三個常見坑與修正

  • Manager 需 @Service,DAO 需 @Repository
  • Entity 包需為 personal.youxia.entity.entities(匹配 packagesToScan)
  • 運行測試綠燈,領域層構建完成

下一步

第七步:編寫 Action 與 JSP 實現 Web 交互(見中篇)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved