spring+mybatIS之helloworld

怒放的生命镇博。。。

曾经多少次跌倒在路上 曾经多少次折断过翅膀 如今我已不再感到彷徨 我想超越这平凡的生活

我想要怒放的生命 就像飞翔在辽阔天空 就像穿越在无边的狂野 拥有挣脱一切的力量…………

周末,学了一下mybatis 再把mybaits和spring整合到一起。

spring和mybatis用的都是3.2的版本

spring-mybaits.jar 包 是1.2.1的版本

由于我这个项目可能会有后续的开发,所有就把spring3.2中的包全部添加进来了,

在用spring的事物管理,用了申明试事物管理。所有用到了 aspatj***等包

在测试的时候用了junit。

整个项目用到的jar包如下所示。

 在整个项目中都采用的时候xml文件配置的方式。

首先一个实体类,属性不多,如下 set 和get方法就没有贴上来了。。。。

package org.i94livng.model.user;

public class User {

	private String userName;
	private String password;
	private String userId;
	
	@Override
	public String toString() {
		return "User [userName=" + userName + ", password=" + password
				+ ", userId=" + userId + "]";
	}
	
	
}

 数据库的初始表以及值如下

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `user_id` varchar(20) NOT NULL,
  `user_name` varchar(20) DEFAULT NULL,
  `user_password` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'i94living', 'i94living');

 下面说明一下配置文件,配置文件包括spirng的配置文件和mybaits的配置文件。

mybaits的配置文件分两种类型,一种项目总体配置文件,一种是sql映射的配置文件。

sql映射的配置文件如下,(UserMapper.xml)

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="org.i94livng.model.user.User">
	<resultMap type="User" id="userMap">
		<id column="user_id" property="userId" />
		<result column="user_name" property="userName" />
		<result column="user_password" property="password"/>
	</resultMap>
	
	<select id="getAllUser" resultMap="userMap">
		select * from user  
	</select>
	
</mapper>

 namespace:命名空间,resultMap:返值的类型,<select id="getAllUser"……>给定一个id 以便在代码

中调用给sql语句。

mybaits的总体配置文件如下(sqlMapConfig.xml):

看这个xml文件的名字就能想到这个xml的主要作用就是替项目找到各个模块中sql的映射文件。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

  <typeAliases>
  	<typeAlias type="org.i94livng.model.user.User" alias="User"/>
  </typeAliases>
  
  <mappers>
    <mapper resource="org/i94livng/model/user/UserMapper.xml"/>
  </mappers>
</configuration>

typeAlias:可以理解为为某一个类型起一个别名。mapper:看到resource这个属性就知道这玩意是找映

射文件。

既然这个项目用的事spring这个容器,必然就得说一下spring的配置文件。

spring的配置文件,我分开在两个xml文件里面写的。

首先说一下applicationContext.xml这个文件。如下:………………引用的文件的不贴出来了。。。。
 

<import resource="classpath:applicationContext-tx.xml"/>
    <context:property-placeholder location="classpath:jdbc.properties" />
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  		 <property name="driverClassName" value="${jdbc.driverName}"/>
         <property name="url" value="${jdbc.url}"/>
         <property name="username" value="${jdbc.username}"/>
         <property name="password" value="${jdbc.password}"/>
    </bean>
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
	</bean>
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<!-- 构造方法注入 -->
		<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
	</bean>
	<bean id="userDaoImpl" class="org.i94livng.dao.user.UserDaoImpl" >
		<property name="sqlSession" ref="sqlSession"></property>		
	</bean>

 这个xml中都是些很简单的东西了,基本上的属性注入,构造方法注入等。

import:引入其他xml文件

<context:property-placeholder location="classpath:jdbc.properties" />:读取,引入properties文件。

在该项目中,是由spring来管理事务的,采用了申明式事务管理,具体配置见applicationContext-tx.xml文件。如下:

     
    <!-- 开启spring的事物管理 -->  
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<!-- 所有方法都是用  REQUIRED 模式的事物管理-->
	<tx:advice id="txAdvice">
		<tx:attributes>
			<tx:method name="*" propagation="REQUIRED"/>
		</tx:attributes>
	</tx:advice>
	
	<aop:config >
		<aop:pointcut expression="execution(* org.i94living.dao.*.*(..))"
		id="interceptorPointCuts"/>
		<aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts"/>
	</aop:config>

 接下来就是贴java代码了,

首先:UserDaoImpl,接口就不贴了

public class UserDaoImpl implements UserDao {
	
	private  SqlSession sqlSession;
	public void setSqlSession(SqlSession sqlSession) {
		this.sqlSession = sqlSession;
	}
	
	public List<User> getUserList() {
		return sqlSession.selectList("org.i94livng.model.user.User.getAllUser");
	}
}

  很简单的几句代码。

最后就是测试类里的UserDaoImplTest.java

package org.i94livng.dao.user;


import java.util.List;

import org.i94livng.model.user.User;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserDaoImplTest {
	
	private static  UserDao userDaoImpl;
	
	@BeforeClass
	public static void beforeClass(){
	       ApplicationContext context = null;
		try {
			context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
		} catch (BeansException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}         
	      
	       userDaoImpl = (UserDaoImpl)context.getBean("userDaoImpl");   
	}
	
	@Test
	public void testGetUserList() {
		List<User> userList = userDaoImpl.getUserList();
		for (User user : userList) {
			System.out.println(user.toString());
		}
	}

}

运行测试类得到的结果如下:



 

猜你喜欢

转载自huhongyu.iteye.com/blog/1938821