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");
}
}