mybatis 笔记

1. mybatis安装

maven路径


  org.mybatis
  mybatis
  x.x.x

2. mybatis基础

SqlSessionFactory配置

mybatis应用的核心为一个SqlSessionFactory实例。而SqlSessionFactory又是由SqlSessionFactoryBuilder对象依据 mybatis-config.xml的配置生成的。

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

mybatis-config.xml





  
    
      
      
        
        
        
        
      
    
  
  
    
  

当然你也可以用java代码来替代xml文件实现配置,在这就不赘述了,详见官方文档

Mapper配置

在这之后你就可以调用SqlSession.openSession()方法来获得SqlSession对象来操作数据库。鉴于mybatis框架最核心的作用,分离SQL语句和java代码。你还需要一个实际的Mapper接口的和一个对应的mapper.xml文件来实现一个dao对象。

public interface DemoMapper() {
  List getDemo(Integer id);
}




  

上述两段代码就是一组最基本的映射。注意不要忘记在mybatis-config.xml中使用标签来进行mapper注册。有了上面的代码之后就可以使用SqlSession实例对数据库进行操作了。
需要注意的时SqlSesion时线程不安全的所以在每个方法结束前都要对它进行关闭。所以推荐使用下述代码来确保其标准关闭。

try(SqlSession sesssion = SqlSessionFactory.openSession()) {
   DemoMapper mapper = session.getMapper(DemoMapper.Class);
   //TODO
}

生命周期问题

  • SqlSessionFactoryBuilder

这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。 因此SqlSessionFactoryBuilder实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder来创建多个SqlSessionFactory实例,但最好还是不要一直保留着它,以保证所有的 XML 解析资源可以被释放给更重要的事情

  • SqlSessionFactory

SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。使用SqlSessionFactory的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏习惯”。因此 SqlSessionFactory 的最佳作用域是应用作用域。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

  • SqlSession

每个线程都应该有它自己的 SqlSession 实例。SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。 也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中,比如 Servlet 框架中的 HttpSession。 如果你现在正在使用一种 Web 框架,考虑将 SqlSession 放在一个和 HTTP 请求相似的作用域中。 换句话说,每次收到 HTTP 请求,就可以打开一个 SqlSession,返回一个响应后,就关闭它。这个关闭操作很重要,为了确保每次都能执行关闭操作,应该把这个关闭操作放到 finally 块中。

3. mybatis配置

注意:所有的xml配置都有固定的先后顺序

属性(properties)

这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。例如:


  
  


需要注意如果config.perproties中的属性与子标签中的属性同名将会优先使用config.perproties中的值
设置好的值可以在整个配置文件中以${name}的方式进行取用。详见官方文档

设置(settings)

设置标签是MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
常见设置有

设置名 作用
cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。
lazyLoadingEnabledd 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。
mapUnderscoreToCamelCase 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。

详见官方文档

类型别名(typeAliases)

类型别名用于java类的简写有三种定义方式

  1. 单独指定

  
  

  1. 报名扫描方式

  

这种方式将会把类型的小写作为该类别名进行配置。比如domain.blog.Author在此方式下的别名为author
3.使用注解
注意该方式要以第二种方式为基础!

@Alias("author")
public class Author {
    ...
}

  1. java类的内建别名
    java基本类型的别名为_classname_int,其他类的别名为其类型小写如string

环境(environments)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。每个数据库对应一个 SqlSessionFactory 实例


  
    
      
    
    
      
      
      
      
    
      
    
      
    
    
      
      
      
      
    
  


可以通过修改default属性值来修改默认环境,也可以在创建SqlSessionFactory通过参数指定

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputstream, environment);

数据源(dataSource)

dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

  • 大多数 MyBatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。
    有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]")

映射器(mappers)

即对mapper.xml资源的定位,有四种方式。

1. 使用相对于类路径的资源引用

相对比较稳妥,适用于mapper数量少的时候



  
  
  

2. 使用映射器接口实现类的完全限定类名

  • 注意一定要将mapper.xml文件和接口放在同一个包下!
  • 接口名要与.xml文件名要一一对应保持一致!


  
  
  

3. 将包内的映射器接口实现全部注册为映射器

适用于大量mapper的情况,同样要将mapper.xml文件和接口放在同一个包下!



  

4. 使用完全限定资源定位符(URL)

不推荐使用



  
  
  


官方文档地址
mybatis – MyBatis 3

你可能感兴趣的:(mybatis 笔记)