怒放的生命镇博。。。
曾经多少次跌倒在路上 曾经多少次折断过翅膀 如今我已不再感到彷徨 我想超越这平凡的生活
我想要怒放的生命 就像飞翔在辽阔天空 就像穿越在无边的狂野 拥有挣脱一切的力量…………
周末,学了一下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()); } } }
运行测试类得到的结果如下: