ibatis + Spring 多表查询(4)

 demo的最后讲解Spring和iBatis

  1.建POJO类

  我们的类是Contact.java 和Labor.java 

2.POJO的映射文件Contact.xml

  如demo第二篇文章所示。

3.建一个SqlMap的配置文件sql-map-config.xml,sqlMap元素的resource属性告诉Spring去哪找POJO映射文件

<sqlMapConfig>
	<settings useStatementNamespaces="true" />
	<sqlMap resource="com/sk/ibatis/xml/Contact_spring.xml" />
</sqlMapConfig>

这里不需要我们打理transactionManager 的事情。

正常的话,SqlMap如下,上下对比差别很大

<?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 useStatementNamespaces="true"/>

  <transactionManager type="JDBC">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
      <property name="JDBC.ConnectionURL"
        value="jdbc:mysql://localhost:3306/vin"/>
      <property name="JDBC.Username" value="root"/>
      <property name="JDBC.Password" value="123456"/>
    </dataSource>
  </transactionManager>

  <sqlMap resource="com/sk/ibatis/xml/Contact.xml"/>  
</sqlMapConfig>

4. jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver   
jdbc.url=jdbc:mysql://localhost:3306/vin
jdbc.username=root  
jdbc.password=123456

5.Spring 配置文件

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

	<!--此bean告诉Spring去哪找数据库的配置信息,因为有此Bean才出现下面用${}标记来取变量的语句 -->
	<bean id="propertyConfig"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>com/sk/spring/xml/jdbc.properties</value>
		</property>
	</bean>

	<!--配置一个数据源,根据上面propertyConfig指定的location去找数据库连接的配置信息 -->
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName">
			<value>${jdbc.driver}</value>
		</property>
		<property name="url">
			<value>${jdbc.url}</value>
		</property>
		<property name="username">
			<value>root</value>
		</property>
		<property name="password">
			<value>123456</value>
		</property>
	</bean>

	<!--根据dataSource和configLocation创建一个SqlMapClient -->
	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocation">
			<value>com/sk/ibatis/xml/SqlMapConfig_spring.xml</value>
		</property>
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
	</bean>

	<!--根据sqlMapClien创建一个SqlMapClient模版类 -->
	<bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
		<property name="sqlMapClient">
			<ref bean="sqlMapClient" />
		</property>
	</bean>

	<!--将上面的模版类织入到我们的DAO对象中 -->
	<bean id="contactDao" class="com.sk.spring.dao.ContactDaoSqlMap">
		<property name="sqlMapClientTemplate">
			<ref bean="sqlMapClientTemplate" />
		</property>
	</bean>
	<!--将上面的模版类织入到我们的DAO对象中 -->
	<bean id="laborDao" class="com.sk.spring.dao.LaborDaoSqlMap">
		<property name="sqlMapClientTemplate">
			<ref bean="sqlMapClientTemplate" />
		</property>
	</bean>
</beans>  
  

6.dao  这里重要理解怎么获得那个 sqlMap的,其实是从Spring那里得到一个sqlMapClientTemplate。这个类能在Spring框架运行时自动生成一个单例,以后我们都是从它上继承这个sqlMap的实例。


package com.sk.spring.dao;

import org.springframework.orm.ibatis.SqlMapClientTemplate;
import com.sk.ibatis.model.Contact;

public class ContactDaoSqlMap {
	private SqlMapClientTemplate sqlMapClientTemplate;

	public SqlMapClientTemplate getSqlMapClientTemplate() {
		return sqlMapClientTemplate;
	}

	public void setSqlMapClientTemplate(
			SqlMapClientTemplate sqlMapClientTemplate) {
		this.sqlMapClientTemplate = sqlMapClientTemplate;
	}

	public Contact getById(int id) {
		return (Contact) sqlMapClientTemplate.queryForObject("Contact.getById", id);
	}

}
7. 下面写一个带main函数的类来测试上面的代码.

package com.sk.spring.biz;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.sk.ibatis.model.Contact;
import com.sk.ibatis.model.Labor;
import com.sk.spring.dao.*;

public class ConsumeDao {

	public static void main(String[] args) {
		ApplicationContext factory = new ClassPathXmlApplicationContext(
				"com/sk/spring/xml/applicationContext.xml");

		ContactDaoSqlMap contactDao = (ContactDaoSqlMap) factory
				.getBean("contactDao");
		LaborDaoSqlMap laborDao = (LaborDaoSqlMap) factory.getBean("laborDao");

		System.out.println("Labor Info:\n");
		List<Labor> labors = (List<Labor>) laborDao.getLaborInfo();
		System.out.print("  " + "id");
		System.out.print("  " + "name");
		System.out.print("  " + "mail");
		System.out.print("  " + "band");
		System.out.print("  " + "\n");
		for (Labor c : labors) {
			System.out.print("  " + c.getId());
			System.out.print("   " + c.getFirstName());
			System.out.print("  " + c.getEmail());
			System.out.print("  " + c.getBand());
			System.out.print("  " + "\n");
			
		}
		System.out.println("----------\n");
		System.out.println("Labor is loaded from two tables. "+"\n"+"we make it possible through using "+"\n"+"spring4ibatis classes to call"+"\n"+"procedure in mysql.\n");
		System.out.println("----------\n");
		System.out.println("Contact Info:\n");
		Contact contact = (Contact) contactDao.getById(1);
		System.out.println(" id: "+contact.getId()+" firstName: "+contact.getFirstName()+" lastName: "+contact.getLastName()+" Email: "+contact.getEmail());
		System.out.println("----------\n");
		System.out.println("Contact is only a single table . :\n");
		System.out.println("----------\n");
		
		System.out.println("To see detail info about the demo .you can download it in CSDN .\n");
		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值