spring+ibatis集成(xml配置文件)

第一步 搭建环境spring的环境,项目的文档结构如下图:

所需的相关jar包如下图

第二步 环境搭建好以后,就可以进行代码的编写了,在开始前先概述一下大体的流程;在业务层PersonServiceImpl中注入PersonDao。

1.personServiceImpl.java如下

<span style="font-size:18px;"><span style="font-size:18px;">/**
 *@author wenxue.nong
 *@2014-12-30
 *@version 1.0
 *@PersonServiceImpl.java
 */
package com.test.services.impl;

import java.util.List;
import com.test.bean.Person;
import com.test.dao.PersonDao;
import com.test.services.PersonService;
public class PersonServiceImpl implements PersonService {
	//定义要注入的组件并且实现它的setter方法
	private PersonDao personDao;

	public void setPersonDao(PersonDao personDao) {
		this.personDao = personDao;
	}
        //业务方法
        public List<Person> findPerson(){
	personDao.fingPersonList();
	return null;

	}

}</span></span>

当然 他实现了一个简单的接口,实现软件面向接口编程,接口如下personService

<span style="font-size:18px;"><span style="font-size:18px;">package com.test.services;

import java.util.List;
import com.test.bean.Person;
/**
 *@author wenxue.nong
 *@创建时间:2014-12-30
 *@version 1.0
 *@文件名称:PersonService.java
 */
public interface PersonService {

	public  List<Person> findPerson();

}</span></span>

2.创建需要注入的组件,这里是操作数据库的dao层

PersonDaoImpl.java

<span style="font-size:18px;"><span style="font-size:18px;">package com.test.dao.impl;

import java.util.List;
import com.test.bean.Person;
import com.test.dao.PersonDao;

/**
 *@author wenxue.nong
 *@创建时间:2014-12-30
 *@version 1.0
 *@文件名称:PersonDaoImpl.java
 */
public class PersonDaoImpl implements PersonDao {

        /** 在这里的业务只是向控制台输出一句话,如果能输出证明注入成功*/
       public List<Person> fingPersonList(){
		System.out.println("我是dao层的findPersonList");
		return null;
	}

}</span></span>

PersonDaoImpl实现的接口

PersonDao.java

<span style="font-size:18px;"><span style="font-size:18px;">/**
 *@author wenxue.nong
 *@2014-12-30
 *@version 1.0
 *@PersonDao.java
 */
package com.test.dao;

import java.util.List;

import com.test.bean.Person;

/**
 *@author wenxue.nong
 *@创建时间:2014-12-30
 *@version 1.0
 *@文件名称:PersonDao.java
 */
public interface PersonDao {

	public abstract List<Person> fingPersonList();

}</span></span>

3.通过配置文件applicationContext.xml(名字可以你干了 我随意,但是一般要起的有意义)

applicationContext.xml

<span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.1.xsd
	">
	<!--通过配置文件注入-->
	<!-- 将personDao交给spring容器管理 -->
	<bean id="personDao" class="com.test.dao.impl.PersonDaoImpl">
	</bean>
	<!-- 将personService交给spring容器管理,并且通过setter方式注入personDao -->
        <bean id="personService" class="com.test.services.impl.PersonServiceImpl">
    	     <property name="personDao" ref="personDao"></property>
        </bean>

</beans></span></span>

这样我们的spring项目已经完成,接下来就可以进行测试了

4.测试类如下

PersonTest.java

<span style="font-size:18px;"><span style="font-size:18px;">/**
 *@author wenxue.nong
 *@2014-12-29
 *@version 1.0
 *@PersonTest.java
 */
package com.test;

import static org.junit.Assert.*;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.test.services.PersonService;
/**
 *@author wenxue.nong
 *@创建时间:2014-12-29
 *@version 1.0
 *@文件名称:PersonTest.java
 */
public class PersonTest {

	@Test
	public void test() {
		//启动spring容器
		ApplicationContext t = new ClassPathXmlApplicationContext("config/applicationContext.xml");
		//从容器中通过id获取被管理的bean
		PersonService personService = (PersonService) t.getBean("personService");
		//得到该bean后调用里面的业务方法
		personService.findPerson();
	}

}
</span></span>

4.结果如下

<span style="font-size:18px;"><span style="font-size:18px;">十二月 30, 2014 2:05:42 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org[email protected]36c14a61: startup date [Tue Dec 30 14:05:42 CST 2014]; root of context hierarchy
十二月 30, 2014 2:05:42 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [config/applicationContext.xml]
十二月 30, 2014 2:05:42 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.s[email protected]1efb880e: defining beans [personDao,personService]; root of factory hierarchy
我是dao层的personDaoImpl</span></span>

看到

<span style="font-size:18px;"><span style="font-size:18px;">我是dao层的personDaoImpl</span></span>

证明 personDaoImpl已经注入到PersonServiceImpl中了。

第三步 当spring已经能注入成功后,接下来集成ibatis

如何集 首先把他相关的包导入到项目中如下 连接数据库肯定用到驱动这里是MySQL的驱动,通过连接池来连接肯定用到连接池commons-pool.jar,数据源用到commons-dbcp.jar,ibatis的jar包,ibatis-sqlMap.jar

ibatis有两个配置文件,总的配置文件sqlMapConfig.xml和xxx.xml对应一个domain,这里是Person.xml

我们这边的domain 如下

Person.java

<span style="font-size:18px;"><span style="font-size:18px;">/**
 *@author wenxue.nong
 *@2014-12-30
 *@version 1.0
 *@Person.java
 */
package com.test.bean;

/**
 *@author wenxue.nong
 *@创建时间:2014-12-30
 *@version 1.0
 *@文件名称:Person.java
 */
public class Person {
	private String id;
	private String name;

}
</span></span>

Person.xml对应的配置如下,并且我们给他一个查询SQL语句

<span style="font-size:18px;"><span style="font-size:18px;"><?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" >
<!-- person的配置 -->
<sqlMap >
	<typeAlias type="com.test.bean.Person" alias="person"/>

    <select id="ibateisSelectPerson" resultClass="person">
     select * from person
  </select>
</sqlMap></span></span>

sqlMapConfig.xml的配置如下

<span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
	<sqlMap resource="mapper/Person.xml" />
</sqlMapConfig></span></span>

配置完ibatis的配置文件就可以用spring集成ibatis了(集成 听起来高大上的样子 说白了  就是在applicationContext.xml中配置ibatis)

集成后的applicationContext.xml的配置文件如下

<span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.1.xsd
	">
	<!--通过配置文件注入-->
	<!-- 将personDao交给spring容器管理 -->
	<bean id="personDao" class="com.test.dao.impl.PersonDaoImpl">
		<property name="sqlMapClient" ref="sqlMapClient"/>
		<property name="dataSource" ref="dataSource"/>
	</bean>
	<!-- 将personService交给spring容器管理,并且通过setter方式注入personDao -->
    <bean id="personService" class="com.test.services.impl.PersonServiceImpl">
    	<property name="personDao" ref="personDao"></property>
    </bean>

    	<!-- property-placeholder是一个属性遍历器,定位一个属性文件 -->
	<context:property-placeholder location="classpath:config/application.properties" />

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    	<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
    </bean>

        <!-- 注入ibatis -->
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
    	<property name="configLocation">
    		<value>classpath:config/sqlMapConfig.xml</value>
    	</property>
    </bean>
</beans></span></span>

PersonDaoImpl.java改成如下 ,相比上面的多继承了

<span style="font-size:18px;"><span style="font-size:18px;">SqlMapClientDaoSupport 类,它里面有sqlMapClient和dataSource属性,并且实现了setter方法,所以可以在<span style="font-size:14px;">applicationContext.xml中注入</span></span></span>
<span style="font-size:18px;"><span style="font-size:18px;">/**
 *@author wenxue.nong
 *@2014-12-30
 *@version 1.0
 *@PersonDaoImpl.java
 */
package com.test.dao.impl;

import java.util.List;

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

import com.test.bean.Person;
import com.test.dao.PersonDao;

/**
 *@author wenxue.nong
 *@创建时间:2014-12-30
 *@version 1.0
 *@文件名称:PersonDaoImpl.java
 */
public class PersonDaoImpl extends SqlMapClientDaoSupport implements PersonDao {

	/**
	 *@author wenxue.nong
	 *@return
	 *@time 2014-12-30上午10:56:23
	 */
	public List<Person> fingPersonList(){
		System.out.println("我是dao层的personDaoImpl");
		List<Person> l = this.getSqlMapClientTemplate().queryForList("ibateisSelectPerson");
		return l;
	}

}
</span></span>

PersonServiceImpl.java 改了一点点变成有返回值

<span style="font-size:18px;"><span style="font-size:18px;">/**
 *@author wenxue.nong
 *@2014-12-30
 *@version 1.0
 *@PersonServiceImpl.java
 */
package com.test.services.impl;

import java.util.List;

import com.test.bean.Person;
import com.test.dao.PersonDao;
import com.test.services.PersonService;

/**
 *@author wenxue.nong
 *@创建时间:2014-12-30
 *@version 1.0
 *@文件名称:PersonServiceImpl.java
 */
public class PersonServiceImpl implements PersonService {

	private PersonDao personDao;

	public void setPersonDao(PersonDao personDao) {
		this.personDao = personDao;
	}

	/**
	 * 只做一个方法
	 *@author wenxue.nong
	 *@return
	 *@time 2014-12-30上午10:52:05
	 */

	public List<Person> findPerson(){
		List<Person> l = personDao.fingPersonList();
		return l;

	}

}
</span></span>

测试类

<span style="font-size:18px;"><span style="font-size:18px;">/**
 *@author wenxue.nong
 *@2014-12-29
 *@version 1.0
 *@PersonTest.java
 */
package com.test;

import static org.junit.Assert.*;

import java.util.List;

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

import com.test.bean.Person;
import com.test.services.PersonService;
/**
 *@author wenxue.nong
 *@创建时间:2014-12-29
 *@version 1.0
 *@文件名称:PersonTest.java
 */
public class PersonTest {

	@Test
	public void test() {
		//启动spring容器
		ApplicationContext t = new ClassPathXmlApplicationContext("config/applicationContext.xml");
		//从容器中通过id获取被管理的bean
		PersonService personService = (PersonService) t.getBean("personService");
		//得到该bean后调用里面的业务方法
		List<Person> l = personService.findPerson();
		System.out.println(l.get(0));
	}

}
</span></span>

结果如下

<span style="font-size:18px;"><span style="font-size:18px;">十二月 30, 2014 3:24:43 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org[email protected]26d0fffc: startup date [Tue Dec 30 15:24:43 CST 2014]; root of context hierarchy
十二月 30, 2014 3:24:43 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [config/applicationContext.xml]
十二月 30, 2014 3:24:43 下午 org.springframework.core.io.support.PropertiesLoaderSupport loadProperties
信息: Loading properties file from class path resource [config/application.properties]
十二月 30, 2014 3:24:43 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.s[email protected]45890909: defining beans [personDao,personService,org.springframework.context.support.PropertySourcesPlaceholderConfigurer#0,dataSource,sqlMapClient]; root of factory hierarchy
我是dao层的personDaoImpl          证明注入成功
[email protected]     证明可以读取数据库的数据
</span></span>

以上就是spring集成ibatis的的过程代码。

注意的地方:在连接数据库的时候要改成自己的数据库可以在application.properties中灵活的修改

application.properties

<span style="font-size:18px;"><span style="font-size:18px;">#develop db
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/person?useUnicode\=true&characterEncoding\=utf-8
jdbc.username=root
jdbc.password=root

</span></span>

以下是源码,源码中有person.sql文件,在导入自己项目的时候只要把src与webRoot复制到项目中就行,测试的时候报错 记得导入junit 4 jar包

person.sql用navicat导入自己的数据库

下载链接点击打开链接

时间: 2024-10-14 03:51:56

spring+ibatis集成(xml配置文件)的相关文章

Struts2+Spring+Ibatis集成合并

上一篇博客讲述了Struts2+Spring的集成合并,主要是利用了一个中间jar包,这篇博客在加上Ibatis持久层框架,三个框架进行合并.其中Struts2和Spring部分和前边的一样,主要是讲解Spring和Ibatis之间的合并,这里也涉及到Spring的AOP编程思想,声明式事务的使用. 一,看一下分工吧: Struts2:负责流程控制,主要针对的是从JSP页面到action类这一块的步骤. Spring:负责各个类,对象的创建,包括action,service,dao,数据连接对象

模拟Spring中applicationContext.xml配置文件初始化bean的过程

package com.xiaohao.action; import java.io.File; import java.lang.reflect.Method; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** *

spring boot 导入xml配置文件所需注解和禁用自动配置类的注解

导入XML配置 如果您绝对必须使用基于XML的配置,我们建议您仍然从一个@Configuration类开始.然后您可以使用@ImportResource注释来加载XML配置文件. 禁用特定的自动配置类 如果您发现不需要的特定自动配置类正在应用,则可以使用exclude属性@EnableAutoConfiguration来禁用它们,如以下示例所示: import org.springframework.boot.autoconfigure.*; import org.springframework

Spring+Ibatis集成开发实例

首先简历数据库demo(本文选mysql) 数据库脚本: CREATE TABLE `ibatis` (  `id` varchar(20) NOT NULL,  `name` varchar(20) default NULL,  PRIMARY KEY  (`id`)) ENGINE=InnoDB DEFAULT CHARSET=gb2312;insert into ibatis values("1","1");insert into ibatis values(

spring.net 集成nhibernate配置文件(这里暴露了GetCurrentSession 对于 CurrentSession unbond thread这里给出了解决方法)

我这里主要分成了两个xml来进行spring.net管理实际情况中可自己根据需要进行分类 Dao2.xml <?xml version="1.0" encoding="utf-8" ?> <objects xmlns="http://www.springframework.net" xmlns:db="http://www.springframework.net/database" xmlns:tx=&quo

关于spring的applicationContext.xml配置文件的ref和value之自我想法

今天在做SSH的一个项目的时候,因为需要定时操作,所以就再sping里面加入了一个quartz的小定时框架,结果在运行时候,发生了一个小bug. Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.String' to required type 'org.quartz.spi.JobFactory' fo

spring+springmvc+mybatis xml配置文件

一.jdbc.properties 文件: driver=com.mysql.jdbc.Driverurl=jdbc:mysql://192.168.31.xxx:3306/abc?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername=xxxpassword=xxx#定义初始连接数initialSize=0#定义最大连接数maxActive=20#定义最大空闲maxIdle=20#定义最小空闲minIdle=1#定义最长等

Spring 加载xml配置文件的方式 ApplicationContext

大家都知道Java读普通文件是通过Basic I/O 中的InputStream.OutStream.Reader.Writer 等实现的.在spring 框架中,它是怎样识别xml这个配置文件的呢? 这就要靠IoC容器的两个接口BeanFactory 和ApplicationContext: BeanFactory (接口) |--------XmlBeanFactory(实现类) ApplicationContext (接口) |-------- ClassPathXmlApplicatio

Spring加载xml配置文件的方式 ApplicationContext

大家都知道Java读普通文件是通过Basic I/O 中的InputStream.OutStream.Reader.Writer 等实现的.在spring 框架中,它是怎样识别xml这个配置文件的呢? 这就要靠IoC容器的两个接口BeanFactory 和ApplicationContext: BeanFactory (接口) |--------XmlBeanFactory(实现类) ApplicationContext (接口) |-------- ClassPathXmlApplicatio