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

    }
  • 相关阅读:
    「BZOJ1061」 [Noi2008]志愿者招募
    [POJ 2891] Strange Way to Express Integers (扩展中国剩余定理)
    扩展中国剩余定理学习笔记
    扩展欧几里得算法+推论
    SPOJ16607 IE1
    [Luogu P4124] [CQOI2016]手机号码 (数位DP)
    [UOJ 275/BZOJ4737] 【清华集训2016】组合数问题 (LUCAS定理的运用+数位DP)
    一些很妙的网站
    [Luogu P3157][CQOI2011]动态逆序对 (树套树)
    [Luogu P3203] [HNOI2010]弹飞绵羊 (LCT维护链的长度)
  • 原文地址:https://www.cnblogs.com/archie2010/p/1969940.html
Copyright © 2020-2023  润新知