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

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;
}

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值