MyBatis And Spring Demo

Spring相关配置

//数据源
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property>
		<property name="url" value="jdbc:sqlserver://127.0.0.1:1433;databaseName=ibatisDB"></property>
		<property name="username" value="sa"></property>
		<property name="password" value="zhaoyu"></property>
	</bean>	
	//MyBatis支持
	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<bean id="dao" class="com.dao.impl.DaoImpl">
		//注入
		<property name="sqlMapClient" ref="sqlMapClient"></property>
	</bean>
	
	//事务管理器
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
  		<property name="dataSource"> 
  		 <ref local="dataSource"/> 
    	</property> 
 	</bean>	
 	
	//通过引用bean方式配置事物(不是更加方便的设置切入点方式)
 	<bean id="DaoProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
 		 <property name="transactionManager"> 
  			 <ref bean="transactionManager"/> 
  		</property> 
  		<property name="target"> 
  			 <ref local="dao"/> 
  		</property> 
  		<property name="transactionAttributes"> 
 			  <props> 
  				<prop key="search*">PROPAGATION_REQUIRED,readOnly</prop> 
  				<prop key="*">PROPAGATION_REQUIRED</prop> 
  			 </props> 
  		</property> 
 	</bean>

MyBatis相关配置

<?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> 	<!-- 都写在spring配置文件中,这里只需要配置映射文件 -->
	<sqlMap resource="com/entity/User.xml"/> 
</sqlMapConfig>

实体类

package com.entity;
public class User {
	private int id;
	private String name;
	private int age;
	//省略get set
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "编号:"+id+" 姓名:"+name+" 年龄:"+age;
	}	
}

配置SQL

<?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 namespace="user">
	<typeAlias alias="user" type="com.entity.User"/>  //alias别名 type类型

	<select id="getUsers" resultClass="user" >
		<![CDATA[select * from t_user]]>
	</select>
	
	<insert id="insert" parameterClass="user">
		insert into t_user(name,age) values(#name#,#age#)
	</insert>
	
	<update id="update" parameterClass="java.util.Map">
		<![CDATA[update t_user set name=#name#,age=#age# where id = #id#]]>
	</update>
	
	<delete id="delete" parameterClass="int">
		<![CDATA[delete from t_user where id = #id#]]>
	</delete>
</sqlMap>

DAO代码

package com.dao.impl;

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

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

import com.dao.Dao;
import com.entity.User;
import com.ibatis.sqlmap.client.SqlMapExecutor;

public class DaoImpl extends SqlMapClientDaoSupport implements Dao {

	public void save(User user) {
		getSqlMapClientTemplate().insert("insert", user);
	}
	
	public void delete(int id) {
		getSqlMapClientTemplate().delete("delete",id);
	}

	public void update(String name, int age, int id) {
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("name", name);
		map.put("age", age);
		map.put("id", id);
		getSqlMapClientTemplate().update("update",map);
	}
	
	@SuppressWarnings("unchecked")
	public List<User> searchUsers() {
		return getSqlMapClientTemplate().queryForList("getUsers");
	}
	
	/**
	 * 类似hibernate的回调接口,在此是一个demo
	 * @return
	 */
	public List<User> demo(){
		getSqlMapClientTemplate().execute(new SqlMapClientCallback() {		
			public Object doInSqlMapClient(SqlMapExecutor sqlMap) throws SQLException {
				//sqlMap.queryForObject(arg0)
				return null;
			}
		});
		return null;
	}
}

相关调用代码

package com;

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

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

import com.dao.Dao;
import com.entity.User;

public class Demo {
	
	public static void main(String[] args) {	
		save();
		showUser();
		update();
		delete();
	}
	
	//保存
	public static void save(){
		Dao dao = daoFartory();
		User user = new User("zhaoliang228",24);
		dao.save(user);
	}
	
	//修改
	public static void update(){
		Dao dao = daoFartory();
		dao.update("zl", 100, 5);
	}
	
	public static void delete(){
		Dao dao = daoFartory();
		dao.delete(6);
	}
	
	//查询
	public static void showUser(){
		Dao dao = daoFartory();
		List<User> users = dao.searchUsers();
		Iterator<User> i = users.iterator();
		while(i.hasNext()){
			System.out.println(i.next());
		}
	}
	
	public static Dao daoFartory(){
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		Dao dao = (Dao) ctx.getBean("dao");
		return dao;
	}
}

相关推荐