MyBatis

  • mybatis简介

关键词:持久层框架、xml配置、JDBC高级对象映射
MyBatis前身是apache的开源项目iBATIS,iBATIS是一个基于Java的持久层框架(持久:指数据能够长久的保存在某些文件或者物理设备(硬盘、磁带)中,而不是存储在内存中随着程序运行结束就丢失),iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(sDAO);MyBatis支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或者注解来配置和映射原生信息。将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

  • 特点

    • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
    • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 SQL写在xml里,便于统一管理和优化。通过SQL基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
    • 解除SQL与程序代码的耦合:通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。SQL和代码的分离,提高了可维护性。
    • 提供映射标签,支持对象与数据库的ROM字段关系映射
    • 提供对象关系映射标签,支持对象关系组建维护
    • 提供xml标签,支持编写动态SQL。
  • xml配置文件详解

1、databaseIdProvider
通过数据库别名判断使用哪个sql语句


 
     
     
     
    



2、properties 加载配置文件



 
      

3、settings 全局配置信息

 


4、typeAliases 类型别名

 
     
     
     
     

5、typeHandler 类型处理器
详解见mybatis官方文档 mybatis官方文档
凡是mybatis内置的类型处理器有的,都可以使用相对于的别名,或者不用写。使用#{value}来取值
例如:

 

  • 搭建MyBatis框架基本流程

下面以maven搭建MyBatis框架,Mapper接口开发为例来进行说明:
1、新建maven工程,使用xml进行mybatis-config配置;如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:


  org.mybatis
  mybatis
  x.x.x




    
    
          
          
                
         
          
          
              
          
    ....

    
        
            
            
            
            
                
                
                
                
            
        
    

    
        
        
    

2、在构建好数据库实体对象后,使用xml配置来进行数据库连接操作。

  • 构建Goods类,GoodsMapper接口
public class Goods {
    private int gid;
    private String gname;
    private double gprice;
    private String description;
    private int num;
    private int good_type;
    private Date create_time;
...
}
public interface GoodsMapper {
    Goods selectGoodsById();//单条查询
    List selectGoodsAll(); //多条查询
    Goods updateGoods(); //更新操作
    Goods insertGoods(); //插入操作
    Goods deleteGoods(); //删除操作
}
  • xml配置,在这里我们用resultMap来实现对查询结果集的处理,将查询结果封装到对象中;使用select来进行查询,将查询结果返回给resultMap。
    几点规范:
    • namespace与接口权限定名一致
    • id和抽象函数保持一致
    • 参数类型与返回类型保持一致
    • java类名yuxml文件名保存一致

 
     
  
     
     
     
     
   ...
 


3、mabatis流程处理

  • 从 XML 中构建 SqlSessionFactory
  • 从 SqlSessionFactory 中获取 SqlSession
  • 探究已映射的 SQL 语句
    处理过程:
    (A)根据SQL的ID查找对应的MappedStatement对象。
    (B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
    (C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
    (D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
    (E)释放连接资源。
    (4)返回处理结果将最终的处理结果返回。
  //获取配置文件
        InputStream inputstream = Resources.getResourceAsStream("mybatis-config.xml");
        //创建sqlsessionfactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputstream);
        //获取sqlsession
        SqlSession sqlsession = factory.openSession();
        //获取处理结果
        GoodsMapper mapper = sqlsession.getMapper(GoodsMapper.class);
        //单条查询
//      Goods goods = mapper.selectGoodsById();
        //多条查询
        List list = mapper.selectGoodsAll();
        for (Goods goods:list) {
            System.out.println(goods);
        }

你可能感兴趣的:(MyBatis)