Spring框架讲解-一个简单的实践(zt)

一,场景:编写一个用户管理的服务层,包括增加用户、删除用户和查询用户等等,而且用户信息以关系型数据库形式存储。
分析:
这是一个典型的应用服务,涉及到业务层(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();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值