Spring架構講解-一個簡單的實踐

來源:互聯網
上載者:User

一,情境:編寫一個使用者管理的服務層,包括增加使用者、刪除使用者和查詢使用者等等,而且使用者資訊以關係型資料庫形式儲存。
分析:
這是一個典型的應用服務,涉及到業務層(Business Objects Layer)、資料庫訪問層(DB Access)和儲存層(EIS)。
採用典型的架構:BO+DAO
DAO採用Spring提供的JdbcTemplate來進行封裝。

二,具體實現

1)使用者類User
public class User{
          private String username;
          private String email;
          private Date birthday;
          public User(){}
          …
          相應的setter/getter方法。
    }
    這是一個簡單的bean類,記錄使用者的資訊。
   
2)資料庫訪問類:UserDao

public interface UserDao {
  public void save(User user);
      public void remove(String username);
      public User searchByName(String username);
 }
    這是資料庫訪問的介面類,定義了對使用者的資料庫操作,其實作類別是UserDaoJdbc
   
UserDaoJdbc類

public class UserDaoJdbc extends JdbcDaoSupport implements UserDao {
     public UserDaoJdbc() {
         super();
     }
     public void save(User user) {
         getJdbcTemplate().update(
                 "insert into SAMPLE_USER values (?,?,?)",
                 new Object[] { user.getUsername(), user.getEmail(),
                         user.getBirthday() });
     }
            ...
     }
3)業務類UserManageService
public interface UserManageService {
     public void saveUser(User user);
     public void removeUser(String username);
     public User getUserByName(String username);
 }
    這是使用者的業務類介面,定義了和使用者相關的一些業務操作,其實作類別UserManageServiceImpl

實作類別UserManageServiceImpl

public class UserManageServiceImpl implements UserManageService {

     private UserDao udao;

     public UserManageServiceImpl() {
         super();
     }
 
     public void saveUser(User user) {
         udao.save(user);
     }
     public UserDao getUdao() {
        return udao;
     }
     public void setUdao(UserDao udao) {
         this.udao = udao;
     }
}

4)Spring bean描述檔案配置

<beans>
 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName">
   <value>oracle.jdbc.driver.OracleDriver</value>
  </property>
  <property name="url">
   <value>jdbc:oracle:thin:@172.16.4.219:1521:orcl</value>
  </property>
  <property name="username">
   <value>zhangbo</value>
  </property>
  <property name="password">
   <value>password</value>
  </property>
 </bean>
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource">
   <ref bean="dataSource"/>
  </property>
 </bean>
 <bean id="userdao" class="sample.spring.dao.UserDaoJdbc">
  <property name="dataSource">
   <ref bean="dataSource"/>
  </property>
 </bean>
 <bean id="userManageService" class="sample.spring.service.UserManageServiceImpl">
  <property name="udao">
   <ref bean="userdao"/>
  </property>
 </bean>
</beans>

5)資料中儲存使用者的表SAMPLE_USER
username   varchar2(30) not null,
email      varchar2(50) not null,
birthday      date

6)通過單元測試來驗證UserManageService中的操作:
public class UserManageServiceTest extends TestCase {

    private UserManageService service;

    private static Log logger = LogFactory.getLog(UserManageServiceTest.class);

    protected void setUp() throws Exception {
        super.setUp();
        service = (UserManageService) SpringContextUtil
                .getBean("userManageService");
    }
    public void testSaveAndSearchAndRemoveUser() throws Exception {
        User user = new User();
        user.setUsername("zhangsan");
        user.setEmail("zhangsan@test.com");
        user.setBirthday(new Date());
        service.saveUser(user);
        logger.debug("存入一個新使用者:" + user);
        User userFromDb = service.getUserByName("zhangsan");
        assertNotNull(userFromDb);
        assertEquals(userFromDb.getEmail(), "zhangsan@test.com");
        logger.debug("從資料庫中查到使用者:" + userFromDb);
        service.removeUser("zhangsan");
        logger.debug("從資料庫刪除使用者:" + userFromDb);
    }
    protected void tearDown() throws Exception {
        super.tearDown();
    }
}



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。