spring集成ibatis,自动注入

原文地址:http://www.cnblogs.com/archie2010/archive/2011/03/03/1969940.html

 

Ibatis,Spring整合(注解方式注入)

applicationContext.xml

复制代码
<? xml version="1.0" encoding="UTF-8" ?>
< beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" xmlns:p ="http://www.springframework.org/schema/p"
xmlns:context
="http://www.springframework.org/schema/context"
xmlns:aop
="http://www.springframework.org/schema/aop" xmlns:tx ="http://www.springframework.org/schema/tx"
xsi:schemaLocation
="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
>

<!-- 自动扫描Bean -->
< context:component-scan base-package ="com.tq365" />


<!-- 强制使用CGLIB代理 -->
< aop:aspectj-autoproxy proxy-target-class ="true" />

<!-- DataSource数据源 -->
< bean id ="dataSource" class ="org.apache.commons.dbcp.BasicDataSource"
destroy-method
="close" >
< property name ="driverClassName" >
< value > com.mysql.jdbc.Driver </ value >
</ property >
< property name ="url" >
< value > jdbc:mysql://localhost:3306/ibatisorm </ value >
</ property >
< property name ="username" >
< value > root </ value >
</ property >
< property name ="password" >
< value > root </ value >
</ property >
</ bean >

<!-- Spring iBatis SqlMapClient -->
< bean id ="sqlMapClient" class ="org.springframework.orm.ibatis.SqlMapClientFactoryBean" >
< property name ="configLocation" value ="WEB-INF/sqlmap-config.xml" />
< property name ="dataSource" ref ="dataSource" />
</ bean >


<!-- 事务管理DataSourceTransactionManager -->
< bean id ="txManager"
class
="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name ="dataSource" ref ="dataSource" />
</ bean >

<!-- 启动spring注解功能 -->
< tx:annotation-driven transaction-manager ="txManager" />

< aop:config >
< aop:pointcut id ="baseServiceMethods" expression ="execution(* com.tq365.samples.ibatis.dao.*.*(..))" />
< aop:advisor advice-ref ="txAdvice" pointcut-ref ="baseServiceMethods" />
</ aop:config >

< aop:aspectj-autoproxy />

< tx:advice id ="txAdvice" transaction-manager ="txManager" >
< tx:attributes >
< tx:method name ="select*" read-only ="true" propagation ="REQUIRED" />
< tx:method name ="find*" read-only ="true" propagation ="REQUIRED" />
< tx:method name ="save*" propagation ="REQUIRED" isolation ="REPEATABLE_READ" />
< tx:method name ="update*" propagation ="REQUIRED" isolation ="REPEATABLE_READ" />
<!--
<tx:method name="add*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
-->
< tx:method name ="delete*" propagation ="REQUIRED" isolation ="REPEATABLE_READ" />
</ tx:attributes >
</ tx:advice >
</ beans >
复制代码

sqlmap-config.xml

复制代码
<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd" >
< sqlMapConfig >

< sqlMap resource ="com/tq365/sqlMap/User.xml" />

</ sqlMapConfig >
复制代码

User.xml

复制代码
<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
< sqlMap namespace ="User" >

< typeAlias alias ="User" type ="com.tq365.samples.ibatis.model.User" />

< resultMap id ="UserResult" class ="User" >
< result property ="id" column ="id" />
< result property ="username" column ="username" />
< result property ="address" column ="address" />
< result property ="userpwd" column ="userpwd" />
</ resultMap >

< insert id ="addUser" >
insert user(
username,
userpwd,
address
)
values(
#username#,
#userpwd#,
#address#
)
</ insert >    
< select id ="findUser" resultMap ="UserResult" >
select * from user WHERE username=#username# and userpwd=#userpwd#
</ select >
< select id ="findUserById" resultMap ="UserResult" >
select * from user WHERE id=#id#
</ select >  
<!-- User表内记录总条数 -->
< select id ="getTotalCount" resultClass ="int" >
select count(*) from user
</ select >
< select id ="findAllPageUser" resultMap ="UserResult" >
select * from user limit #start#,5
</ select >
</ sqlMap >
复制代码

UserDAO.java接口 

复制代码
  package com.tq365.samples.ibatis.dao;


import org.springframework.stereotype.Repository;

import com.tq365.samples.ibatis.model.User;
import com.tq365.sqmples.util.Pages;

/**
* UserDAO 接口
*/
@Repository
public interface UserDAO {
/**
* 通过ID查询
*
@param id
*
@return
*/
public User findUserById( int id);
/**
* 通过ID删除
*
@param id
*/
public void deleteUserById( int id);

public void addUser(User user);
/**
* 查询指定的User对象
*
@param user
*
@return
*/
public User findUser(User user);
/**
* 通过用户名分页查询
*
@param username
*
@return
*/
public Pages < User > findUsersByUsername(String username, int pageNo);

/**
* 所有User对象分页
*
@param pageNo
*
@return
*/
public Pages < User > findAllPageUser( int pageNo);

}
复制代码

BaseDao.java 

复制代码
  package com.tq365.samples.ibatis.dao;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.ibatis.sqlmap.client.SqlMapClient;

/**
* BaseDao,Dao需继承此Dao
*
@author archie2010
* since 2011-3-3 下午02:52:36
*/
public class BaseDao extends SqlMapClientDaoSupport{

@Resource(name
= " sqlMapClient " )
private SqlMapClient sqlMapClient;

@PostConstruct
public void initSqlMapClient(){
super .setSqlMapClient(sqlMapClient);
}
}
复制代码

  

@PostConstruct注解 
    在方法上加上注解@PostConstruct,这个方法就会在Bean初始化之后被Spring容器执行(注:Bean初始化包括,实例化Bean,并 装配Bean的属性(依赖注入))。它的一个典型的应用场景是,当你需要往Bean里注入一个其父类中定义的属性,而你又无法复写父类的属性或属性的 setter方法时

UserDAOimpl.java 

复制代码
  package com.tq365.samples.ibatis.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.springframework.stereotype.Component;

import com.tq365.samples.ibatis.model.User;
import com.tq365.sqmples.util.Pages;

/**
* UserDAO接口实现类
*
@author archie2010
* since 2011-3-3 下午02:54:57
*/
@Component(
" userDAO " )
public class UserDAOimpl extends BaseDao implements UserDAO{

public User findUserById( int id){
return (User) getSqlMapClientTemplate().queryForObject( " findUserById " , id);
}
/**
* 添加User
*/
public void addUser(User user) {
getSqlMapClientTemplate().insert(
" addUser " , user);
}
/**
* 删除User
*/
public void deleteUserById( int id) {
getSqlMapClientTemplate().delete(
" deleteUserById " , id);
}

/**
* 查找User
*/
public User findUser(User user) {
return (User) getSqlMapClientTemplate().queryForObject( " findUser " , user);
}

public int getTotalCountByUsername(String username){
return (Integer) getSqlMapClientTemplate().queryForObject( " getTotalCountByUsername " , username);
}
/**
* User分页
*/
@SuppressWarnings(
" unchecked " )
public Pages < User > findUsersByUsername(String username, int pageNo) {
Pages
< User > pages = new Pages < User > (getTotalCountByUsername(username));
pages.setPageSize(
5 );

List
< User > userList = new ArrayList < User > ();

Map
< String, Object > map = new HashMap < String, Object > ();
map.put(
" username " , username);
map.put(
" start " , pages.getStart(pageNo));

userList
= (List < User > ) getSqlMapClientTemplate().queryForObject( " findUsersByUsername " , map);
pages.setPageList(userList);

return pages;
}
/**
* 查询所有记录
*
@return
*/
public int getTotalCount(){
return (Integer) getSqlMapClientTemplate().queryForObject( " getTotalCount " );
}
@SuppressWarnings(
" unchecked " )
public Pages < User > findAllPageUser( int pageNo){
Pages
< User > pages = new Pages < User > (getTotalCount());
pages.setPageSize(
5 );

List
< User > userList = new ArrayList < User > ();

userList
= (List < User > ) getSqlMapClientTemplate().queryForList( " findAllPageUser " , pages.getStart(pageNo));
pages.setPageList(userList);

return pages;
}

}

猜你喜欢

转载自zengshaotao.iteye.com/blog/2201004