Mybatis详解之宏观篇一

   MyBatis:


一款一流的支持自定义SQL、存储过程和高级映射的持久化框架,能够使用简单的
XML 格式或者注解进行来配置,能够映射基本数据元素、Map 接口和POJOs(普通java 对象)到
数据库中的记录。




    MyBatis核心:  --- SqlSessionFactory
    
1. SqlSessionFactory通过SqlSessionFactoryBuilder获得,
SqlSessionFactoryBuilder 能够从XML 配置文件或者通过自
定义编写的配置类(Configuration class),来创建一个SqlSessionFactory 实例。


              A:从XML 中创建SqlSessionFactory 实例


MyBatis 包括一个叫做Resources 的工具类(utility class),其中包含了一系
列方法,使之能简单地从classpath 或其它地方加载配置文件。


String resource = "org/mybatis/example/Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);




XML 配置文件包含MyBatis 框架的核心设置,包括获取数据库连接的DataSource 实例,和包
括决定事务作用域范围和控制的事务管理等




<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>






            B:如何不使用XML 来创建SqlSessionFactory




TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(configuration);




                 SqlSession ---- 真正执行sql的东东,提供了一系列执行SQL的方法
                 
SqlSessionFactory sqlMapper;
SqlSession session = sqlMapper.openSession();
try{
    Student stu = (Student)session.selectOne("he.maven.example.dao.StudentDao.getStudent","777");
}catch(Exception e){
e.printStackTrace();
}finally{
session.close();
}




虽然这种方法很有效,MyBatis 以前版本的用户对此也可能很熟悉,但现在有一个更简便的
方式,那就是对给定的映射语句,使用一个正确描述参数与返回值的接口(如
StudentMapper.class),您就能更清晰地执行类型安全的代码,从而避免错误和异常.


定义一个StudentMapper class  ---  正确描述参数与返回值的接口


SqlSession session = sqlSessionFactory.openSession();


try{
    StudentMapper mapper = sesson.getMappser(StudentMapper.class);
    Student student = mapper.selectStudent(100);
}catch(Exception e){
e.printStackTrace();
}finally{
session.close();
}




在上面的例子中,映射语句已经在XML 配置文件或注解中定义,所有MyBatis 提供的功能特性都可以通过基于XML 映射配置文件配置来实现


<?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="org.mybatis.example.BlogMapper">
<select id="selectBlog" parameterType="int" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>




namespace:命名空间 -- 完整类名 -- 命名空间能够进行接口绑定,对应dao接口
id:语句名称,对应dao方法






补充:Mybatis的注解方式:  ---  不适合复杂SQL语句


public interface BlogMapper {
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(int id);
}






关于SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession的作用于和生命周期:




SqlSessionFactoryBuilder:


   可以在任何时候被实例化、使用和销毁。一旦您创造了SqlSessionFactory 就不需要
再保留它了
   最好的作用域是方法体内


SqlSessionFactory:


一旦创建,SqlSessionFactory 将会存在于您的应用程序整个运行生命周期中。很少或根本
没有理由去销毁它或重新创建它
最好的作用域范围是一个应用的生命周期范围。  --- Spring注入或单例实现




SqlSession:


每个线程都有一个SqlSession实例,SqlSession 实例是不被共享的,并且不是线程不安全




如果您正在用一个WEB 框架,可以把SqlSession 的作用域看作类似
于HTTP 的请求范围。也就是说,在收到一个HTTP 请求,您可以打开一个SqlSession,当您把
response 返回时,就可以把SqlSession 关闭。关闭会话是非常重要的,您应该要确保会话在一
个finally 块中被关闭。


创建:
Sqlsession对应着一次数据库会话。由于数据库回话不是永久的,因此Sqlsession的生命周期也不应该是永久的,相反,
在你每次访问数据库时都需要创建它(当然并不是说在Sqlsession里只能执行一次sql,你可以执行多次,当一旦关闭了Sqlsession就需要重新创建它)。
创建Sqlsession的地方只有一个,那就是SqlsessionFactory的openSession方法。






Mapper实例:


Mappers 是创建来绑定映射语句的接口,该Mapper 实例是从SqlSession 得到的。因此,所
有mapper 实例的作用域跟创建它的SqlSession 一样。但是,mapper 实例最好的作用域是
method,也就是它们应该在方法内被调用,使用完即被销毁



































































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值