MyBatis 1.入门

开始使用

安装如果你使用的是Maven那么只需要引入一个jar包即可
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>
通过XML创建SqlSessionFactory

这个类可以通过SqlSessionFactoryBuilder获取

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

这个xml配置文件,设置了MyBatis的核心文件:

<?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"/>
    // mapper里面映射的可能是xml文件或者注释过的包含SQL和mapping定义的接口类
  </mappers>
</configuration>
通过非XML创建SqlSessionFactory
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
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);

这种提交方式有一些限制 , 一些复杂的映射关系还是会使用到XML文件 , 但是框架会帮我们自动完成这部分的XML文件的查找.

通过SqlSessionFactory或者SqlSession

SqlSession基本上囊括了所有的数据库操作命令. 可以通过以下方式直接和数据库交互了(这是旧版本的):

SqlSession session = sqlSessionFactory.openSession();
try {
  Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
  session.close();
}

以下是一个新版本的(通过一个定义好的接口类BolgMapper.class来描述输入参数和返回值):

SqlSession session = sqlSessionFactory.openSession();
try {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  Blog blog = mapper.selectBlog(101);
} finally {
  session.close();
}
BlogMapper.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" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

namespace的值就是直接映射到一个具体的类. 但是上一节中涉及到两种写法 . 第二种写法的优势是避免的字符串的操作 ,并且对IDE是容易检查的或者说是友好的.
注意:

  • Namespace是必须的.
  • Name Resolution: 为了减少输入 , MyBatis定义了一下name检索的简单规则(覆盖到了statement, result map , caches)
    • 完整的全称类名如果检索到了是直接使用的(“com.mypackage.MyMapper.selectAllThings”)
    • 简写的名称可以用来引用全局唯一的入口. 如果有重复就会报错(“selectAllThings”)
  • 还有一个小技巧被映射的SQL语句不一定要在XML中定义. 也可以使用Java的注解来定义SQL
package org.mybatis.example;
public interface BlogMapper {
  @Select("SELECT * FROM blog WHERE id = #{id}")
  Blog selectBlog(int id);
}
域(scope)和生命周期

注意:
依赖注入框架中,能够创建线程安全的事务的SqlSession和mapper,所以可以任意注入到自己使用的Bean中. 可以不考虑生命周期的问题. 可以参考MyBatis-Spring来了解依赖注入框架中的MyBatis.

SqlSessionFactoryBuilder

最佳的使用范围是”方法”级别.可以通过Builder创建很多个SqlSessionFactory,但是不建议这样做.

SqlSessionFactory

一旦被创建了 , 应该和整个应用一同存在,即”应用”级别. 介乎没有情况需要去recreate它. 最简单的实现方法就是实现单例模式.

SqlSession

每个线程都应该拥有自己的SqlSession. 最好是”方法”级别的. 不要在任何静态域或者类的实例里面维护一个SqlSession的引用. 关闭SQLSesson非常重要. 要保证在final代码块中SqlSession被关闭了.以下是标准代码块

SqlSession session = sqlSessionFactory.openSession();
try {
  // do work
} finally {
  session.close();
}
Mapper实例

应该<= SqlSession, 因为它是从SqlSession请求出来的.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值