package DAO;
import Java.sql.ResultSet;
import Java.sql.SQLException;
import Java.util.HashMap;
import Java.util.List;
import Java.util.Map;
import org.Springframework.context.ApplicationContext;
import org.Springframework.context.support.ClassPathXmlApplicationContext;
import org.Springframework.jdbc.core.RowMapper;
import org.Springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;
import org.Springframework.jdbc.core.simple.ParameterizedRowMapper;
import domain.Account;
public class AccountDao extends NamedParameterJdbcDaoSupport {
public void saveAccount(Account account) {
String sql = "insert into tbl_account(id,name,age,sex) " +
"values(:id,:name,:age,:sex)";
Map paramMap = new HashMap();
paramMap.put("id", account.getId());
paramMap.put("name", account.getName());
paramMap.put("age", account.getAge());
paramMap.put("sex",account.getSex());
getNamedParameterJdbcTemplate().update(sql, paramMap);
}
public Account getAccountById(int id) {
String sql = "select id,name,age,sex from tbl_account where id=:id";
Map paramMap = new HashMap();
paramMap.put("id", id);
List matches = getNamedParameterJdbcTemplate().query(sql,
paramMap,new ParameterizedRowMapper() {
@Override
public Account mapRow(ResultSet rs, int rowNum)
throws SQLException {
Account a = new Account();
a.setId(rs.getInt(1));
a.setName(rs.getString(2));
a.setAge(rs.getInt(3));
a.setSex(rs.getString(4));
return a;
}
});
return matches.size()>0?matches.get(0):null;
}
}
AccountDao 定义了几个账号对象的数据库访问方法:
saveAccount:负责把传入的账号对象入库
getAccountById:负责根据 Id 查询账号
清单 3. AccountService.Java
package service;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.Springframework.beans.factory.annotation.Autowired;
import DAO.AccountDao;
import domain.Account;
public class AccountService {
private static final Log log = LogFactory.getLog(AccountService.class);
@Autowired
private AccountDao accountDao;
public Account getAccountById(int id) {
return accountDao.getAccountById(id);
}
public void insertIfNotExist(Account account) {
Account acct = accountDao.getAccountById(account.getId());
if(acct==null) {
log.debug("No "+account+" found,would insert it.");
accountDao.saveAccount(account);
}
acct = null;
}
}
AccountService 包括下列方法:
getAccountById:根据 Id 查询账号信息
insertIfNotExist:根据传入的对象插入数据库
其依赖的 DAO 对象 accountDao 是通过 Spring 注释标签 @Autowired 自动注入的。
上述几个类的依赖关系是通过 Spring 进行管理的,配置文件如下:
清单 4. Spring 配置文件
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.Springframework.org/schema/context"
xsi:schemaLocation="http://www.Springframework.org/schema/beans
http://www.Springframework.org/schema/beans/Spring-beans-3.0.xsd
http://www.Springframework.org/schema/context
http://www.Springframework.org/schema/context/Spring-context-3.0.xsd ">
注意其中的“”的作用,这个配置启用了 Spring 对 Annotation 的支持,这样在我们的测试类中 @Autowired 注释才会起作用(如果用了 Spring 测试框架,则不需要这样的配置项,稍后会演示)。另外还有一个 accountDao 依赖的 initer bean, 这个 bean 的作用是加载 log4j 日志环境,不是必须的。
另外还有一个要注意的地方,就是 datasource 的定义,由于我们使用的是 Spring Jdbc Template,所以只要定义一个 org.Springframework.jdbc.datasource.DriverManagerDataSource 类型的 datasource 即可。这里我们使用了简单的数据库 HSQL、Single Server 运行模式,通过 JDBC 进行访问。实际测试中,大家可以选择 Oracle 或者 DB2、Mysql 等。
好,万事具备,下面我们来用 Junit4 框架测试 acco

最低0.47元/天 解锁文章
238

被折叠的 条评论
为什么被折叠?



