mybatis入门

目录

面试题:SQLSession的作用

1.Mybatis简介

1.1.什么是Mybatis

1.2.优缺点

1.3.使用场景

2.Mybatis快速开始

2.1.创建Maven项目

2.4.运行测试工具类

3.Mybatis-generator插件使用

3.1.配置mybatis-generator插件

三、Mybatis增删改查案例


前言:今天我们来讲解一个有名的框架Mybatis。学了它,我们可以在开发中简化我们的代码。

面试题:SQLSession的作用

sqlsession的作用:

1.sqlsession可以拿到mapper对象

2.作为缓存使用,一级缓存,默认会开启的缓存、

3.出于对性能的考虑,会采用二级缓存,二级缓存需要手动开启

1.Mybatis简介

MyBatis 是一个开源、轻量级的数据持久化框架(ORM,全称:Object Relational Mapping,对象与关系型数据库之间的映射管理框架),是 JDBC 和 Hibernate 的替代方案。MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身。

1.1.什么是Mybatis

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

MyBatis 支持定制化 SQL、存储过程以及高级映射,可以在实体类和 SQL 语句之间建立映射关系,是一种半自动化的 ORM 实现。其封装性低于 Hibernate,但性能优秀、小巧、简单易学、应用广泛。

ORM(Object Relational Mapping,对象关系映射)是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过 JavaBean 对象去操作数据库表中的数据。

MyBatis 前身为 IBatis,2002 年由 Clinton Begin 发布。2010 年从 Apache 迁移到 Google,并改名为MyBatis,2013 年又迁移到了 Github。

MyBatis 的主要思想是将程序中的大量 SQL 语句剥离出来,使用 XML 文件或注解的方式实现 SQL 的灵活配置,将 SQL 语句与程序代码分离,在不修改程序代码的情况下,直接在配置文件中修改 SQL 语句。

MyBatis 与其它持久性框架最大的不同是,MyBatis 强调使用 SQL,而其它框架(例如 Hibernate)通常使用自定义查询语言,即 HQL(Hibernate查询语言)或 EJB QL(Enterprise JavaBeans查询语言)。

MyBatis 官方文档:

mybatis – MyBatis 3 | 简介icon-default.png?t=N6B9https://mybatis.org/mybatis-3/zh/

1.2.优缺点

优点

  • MyBatis 是免费且开源的。

  • 与 JDBC 相比,减少了 50% 以上的代码量。

  • MyBatis 是最简单的持久化框架,小巧并且简单易学。

  • MyBatis 相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL 写在 XML 中,和程序逻辑代码分离,降低耦合度,便于同一管理和优化,提高了代码的可重用性。

  • 提供 XML 标签,支持编写动态 SQL 语句。

  • 提供映射标签,支持对象与数据库的 ORM 字段关系映射。

  • 支持存储过程。MyBatis 以存储过程的形式封装 SQL,可以将业务逻辑保留在数据库之外,增强应用程序的可移植性、更易于部署和测试。

缺点

  • 编写 SQL 语句工作量较大,对开发人员编写 SQL 语句的功底有一定要求。

  • SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

1.3.使用场景

MyBatis 专注于 SQL 本身,是一个足够灵活的 DAO 层解决方案。适用于性能要求高,且需求变化较多的项目,如互联网项目。

拓展

Mybatis-Plus(简称 MP)是 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,支持 Mybatis 所有原生的特性,为简化开发、提高效率而生。有兴趣的小伙伴可以参考 MyBatis-Plus 官网。

2.Mybatis快速开始

2.1.创建Maven项目

**配置pom.xml添加junit+servlet依赖支持**

 


    1.8
    1.8
    
    4.12
    
    4.0.0



    
    
        junit
        junit
        ${junit.version}
        test
    

    
    
        javax.servlet
        javax.servlet-api
        ${servlet.version}
        provided
    

mybatis入门_第1张图片

**配置jdk1.8+web3.0**

**1)修改pom.xml配置jdk1.8**


	
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.7.0
            
                ${maven.compiler.source}
                ${maven.compiler.target}
                UTF-8
            
        
	

    **2)修改web.xml配置web3.0**





mybatis入门_第2张图片

 

2.2.添加相关依赖



    1.8
    1.8
    
    4.12
    
    4.0.0
    
    3.4.5
    
    5.1.44
    
    2.9.1



    
    
        junit
        junit
        ${junit.version}
        test
    

    
    
        javax.servlet
        javax.servlet-api
        ${servlet.version}
        provided
    

    
    
        org.mybatis
        mybatis
        ${mybatis.version}
    

    
    
        mysql
        mysql-connector-java
        ${mysql.version}
    

    
    
    
    
    
        org.apache.logging.log4j
        log4j-core
        ${log4j2.version}
    
    
        org.apache.logging.log4j
        log4j-api
        ${log4j2.version}
    
    
    
        org.apache.logging.log4j
        log4j-web
        ${log4j2.version}
    

  • jdbc.properties:用于定义数据库连接配置文件

 

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8&useSSL=false
jdbc.username=root
jdbc.password=123456

注意:请修改数据库名、数据库账号及密码。

2.4.运行测试工具类

创建MybatisSessionFactoryUtils工具类

package com.lya.utils;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

/**
 * @author 程序猿-小李哥
 * @site www.xiaolige.com
 * @company 猪八戒有限集团
 * @create 2023-08-19-14:14
 */
public class MybatisSessionFactoryUtils {

    public static SqlSessionFactory sqlSessionFactory;

    private static ThreadLocal threadLocal = new ThreadLocal();

    static {
        try {
            InputStream is = MybatisSessionFactoryUtils.class
                    .getResourceAsStream("/mybatis.cfg.xml");
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private MybatisSessionFactoryUtils() {
    }

    public static SqlSession openSession() {
        SqlSession sqlSession = threadLocal.get();
        if (null == sqlSession) {
            sqlSession = sqlSessionFactory.openSession();
            threadLocal.set(sqlSession);
        }
        return sqlSession;
    }

    public static void closeSession() {
        SqlSession sqlSession = threadLocal.get();
        if (null != sqlSession) {
            threadLocal.set(null);
            sqlSession.close();
        }
    }

    public static void main(String[] args) {
        SqlSession sqlSession = MybatisSessionFactoryUtils.openSession();
        System.out.println(sqlSession);
        System.out.println(sqlSession.getConnection());
        MybatisSessionFactoryUtils.closeSession();
    }
}

3.Mybatis-generator插件使用

3.1.配置mybatis-generator插件

因为IntelliJ中没有mybatis-generato对应的插件,所以需要在MAVEN中使用 mybatis-generator-maven-plugin插件来完成功能。修改pom.xml,添加mybatis-generator-maven-plugin插件相关依赖:

 


    org.mybatis.generator
    mybatis-generator-maven-plugin
    1.3.2
    
        
        
            mysql
            mysql-connector-java
            5.1.44
        
    
    
    	true
    

安装插件

mybatis入门_第3张图片

三、Mybatis增删改查案例


1、SessionUtil.java

package com.lya.util;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SessionUtil {
    private static SqlSessionFactory sessionFactory;
    private static ThreadLocal threadLocal = new ThreadLocal();
    static {
        sessionFactory = new SqlSessionFactoryBuilder().build(SessionUtil.class.getResourceAsStream("/mybatis.cfg.xml"));
    }

    public static SqlSession openSession() {
        SqlSession session = threadLocal.get();
        if (null == session) {
            session = sessionFactory.openSession();
            threadLocal.set(session);
        }
        return session;
    }

    public static void main(String[] args) {
        SqlSession session = openSession();
        System.out.println(session.getConnection());
        session.close();
//        System.out.println(session.getConnection());
    }

}



2、BookBiz

package com.lya.biz;

import com.lya.model.Book;

public interface BookBiz {
    int deleteByPrimaryKey(Integer bid);

    Book selectByPrimaryKey(Integer bid);
}

3、BookBizImpl

package com.lya.biz.impl;

import com.lya.biz.BookBiz;
import com.lya.mapper.BookMapper;
import com.lya.model.Book;

public class BookBizImpl implements BookBiz {
    private BookMapper bookMapper;

//    alt+insert 快速提供set/get/tostring/构造方法
//    alt+enter 快速构建实现类,填充代码的前半部分 ctrl+1
    public BookMapper getBookMapper() {
        return bookMapper;
    }

    public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
    }

    @Override
    public int deleteByPrimaryKey(Integer bid) {
        return bookMapper.deleteByPrimaryKey(bid);
    }

    @Override
    public Book selectByPrimaryKey(Integer bid) {
        return bookMapper.selectByPrimaryKey(bid);
    }
}


4、log4j2.xml





	
		
		/root/workspace/lucenedemo/logs
		/root/workspace/lucenedemo/logs/error
		/root/workspace/lucenedemo/logs/warn
		%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%n
	

	
		
		
			
			
			
			
			
		

		
		
		
			
		
		
		
			
			
			
			
				
				
				
				
				
				
			
		

		
			
			
			
				
				
			
			
			
		

		
			
			
			
				
				
				
			
		

	

	
	
		
		
		

		
		
		
		
		
		


		
		
			
			
			
			
		

	

你可能感兴趣的:(java,tomcat,maven,spring,cloud,jvm)