源码资源地址:http://download.csdn.net/detail/yangjun19890825/4459130
近来由于工作需要,需要搭建一个新的框架,于是使用最新的SSI搭建了一个测试性框架,能够从数据库中查询数据并输出到JSP页面.
struts 2.3.4和spring 3.1.2,由于只初步写了测试代码,使用的也都是老版本的功能,新版的mybatis的功能有了很大改进,使得配置异常简单。
1. mybatis配置文件中,在老版本的ibatis中,如果命名别名,需要使用typeAlias,需要多少个,就写多少个,如下所示:
<typeAlias type=”com.some app.model.User” alias=”User”/>
当类的数量很多的时候,这个很麻烦。mybatis在SqlSessionFactoryBean类型,提供了一个属性,可以直接通过bean的包名,就一次性将所有的类都起了别名,别名的名字和 类名相同,如上面的User类的别名就是User.在配置文件的语句,如select,就可以直接使用User,作为数据库表的查询结果的关系映射类。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.cstor.network.bean" />
</bean>
2.免DAO层实现类。老版本的ibatis中,DAO需要有接口类和实现类,而mybatis中,通过配置,可直接省略DAO层实现累的编写,只需要编写接口层就好。如我编写的测试框架中,DAO层接口类位于包com.cstor.network.dao底下,则通过如下配置,则直接由mybatis自动去编写实现类:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.cstor.network.dao" />
</bean>
DAO层接口里的方法,通过mybatis的XML配置文件自动对应,需要配置mypper,同时,ACID语句的id需要与DAO层接口里面的方法名称相同,如下:
<mapper namespace="com.cstor.network.dao.UserDao">
<resultMap id="userResultMap" type="com.cstor.network.bean.User">
<result property="id" column="ID"/>
<result property="username" column="USERNAME"/>
<result property="password" column="PASSWORD"/>
<result property="email" column="EMAIL"/>
</resultMap>
<!-- Select with no parameters using the result map for Account class. -->
<select id="queryUsers" resultMap="userResultMap">
select * from user_monitor
</select>
</mapper>
public interface UserDao {
public List<User> queryUsers();
}
只要到业务层Service的实现类中引用DAO层的接口类便可,比如,我命名了一个接口类UserDao,通过上述配置之后,mybatis自动生成了一个实现类对象 userDao,此时,在spring配置文件中,是不需要有一个bean命名为 userDao的,由mybatis持有。我只需在Service实现类中引用 userDao对象便可,配置如下:
<bean id="userService" class="com.cstor.network.serviceImpl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
虽然使用mybatis可以省略很多配置,但也带来一些不便,下面说明一下我在搭建的过程中遇到的一些不便之处。
1. 当我将DAO命名为IUserDao时,无论怎么配置,都启动报错,最后将名字改为 UserDao才启动正常。
2.mybatis的XML配置文件必须和DAO层接口处于同一个包底下,而且必须名称相同,如我的框架中,UserDao.java和UerDao.xml都位于com.cstor.network.dao包底下,名字都相同。