读书人

ibatis与spring调整(小例子)

发布时间: 2012-10-28 09:54:44 作者: rapoo

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" parameterresultresultparameterparameterparametername="code"><?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.Driverjdbc.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8jdbc.username = rootjdbc.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" value="classpath:sqlMapConfig.xml" />        <property name="dataSource" ref="dataSource" />    </bean>        <!-- dao -->    <bean id="userDao" ref="sqlMapClient"></property>    </bean>        <!-- service -->    <bean id="userService" ref="userDao"></property>    </bean>        <!-- 配置文件 -->    <bean id="propertyConfigurer"             value="jdbc.properties"/>          </bean>        <!-- 配置数据源 -->    <bean id="dataSource" 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"            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);    }}

读书人网 >软件架构设计

热点推荐