ibatis与spring整合(小例子)

先说说自己最近的问题吧。

最近大脑变懒了,遇到问题没有思考而直接Google。在网上也看到过一些描述这种问题的帖子,总之这种习惯很不好,对自己没有一点帮助(如果仅仅复制网上的代码,而没有分析网上代码),所有正在努力改正这个缺点,希望与同有这种“不良”习惯的同行共勉。

言归正传。

最近也是很浮躁,与生活有很大的关系,所有经常想一些办法让自己“静”下来。于是写了ibatis与spring整合的小例子,很简单,官方文档很写的很清楚,如果想更加明白理解可以看看官方文档。在文章的下面我只贴一些配置文件的代码,其它代码就“不好意思”贴下来了。以后大家忘记了头文件怎么写,也可以参考参考。相信大家都懂下面的代码我就不解释了。

1.ibatis映射文件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>
<typeAlias alias="User" type="pojo.User"/>

<!-- 动态配置WHERE条件 -->
<sql id="baseUserWhere">
<dynamic prepend="WHERE">
<isNotEmpty property="id" prepend="and">
id = #id#
</isNotEmpty>
<isNotEmpty property="username" prepend="and">
username = #username#
</isNotEmpty>
<isNotEmpty property="password" prepend="and">
password = #password#
</isNotEmpty>
<isNotEmpty property="isUser" prepend="and">
isUser = #isUser#
</isNotEmpty>
</dynamic>
</sql>

<!-- 动态配置SET条件 -->
<sql id="baseUserSet">
<dynamic prepend="SET">
<isNotNull property="fileds.id" prepend=",">
id = #fileds.id#
</isNotNull>
<isNotNull property="fileds.username" prepend=",">
username = #fileds.username#
</isNotNull>
<isNotNull property="fileds.password" prepend=",">
password = #fileds.password#
</isNotNull>
<isNotNull property="fileds.isUser" prepend=",">
isUser = #fileds.isUser#
</isNotNull>
</dynamic>
</sql>

<select id="selectUserById" parameterClass="java.lang.String" resultClass="User">
<![CDATA[
select id, username, password, isUser from tab_user where id = #id#;
]]>
</select>

<select id="selectUserAll" resultClass="User">
<![CDATA[
select id, username, password, isUser from tab_user;
]]>
</select>

<insert id="insertUser" parameterClass="User">
<![CDATA[
insert into tab_user (
id,
username,
password,
isUser
) values (
#id#,
#username#,
#password#,
#isUser#
);
]]>
</insert>

<update id="updateUser" parameterClass="User">
<![CDATA[
update tab_user set
username = #username#,
password = #password#,
isUser = #isUser#
where
id = #id#;
]]>
</update>

<delete id="deleteUserById" parameterClass="java.lang.String">
<![CDATA[
delete from tab_user where id = #id#;
]]>
</delete>

</sqlMap>


2.ibatis配置文件SqlMapConfig.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>

<!--
<settings cacheModelsEnabled="true" enhancementEnabled="true"
lazyLoadingEnabled="true" maxRequests="2014" maxSessions="512"
maxTransactions="128" useStatementNamespaces="true" />
-->

<!-- 导入映射文件 -->
<sqlMap resource="dao/impl/User.xml"/>

</sqlMapConfig>


3.数据源文件jdbc.properties

jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
jdbc.username = root
jdbc.password = root

# BasicDataSource提供了close()方法关闭数据源,所以必须设定destroy-method=”close”属性, 以便Spring容器关闭时,数据源能够正常关闭。除以上必须的数据源属性外,还有一些常用的属性:
#
# defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认值为 true;
# defaultReadOnly:设置数据源是否仅能执行只读操作, 默认值为 false;
# maxActive:最大连接数据库连接数,设置为0时,表示没有限制;
# maxIdle:最大等待连接中的数量,设置为0时,表示没有限制;
# maxWait:最大等待秒数,单位为毫秒, 超过时间会报出错误信息;
# validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据, 如你可以简单地设置为:“select count(*) from user”;
# removeAbandoned:是否自我中断,默认是 false ;
# removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值;
# logAbandoned:是否记录中断事件, 默认为 false;


4.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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sqlMapConfig.xml" />
<property name="dataSource" ref="dataSource" />
</bean>

<!-- dao -->
<bean id="userDao" class="dao.impl.UserDaoImpl">
<property name="sqlMapClient" ref="sqlMapClient"></property>
</bean>

<!-- service -->
<bean id="userService" class="service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>

<!-- 配置文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="jdbc.properties"/>
</bean>

<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${jdbc.driverClass}</value>
</property>
<property name="url">
<value>${jdbc.url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>

<!-- 配置事物管理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>

</beans>


5.log4j配置文件log4j.properties

  log4j配置在web项目中很重要。


#--------------------------------
#
log4j.rootLogger=DEBUG, stdout, fileout
#log4j.logger.test=info
#log4j.logger.org.apache.jasper = DEBUG
#log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG
#log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG

log4j.logger.com.fiscal = DEBUG
log4j.logger.com.system = DEBUG

log4j.logger.com.ibatis = DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG
log4j.logger.java.sql.Connection = DEBUG
log4j.logger.java.sql.Statement = DEBUG
log4j.logger.java.sql.PreparedStatement = DEBUG
log4j.logger.java.sql.ResultSet = DEBUG

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=C\:\\ibatis.log
log4j.appender.fileout.MaxFileSize=10000KB

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} \:%m%n
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH\:mm\:ss} \:%m%n

#log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

# log4j.logger.org=info
#--------------------------------


最后贴出自己的测试代码,采用单元测试。

5.Test代码UserTest.java


package test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import pojo.User;

import service.UserService;

import junit.framework.TestCase;

public class UserTest extends TestCase{

private static ApplicationContext applicationContext;

private static UserService userService;

static{
applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
userService = (UserService) applicationContext.getBean("userService");
}

/**
* 测试插入数据
* @throws Exception
*/
public void insertTest() throws Exception{
User user = new User();
user.setId("1");
user.setUsername("guchao2");
user.setPassword("123456");
user.setIsUser(new Integer(1));
userService.insertUser(user);
}

/**
* 测试查询数据
* @throws Exception
*/
public void selectTest() throws Exception{
User user = new User();
user = userService.selectUser("0");
System.out.println(user.getId() + " " + user.getUsername() + " " + user.getPassword() + " " + (user.getIsUser().equals(new Integer(1))? "是" : "否"));
}

/**
* 测试查询全部数据
* @throws Exception
*/
public void selectAllTest() throws Exception{
List<User> users = new ArrayList<User>();
users = userService.selectUserAll();
Iterator<User> iterator = users.iterator();
while(iterator.hasNext()){
User user = iterator.next();
System.out.println(user.getId() + " " + user.getUsername() + " " + user.getPassword() + " " + (user.getIsUser().equals(new Integer(1))? "是" : "否"));
}
}

/**
* 测试更新数据
* @throws Exception
*/
public void update() throws Exception{
User user = new User();
user.setId("0");
user.setUsername("gc");
user.setPassword("123");
user.setIsUser(new Integer(0));
userService.updateUser(user);
}

/**
* 测试删除数据
* @throws Exception
*/
public void delete() throws Exception{
userService.deleteUser("0");
}

}


包也要提一下:

就这些了。

补充:一不小心给忘了Dao层实现类(可能以后忘了继承SqlMapClientDaoSupport类)

6.数据访问实现类UserDAoImpl.java


package dao.impl;

import java.sql.SQLException;
import java.util.List;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import pojo.User;

import dao.UserDao;

public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao{

@Override
public void delete(String id) throws SQLException {
// TODO Auto-generated method stub
getSqlMapClientTemplate().delete("deleteUserById", id);
}

@Override
public void insert(User user) throws SQLException {
// TODO Auto-generated method stub
getSqlMapClientTemplate().insert("insertUser", user);
}

@Override
public User select(String id) throws SQLException {
// TODO Auto-generated method stub
return (User) getSqlMapClientTemplate().queryForObject("selectUserById", id);
}

@SuppressWarnings("unchecked")
@Override
public List<User> selectAll() throws SQLException {
// TODO Auto-generated method stub
return getSqlMapClientTemplate().queryForList("selectUserAll");
}

@Override
public void update(User user) throws SQLException {
// TODO Auto-generated method stub
getSqlMapClientTemplate().update("updateUser", user);
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值