Ibatis,Spring整合(注解方式注入)
<?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>
<?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方法时

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; } }
Ibatis,Spring整合(注解方式注入)的更多相关文章
- Spring使用注解方式注入多例的方式
目前Spring+Netty的开发方式这么火热,想把Netty注册成Spring组件就一定得用多例的方式,我不由得想吐槽明明这么常见的需求网上相关博客都少的很,这里给出Spring使用注解注入多例的方 ...
- 关于spring的注解方式注入默认值(转) -- 首字母小写
1.是首字母小写 比如 UserAction对应的id是userAction 可以通过ApplicationContext 对象的act.getBean("userAction") ...
- mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类
相信大家在刚开始学习mybatis注解方式,或者spring+mybatis注解方式的时候,一定会有一个疑问,为什么mybatis的dao接口只需要一个接口,不需要实现类,就可以正常使用,笔者最开始的 ...
- EJB通过注解方式注入并使用其他EJB或者服务、配置JBoss数据源
通过注解方式注入并使用其他EJB或者服务 真实项目EJB对象很多,EJB之间也可以互相调用, 在项目HelloWorld下新建接口Other在cn.hqu.ejb3下: public interfac ...
- (转)使用Spring的注解方式实现AOP的细节
http://blog.csdn.net/yerenyuan_pku/article/details/52879669 前面我们已经入门使用Spring的注解方式实现AOP了,现在我们再来学习使用Sp ...
- (转)使用Spring的注解方式实现AOP入门
http://blog.csdn.net/yerenyuan_pku/article/details/52865330 首先在Eclipse中新建一个普通的Java Project,名称为spring ...
- EJB通过注解方式注入并使用其它EJB或者服务、配置JBoss数据源
版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/Jerome_s/article/details/37103171 通过注解方式注入并使用其他EJB或者服务 ...
- spring+springmvc+ibatis整合注解方式实例【转】
源自-----> http://shaohan126448.iteye.com/blog/2033563 (1)web.xml文件(Tomcat使用) 服务器根据配置内容初始化spring框架, ...
- spring+springmvc+ibatis整合注解方式实例
需求说明 实现用户通过数据库验证登录需求.採用 Myeclipse+Tomcat 6.0+Mysql 5.0+JDK 1.6 2.数据库表 开发所用是Mysql数据库,仅仅建立单张用户表T_USER, ...
- spring注解方式注入
1.通过Resource注入 1.在属性上注入 1.默认注入 即不指定spring容器里面的名字 匹配规则:先通过属性的名字查找 再通过属性类型与实现类类型匹配查找 当有两个实现类会报错 2.通过指定 ...
随机推荐
- 如何导入ShareSDK的sample
由于项目需要,最近需要做10几个平台的分享,如果自己去集成,浪费很多时间,而且还很难成功.最后发现Sharesdk,可以满足项目需求. 首先,需要到他们的官网http://sharesdk.cn/下载 ...
- cocos2dx中的背景图层CCLayerColor和渐变图层CCLayerGradient
1.CCLayerColor是专门用来处理背景颜色的图层,它继承自CCLayer,可以用来设置图层的背景颜色,因为CCLayer默认是透明色的,即无颜色的 2.CCLayerGradient是用来显示 ...
- DevExpress GridControl使用(转)
DevExpress GridControl使用 (一)原汁原味的表格展示 Dev控件中的表格控件GridControl控件非常强大.不过,一些细枝末节的地方有时候用起来不好找挺讨厌的.使用过程中,多 ...
- WinForm点击按钮在对应的panel里画图
panel在form1里,button在form1上方,panel在下面. 主要是在button1的click时间获取panel的画笔. 下面的不行,在panel里获取画笔,然后传到button1,根 ...
- 清除HTML中的特殊字符
/// <summary> /// 清楚HTML中的特殊字符 /// </summary> /// <param name=&q ...
- PE文件结构详解(六)重定位
前面两篇 PE文件结构详解(四)PE导入表 和 PE文件结构详解(五)延迟导入表 介绍了PE文件中比较常用的两种导入方式,不知道大家有没有注意到,在调用导入函数时系统生成的代码是像下面这样的: 在这里 ...
- android 解析XML方式(一)
在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xml,xml是与平台无关的特性,被广泛运用于数据通信中,那么在android中如何解析xml文件数据呢? ...
- JavaScript Madness: Dynamic Script Loading
Introduction I've developed some pretty seriously Javascript intensive sites, where the sheer quanti ...
- POJ2251Dungeon Master
http://poj.org/problem?id=2251 题意 : 就是迷宫升级版,从以前的一个矩阵也就是一层,变为现在的L层," . "是可以走,但是“#”不可以走,从S走到 ...
- 查杀linux线程指令
工作中重启环境时常常出现内存溢出等等问题,往往需要查杀进程来帮助重启成功,下面就查杀线程的详细指令做下总结: 1.查找需要kill掉的线程: ps -elf|grep [线程关键信息] 比如: ...