<aop:aspectj-autoproxy />
<!-- transaction manager, use jtatransactionmanager for global tx -->
<bean id="txmanager"
class="org.springframework.jdbc.datasource.datasourcetransactionmanager">
<property name="datasource" ref="dynamicdatasource" />
</bean>
<!--
enable component scanning (beware that this does not enable mapper
scanning!)
-->
<context:component-scan base-package="com.shadow" />
<!-- enable autowire -->
<context:annotation-config />
<!-- enable transaction demarcation with annotations -->
<tx:annotation-driven transaction-manager="txmanager" />
第三步,配置jdbctemplate的執行個體,同樣提供一個datasource就可以了
<!-- jdbc模闆 -->
<bean id="jdbctemplate"
class="org.springframework.jdbc.core.jdbctemplate">
第四步,寫個basedao友善下面的dao層調用,由于時間轉換經常用到,這裡隻寫了個通用的時間轉換
/**
*
* @author shadow
* @email [email protected]
* @create 2012.04.28
* @param <t>
*/
public abstract class abstractbasedao<t> implements dateformatentry {
// spring jdbc模闆接口
private jdbctemplate jdbctemplate;
public jdbctemplate getjdbctemplate() {
return jdbctemplate;
}
@resource
public void setjdbctemplate(jdbctemplate jdbctemplate) {
this.jdbctemplate = jdbctemplate;
/**
* 擷取日期
*
* @param timestamp
* @return date
*/
public date getdate(timestamp timestamp) {
return todate(timestamp, null);
* @param format
public date getdate(timestamp timestamp, string format) {
return todate(timestamp, format);
* timestamp按格式轉換成date
public date todate(timestamp timestamp, string format) {
date date = null;
if (null == format || "".equals(format))
format = default_format;
simpledateformat sdf = new simpledateformat(format);
try {
date = sdf.parse(sdf.format(timestamp));
} catch (parseexception e) {
e.printstacktrace();
}
return date;
}
第五步,寫個userdao接口跟實作類
public interface userdao {
public list<user> querybyusername(string username);
public int checkuser(string username);
public list<user> queryforall();
這裡使用@component("userdao"),相當于在xml配置裡做一個<bean id="userdao" class="xxxxxx.userdaoimpl"/>,然後我們在service調用就直接resource("userdao")就能自動比對這個實作類了
@component("userdao")
public class userdaoimpl extends abstractbasedao<user> implements userdao {
public int checkuser(string username) {
// todo auto-generated method stub
return 0;
@suppresswarnings("unchecked")
public list<user> querybyusername(string username) {
string sql = "select t1.* from t_user t1 where t1.username = ?";
list<user> list = this.getjdbctemplate().query(sql,
new object[] { username }, new usermapper());
return list;
public list<user> queryforall() {
sqlrowset rowset = getjdbctemplate().queryforrowset(null);
while (rowset.next()) {
return null;
private class usermapper implements rowmapper {
public object maprow(resultset rs, int i) throws sqlexception {
user vo = new user();
vo.setid(rs.getint("id"));
vo.setusername(rs.getstring("username"));
vo.setpassword(rs.getstring("password"));
vo.setname(rs.getstring("name"));
return vo;
第六步,寫service層調用dao的方法
public interface userservice {
* 更新登入資訊
* @param user
public void loginforupdate(user user);
* 安全退出功能
* @return string
public string logout();
* 檢測使用者是否存在
* @param username
* @return boolean
public boolean checkuser(string username);
* 通過使用者名擷取賬号
* @return list<user>
public list<user> findbyusername(string username);
這裡使用了的@resource沒有帶參數就是預設使用接口類名首字母小寫(例如接口是userdao,預設比對是userdao),@transactional是事務的注解,可加各種參數設定,
具體請看幫助文檔
@transactional
@component("userservice")
public class userserviceimpl implements userservice {
private userdao userdao;
public void loginforupdate(user user) {
public boolean checkuser(string username) {
return false;
public list<user> findbyusername(string username) {
return this.userdao.querybyusername(username);
public string logout() {
第七步,寫junit測試
@runwith(springjunit4classrunner.class)
@contextconfiguration("classpath:application.xml")
public class junit {
private userservice userservice;
@test
public void test() {
for (int i = 0; i < 10; i++) {
list<user> users = userservice.findbyusername("3213231");
system.out.println("目前使用者數:" + users.size());
最後右鍵run as junit就ok了
附言,其實spring jdbctemplate是很靈活的,性能也很不錯,你能使用queryforxx一類的方法傳回map,也能傳回原始resultset,當然也能使用回調接口映射成對象,我的例子裡就是示範了如何把結果集映射成實體對象