栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis介绍

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis介绍

目录

mybatis

mybatis与hibernate的区别(-----------面试题!!!-------------)

用实例代码来给大家更深入的了解mybatis



mybatis

mybatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。

可以这么认为,mybatis就是一个可以用于替换DBHelper类的半自动持久层框架,因为没有学Mybatis之前,我们以前都是需要写DBHpler类的,每一次都要去创造连接、创造执行对象、创造查询结果集,还有其他一系列操作,有点麻烦,但是mybatis就可以替代了DBHpler了。(以前的DBHpler可以认为是个原始社会)

mybatis作用于dao层,使用mybatis框架我们可以快速的数据访问与数据提交,主要的操作是SQL Maps和Data Access Objects(DAO)。

 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。(在没有用到Mybatis之前我们做一个增删改查,必须要使用占位符,而且要按照占位符顺序一个一个的传参,以及结果集的检索,查询遍历都由Mybatis做了)
      MyBatis使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录(对于这段我们有个专门的称呼 ORM)。

 ORM(Object Relational Mapping):对象关系映射
 理解为:Java对象与数据库表的映射管理框架,更简单的说:在我们没有用到Mybatis之前,我们需要数据库里面的字段类型必须与java中的实体对象一一对应,不一样肯定会报错了,再这么说用了Mybatis用了后可以自动完成java对象与数据库表数据的映射关系,这是mybatis一个核心的概念!。

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory(Factory是一个工厂类,是来生成前者的,需要拿到SqlSession的会话)实例可以通过SqlSessionFactoryBuilder获得。

SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。 

    mybatis:ORM框架,持久层框架,用于控制数据的访问
    mybatis.xml(定义了mybatis的基本配置和连接数据库的配置信息)
    SqlSessionFactoryBuilder完成mybatis.xml配置文件的加载操作
    SqlSessionFactoryBuilder --> SqlSessionFactory实例
    SqlSessionFactory --> SqlSession
    SqlSession -> 数据库层面增删改查操作

以上是mybatis的文件加载流程

如何拿到SqlSessionFactory,根据SqlSessionFactoryBuilder来创建SqlSessionFactory,再从SqlSessionFactory拿到SqlSession

mybatis与hibernate的区别(-----------面试题!!!-------------)

两者均为ORM框架,都用于控制数据访问,但也有一些不同
   mybatis                              hibernate
   轻量级                               重量级
   半自动化                            全自动化
   sql                                      hql,不需要写sql语句也能完成增删改查,最开始研发出来的初衷就··是为了让我们不用写sql语句,但是在很复杂的sql语句中,hql就不行了(但也可以使用sql,但违背了hibernate的初衷)

扩展性、迁移性比较差(可以支持多种数据库但有语法差异)             无缝移植(可以支持多种数据库)

用实例代码来给大家更深入的了解mybatis

使用maven创建项目,并添加web支持

添加相关依赖
      junit 4.12
      javax.servlet-api 4.0.0
      mybatis 3.4.5
      mysql-connector-java 5.1.44

 

配置web3.0,在main/webapp/WEB-INF下面,web.xml有且只有一个根标签

新建java目录和测试目录test

引入一个jdbc.properties文件到main/resources里面

 在jdbc.properties里面第二行t272是我的数据库名,写自己数据库,

下面两行是数据库账密

介绍一下mybatis.cfg.xml文件

 需要在java目录下导入一个帮助类MybatisSessionFactoryUtils.java.

需要在pom类加入一个自己生成代码依赖


        
          org.mybatis.generator
          mybatis-generator-maven-plugin
          1.3.2
          
            
              mysql
              mysql-connector-java
              ${mysql.version}
            
          
          
            true
          
        

在resources下面添加一个generatorConfig.xml文件,用来自动生成代码




    
    

    
    

    
    
        
        
            
             
        

        
        

        
        
            
            
        

        
        
        
        
            
            
            
            
            
            
            
            
        

        
        
            
            
        

        
        
        
        
        
            
            
        

        
        
        
        
        
        
               
               
            
            
            
            


       

    

自动生成代码后会出现这些类,请注意生成前与生成后的区别

 

 点击Bookmapper.java的小红鸟就会跳转到Bookmapper.xml

 跳转后

 由于我的数据库的id字段是自增的所以这里的insert新增方法可以吧id删掉,包括values的id字段;

在BookMapper.java已经给我们生成了很多方法,删除修改新增等等,现在我们加一个查询方法

 新增方法的话会报红线,这时候按Alt+Enter回车键就可以跳出方法点击红色的跳转到BookMapper.xml并自动给我们生成一部分代码,剩下的只需要自己写sql语句

 在中间加入

   select   from t_book

refid="Base_Column_List/"其实就是自动给你生成的sql字段名的别名

book_id, book_name, book_name_pinyin, book_price, book_type, book_image

在上面给你生成了


    book_id, book_name, book_name_pinyin, book_price, book_type, book_image
  

在BookMapper.java里写方法名系统是可以识别一般的方法名的,会谈提示框,很智能,还有BookMapper.java里面查询的方法名必须与BookMapper.java里自动生成的查询方法名保持一致,不然会报错

在mybatis目录下增加一个service层,在service里面添加一个IBookServer.java用来定义接口,将BookMapper.java里面的方法复制过去,现在我们这边不需要太多,只加了一个查询方法和新增方法。

public interface IBookServer {
    public int insert(Book record);
    public List queryBookAll();
}

还要创建接口所对应的实现类

光标移到IBookServer上面,Alt加Enter回车键会跳出提示框,点击第四个Implement interface

 跳出

爆红没关系, 按照以上修改即可

跳到

 选择这两个方法点击ok

 剩下的工作就是用Server调用mapper层的接口

怎么调?

Alt加Inser得到提示框选择Getter and Setter在点击BookMapper的方法ok

 得到

在下面的方法上写

 ok,以上的Server层代码完毕

现在来做测试

光标移到BookServerImpl上Alt加回车键得到提示框

 点击Create Test 创建测试类

根据下图修改

 得到

 该测试类在test目录下

继续写

package com.zking.mabatis.server.imp;
import com.zking.mabatis.mapper.BookMapper;
import com.zking.mabatis.model.Book;
import com.zking.mabatis.server.IBookServer;
import com.zking.mabatis.util.MybatisSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.List;

public class BookServerImplTest {
    private IBookServer bookServer;
    private Book book=null;
    private SqlSession sqlSession;

    @Before
    public void setUp() throws Exception {
        //初始化book 目的:setUp在每一个方法前执行一次 down在每一个方法结束前执行一次
       book=new Book();
    //打开会话
       sqlSession = MybatisSessionFactoryUtils.openSession();
       //拿到mapper层的接口
        BookMapper mapper = sqlSession.getMapper(BookMapper.class);

        BookServerImpl bookServerImpl=new BookServerImpl();
        //给实现类赋值
        bookServerImpl.setBookMapper(mapper);
//    将实现类给接口接收使用接口来接收代理对象
        bookServer=bookServerImpl;

    }

    @After
    public void tearDown() throws Exception {
        //提交
        sqlSession.commit();
        //关闭链接
        MybatisSessionFactoryUtils.closeSession();
    }

    @Test
    public void insert() {
        book.setBookName("三毛流浪记");
        book.setBookPrice(100f);
        book.setBookType("故事");
        bookServer.insert(book);
    }

    @Test
    public void queryBookAll() {
        List boos=bookServer.queryBookAll();
       boos.forEach(System.out::println);
    }
}

点击代方法左边的播放按钮单独执行方法

在mybatis.cfg.xml加一个驼峰命名




    
    

    
        
//驼峰命名 可以自动转换
        
    

    
    

        
    


    
    
        
            
            

            
            
            
            
            
                
                
                
                
            
        
    

    
        
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826830.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号