您的位置:首页 > 编程语言 > Java开发

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

2015-04-27 15:01 435 查看
转自: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;
}

}

by archie
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: