MyBatis配置文件和接口编程
来源:互联网 发布:数据结构图应用 编辑:程序博客网 时间:2024/06/03 00:22
MyBatis配置文件和接口编程
如果接触过一些常用的 Java EE框架,应该都知道这些框架需要提供一个全局配置文件,用于指定程序正常运行所需的设置和参数信息。而针对常用的持久层框架而言(Hibernate、JPA、iBatis等),则通常需要配置两类文件:一类用于指定数据源、事务属性以及其他一些参数配置信息(通常是一个独立的文件,可以称之为全局配置文件);另一类则用于指定数据库表和程序之间的映射信息(可能不止一个文件,我们称之为映射文件)。MyBatis也不例外,虽然其中的一部分可以通过注解的形式进行,但是这两部分内容本身仍是必不可少的。
在 MyBatis中多以 Mapper、Session、Configuration等其他常用 ORM 框架中的名字代替,体现的无非是两个方面:首先是为了减少开发者在切换框架所带来的学习成本;其次,MyBatis充分吸收了其他 ORM框架好的实践,MyBatis现在已不仅仅是一个 SQL映射框架了)。在全局配置文件中可以配置的信息主要包括如下几个方面:
properties ---用于提供一系列的键值对组成的属性信息,该属性信息可以用于整个配置文件中。
settings ---用于设置 MyBatis的运行时方式,比如是否启用延迟加载等。
typeAliases ---为 Java 类型指定别名,可以在 XML 文件中用别名取代 Java 类的全限定名。这个非常重要。
typeHandlers ---在 MyBatis 通过 PreparedStatement为占位符设置值,或者从 ResultSet取出值时,特定类型的类型处理器会被执行。
objectFactory --- MyBatis通过 ObjectFactory来创建结果对象。可以通过继承 DefaultObjectFactory来实现自己的 ObjectFactory类。
plugins ---用于配置一系列拦截器,用于拦截映射 SQL语句的执行。可以通过实现 Interceptor接口来实现自己的拦截器。
environments ---用于配置数据源信息,包括连接池、事务属性等。
mappers ---程序中所有用到的 SQL映射文件都在这里列出,这些映射 SQL都被 MyBatis 管理。
上面提及的大多数元素都不是必需的,通常 MyBatis会为没有显式设置的元素提供缺省值。一个简单的全局配置文件示例如下:
1. 简单的全局配置文件示例
<?xml version="1.0" encoding="UTF-8" ?>
<!--iBatis 和 MyBatis 的全局配置文件使用不同的 DTD 约束,在将应用由
iBatis 升级至 MyBatis 时需要注意(两者的映射文件 DTD 约束也不相同)-->
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置数据源相关的信息 -->
<environments default="demo">
<environment id="demo">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value= … />
<property name="url" value= … />
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 列出映射文件 -->
<mappers>
<mapper resource="footmark/mybatis/demo/UserInfoMapper.xml"/>
</mappers>
</configuration>
有了这些信息,MyBatis便能够和数据库建立连接,并应用给定的连接池信息和事务属性。MyBatis封装了这些操作,最终暴露一个 SqlSessionFactory实例供开发者使用,从名字可以看出来,这是一个创建 SqlSession的工厂类,通过 SqlSession实例,开发者能够直接进行业务逻辑的操作,而不需要重复编写 JDBC相关的样板代码。根据全局配置文件生成 SqlSession的代码如下:
Reader reader = Resources.getResourceAsReader("Configuration.xml");
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
可以把上面的三行代码看做是 MyBatis创建 SqlSession的样板代码。其中第一行代码在类路径上加载配置文件,Resources是 MyBatis 提供的一个工具类,它用于简化资源文件的加载,它可以访问各种路径的文件,不过最常用的还是示例中这种基于类路径的表示方式。如果读者对 Hibernate有所了解,一定会发现 MyBatis不论是使用风格还是类名都和 Hibernate非常相像。
在完成全局配置文件,并通过 MyBatis获得 SqlSession对象之后,便可以执行数据访问操作了。对于 MyBatis而言,要执行的操作其实就是在映射文件中配置的 SQL语句。两者的配置基本相同,如下所示:
2. 在映射文件中配置 SQL 语句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybatis.demo.UserInfoMapper">
<select id="selectUser" parameterType="int"
resultType="mybatis.demo.UserInfo">
select * from UserInfo where userid =#{userid}
</select>
</mapper>
在 iBatis中,namespace不是必需的,且它的存在没有实际的意义。在 MyBatis中,namespace终于派上用场了,它使得映射文件与接口绑定变得非常自然。关于接口绑定,后面会有篇幅专门描述。使用 SqlSession执行 SQL 的方式如下:
清单 3. 使用 SqlSession 执行映射文件中配置的 SQL 语句
try
{
UserInfo userinfo = (UserInfo) sqlSession.selectOne
("mybatis.demo.UserInfoMapper.getUser", 2);
System.out.println(userinfo);
} finally
{
sqlSession.close();
}
需要注意的是,SqlSession的使用必需遵守上面的格式,即在 finally块中将其关闭。以保证资源得到释放,防止出现内存泄露!
以上就是一个简单而完整的 MyBatis程序。其中涉及了全局配置文件,映射文件,构建 SqlSession对象,执行数据访问操作等四个步骤。
下面将针对除构建 SqlSession对象之外的三块内容进行分解。
MyBatis 全局配置文件的改变
清单 5. 在 MyBatis 中设置属性的方式
<settings>
<setting name="props1" value="value1"/>
<setting name="props2" value="value2"/>
……
</settings>
另外,之前配置事务管理器和数据源的方式如下:
MyBatis中调整为如下的方式:
在 MyBatis 中配置事务管理器和数据源的方式
<environments default="demo">
<environment id="demo">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="JDBC.Driver" value="${driver}"/>
<!-- 其他数据源信息省略 -->
</dataSource>
</environment>
</environments>
通过<environments>来进行数据源管理,主要是为了简化在多套数据源配置之间的切换,比如开发和发布使用不同的配置。
在 MyBatis 中指定映射文件的方式
<mappers>
<mapper resource=... />
<mapper resource=... />
</mappers>
上面的这些调整,主要出发点其实并不是使得 MyBatis功能更为强大,而是使配置更为合理,让开发者更容易阅读和理解。
2.以接口的方式编程
到目前为止,我们主要讨论了 XML形式的全局配置,其实这也不是唯一选择,MyBatis还提供了通过代码来进行配置的方式(略)。
需要注意的是 Configuration的 addMapper()方法,该方法的参数通常是一个接口,可以在接口里面定义若干方法,
1) 在方法上使用注解来指定映射的 SQL语句
一个典型的接口定义以及对应的数据访问方法如下:
·将映射的 SQL 语句与接口中的方法绑定:
// 映射 SQL 绑定接口
public interface UserInfoMapper
{
@Select("select * from userinfo where userid = #{userid}")
public UserInfo getUserInfo(int userid);
}
// 接口绑定对应的数据访问方法
try
{
//UserInfo userinfo = (UserInfo) sqlSession.selectOne
("mybatis.demo.UserInfoMapper.selectUser", 2);
UserInfoMapper userinfoMapper =
sqlSession.getMapper(UserInfoMapper.class);
UserInfo userinfo = userinfoMapper.getUserInfo(1);
System.out.println(userinfo);
} finally
{
sqlSession.close();
}
2) 不通过注解的方式
<mappernamespace="com.yihaomen.inter.IUserOperation">
<selectid="selectUserByID" parameterType="int"resultType="User">
select * from `user` where id = #{id}
</select>
<!--为了返回list 类型而定义的returnMap-->
<resultMaptype="User" id="resultListUser">
<id column="id" property="id" />
<result column="userName" property="userName"/>
<result column="userAge" property="userAge" />
<result column="userAddress"property="userAddress" />
</resultMap>
<!--返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
<selectid="selectUsers" parameterType="string"resultMap="resultListUser">
<!-- #{username}代表的是parameterType是string的参数值 -->
select * from user where userName like#{userName}
</select>
</mapper>
对应的IUserOperation类里面:
public interface IUserOperation {
publicUser selectUserByID(int id);
publicList<User> selectUsers(String userName);
}
参考:http://blog.csdn.net/techbirds_bao/article/details/9233599
http://blog.csdn.net/hupanfeng/article/details/9238127
- MyBatis配置文件和接口编程
- MyBatis的HelloWord和接口式编程
- mybatis--面向接口编程
- Mybatis面向接口编程
- Mybatis 面向接口编程
- Mybatis面向接口编程
- MyBatis接口编程模拟
- MyBatis之接口编程
- Mybatis接口式编程
- mybatis接口式编程
- mybatis接口方式编程
- MyBatis接口编程
- mybatis配置文件中${}和#{}
- mybatis自动生成 实体类、接口、配置文件
- Mybatis中是否需要依赖配置文件的名称要和mapper接口的名称一致
- 使用mybatis-generator自动生成实体类,接口实现类和Mapper映射配置文件
- mybatis以接口方式编程
- springmvc+mybatis高效接口编程
- Eclipse 使用maven创建Dynamic Web Project
- ACM ZOJ Problem Set - 1002 fire net
- 爱心
- 正则表达式--规则
- Mac上编译boost
- MyBatis配置文件和接口编程
- iOS上获取iTunes音乐权限
- AFNetworking了解
- 运算放大器知识点总结
- 如何关闭Mac上的Dashboard?
- Chromium项目文化
- MySQL 5.6 for Windows 解压缩版配置安装
- 在64位linux下编译32位程序
- JAVA的StringBuffer类