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

来源:互联网 发布:自助牛排知乎 编辑:程序博客网 时间:2024/05/17 03:43

转自: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 接口 */@Repositorypublic 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

0 0