• 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; } }
  • 相关阅读:
    setAnimationTransition:forView:cache: 运行动画时背景色问题
    架构师速成4.6-软技能和硬技能
    Java获取某年某周的第一天
    openssl之BIO系列之12---文件描写叙述符(fd)类型BIO
    centos 使用 CP 命令 不提示 覆盖
    [3 Jun 2015 ~ 9 Jun 2015] Deep Learning in arxiv
    P1314 聪明的质监员
    P2858 [USACO06FEB]奶牛零食Treats for the Cows
    1163 访问艺术馆
    P1352 没有上司的舞会
  • 原文地址:https://www.cnblogs.com/smallfa/p/6060927.html
Copyright © 2020-2023  润新知