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; } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章