MyBatis入门配置及CURD实现

目录

一、MyBatis简介

1. 什么是 MyBatis ? 

2. MyBatis的特性

3. 什么是持久层框架?

二、MyBatis环境配置

2.1 创建maven工程

2.2 导入相关pom依赖

2.3 导入jdbc配置文件

2.4 Mybatis相关插件安装

3.5 Mybatis-cfg.xml 核心配置

2.6 引入Log4j2日志文件

2.7 generatorConfig.xml 配置代码生成器

三、MyBatis实现增删改查

3.1 MyBatis自动生成代码

3.2 解读生成的配置文件和方法

3.3 编写业务逻辑层实现接口

3.4 编写工厂类

3.5 编写测试类测试


一、MyBatis简介

1. 什么是 MyBatis ? 

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

2. MyBatis的特性

  1. 简单易用:MyBatis使用简单的XML或注解配置来映射Java对象和SQL语句,使得开发人员可以轻松地编写和维护数据库访问代码。

  2. 灵活性:MyBatis允许开发人员编写自定义的SQL语句,从而可以灵活地处理复杂的数据库操作。它还支持动态SQL,可以根据不同的条件生成不同的SQL语句。

  3. 高性能:MyBatis使用了一些优化技术,如预编译SQL语句、缓存等,以提高数据库访问的性能。

  4. 易于集成:MyBatis可以与各种流行的Java框架(如Spring)无缝集成,使得开发人员可以更方便地使用MyBatis进行数据库操作。

        MyBatis的主要作用是简化Java应用程序与关系型数据库之间的交互。通过使用MyBatis,开发人员可以通过简单的配置和编写SQL语句,实现对数据库的增删改查操作。同时,MyBatis还提供了一些高级特性,如分页查询、批量操作等,使得数据库访问更加灵活和高效。总之,MyBatis是一个功能强大、易于使用的持久层框架,被广泛应用于Java开发中。

3. 什么是持久层框架?

        持久层框架是一种软件框架,用于简化应用程序与数据库之间的交互和数据持久化操作。在软件开发中,应用程序通常需要与数据库进行交互,包括数据的读取、写入、更新和删除等操作。持久层框架的主要目的是提供一种简单、高效、可维护的方式来处理这些数据库操作。

        传统的数据库操作方式通常需要开发人员手动编写SQL语句,并处理数据库连接、事务管理等细节。这种方式存在一些问题,如代码冗余、易出错、难以维护等。持久层框架的出现解决了这些问题,它提供了一种抽象层,将数据库操作封装起来,使开发人员可以通过简单的API调用来进行数据库操作,而无需关注底层的数据库细节。

持久层框架通常提供以下功能:

  1. 对象关系映射(ORM):持久层框架可以将数据库表和Java对象之间建立映射关系,使得开发人员可以通过操作Java对象来实现对数据库的操作,而无需直接编写SQL语句。

  2. 数据库连接管理:持久层框架负责管理数据库连接的创建、释放和连接池的管理,以提高数据库访问的性能和效率。

  3. 事务管理:持久层框架可以提供事务管理的功能,确保数据库操作的一致性和完整性。

  4. 缓存管理:持久层框架可以提供缓存机制,将经常访问的数据缓存在内存中,以提高数据的读取性能。

        持久层框架的使用可以简化数据库操作的代码量,提高开发效率,降低开发难度,并且可以提供一些高级特性,如懒加载、分页查询、批量操作等,使得数据库操作更加灵活和高效。常见的持久层框架有Hibernate、MyBatis等。

二、MyBatis环境配置

2.1 创建maven工程

我使用的是idea2023版,其他版本创建Maven方式会有所不同,仅供参考:

MyBatis入门配置及CURD实现_第1张图片

2.2 导入相关pom依赖


  4.0.0
  org.example
  mybatis_01
  war
  1.0-SNAPSHOT
  mybatis_01 Maven Webapp
  http://maven.apache.org

  
    1.8
    1.8
  

  
    
    
      junit
      junit
      4.12
      test
    

    
    
      javax.servlet
      javax.servlet-api
      4.0.0
      provided
    

    
    
      org.mybatis
      mybatis
      3.4.5
    

    
    
      mysql
      mysql-connector-java
      5.1.44
    

    
    
    
      org.apache.logging.log4j
      log4j-core
      2.9.1
    
    
      org.apache.logging.log4j
      log4j-api
      2.9.1
    
    
    
      org.apache.logging.log4j
      log4j-web
      2.9.1
    
  

  
    mybatis_01
    
      
      
        src/main/java
        
          **/*.xml
        
      
      
      
        src/main/resources
        
          jdbc.properties
          *.xml
        
      
    
    
      
        org.apache.maven.plugins
        maven-compiler-plugin
        3.7.0
        
          1.8
          1.8
          UTF-8
        
      
      
        org.mybatis.generator
        mybatis-generator-maven-plugin
        1.3.2
        
          
          
            mysql
            mysql-connector-java
            5.1.44
          
        
        
          true
        
      
    

  

2.3 导入jdbc配置文件

我用的mysql8.0版本,需根据自身配置需求更改配置文件内容。

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

2.4 Mybatis相关插件安装

Mybatis plugin插件主要功能有:

  1. 提供Mapper接口与配置文件中对应SQL的导航

  2. 编辑XML文件时自动补全

  3. 根据Mapper接口, 使用快捷键生成xml文件及SQL标签

  4. ResultMap中的property支持自动补全,支持级联(属性A.属性B.属性C)

  5. 快捷键生成@Param注解

  6. XML中编辑SQL时, 括号自动补全

  7. XML中编辑SQL时, 支持参数自动补全(基于@Param注解识别参数)

  8. 自动检查Mapper XML文件中ID冲突

  9. 自动检查Mapper XML文件中错误的属性值

  10. 支持Find Usage

  11. 支持重构从命名

  12. 支持别名

  13. 自动生成ResultMap属性

  14. 快捷键:   Option + Enter(Mac) | Alt + Enter(Windows)

MyBatis入门配置及CURD实现_第2张图片

3.5 Mybatis-cfg.xml 核心配置

MyBatis 的配置文件包含了MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

  • configuration(配置)
  • properties(属性)
  • settings(设置)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境配置)
    • environment(环境变量)
      • transactionManager(事务管理器)
      • dataSource(数据源)
  • databaseIdProvider(数据库厂商标识)
  • mappers(映射器)



    
    

    
        
    

    
    
        
    


    
    
        
            
            

            
            
            
            
            
                
                
                
                
            
        
    

    
        
    

2.6 引入Log4j2日志文件

  • Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等
  • log4j可以控制每一条日志的输出格式
  • log4j可以通过一个配置文来灵活地进行配置,而不需要修改应用的代码。




	
		
		/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
	

	
		
		
			
			
			
			
			
		

		
		
		
			
		
		
		
			
			
			
			
				
				
				
				
				
				
			
		

		
			
			
			
				
				
			
			
			
		

		
			
			
			
				
				
				
			
		

	

	
	
		
		
		

		
		
		
		
		
		


		
		
			
			
			
			
		

	

2.7 generatorConfig.xml 配置代码生成器





    
    

    
    

    
    
        
        
            
             
        

        
        

        
        
            
            
        

        
        
        
        
            
            
            
            
            
            
            
            
        

        
        
            
            
        

        
        
        
        
        
            
            
        

        
        
        
        
        
        
        
        
        
        
        
        
        

        

注意:

1.修改本地路径的jdbc驱动jar包位置 


D:\\Tools\\MavenHouse\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>

2. 修改指定javaBean生成的位置

com.ycxw.model"
                    targetProject="src/main/java">
        ......

3. 修改指定sql映射文件生成的位置

com.ycxw.mapper"
                 targetProject="src/main/java">
        ......

 4. 修改指定生成mapper接口文件位置

com.ycxw.mapper"
                     targetProject="src/main/java" type="XMLMAPPER">
        ......

5. 修改需要引用的数据库表名

t_mvc_Book" domainObjectName="Book"
       enableCountByExample="false" enableDeleteByExample="false"
       enableSelectByExample="false" enableUpdateByExample="false">
        ......

三、MyBatis实现增删改查

3.1 MyBatis自动生成代码

1. 找到配置的MyBatis插件启动mybatis-general

MyBatis入门配置及CURD实现_第3张图片

2. 然后就会生成实体和增删改查接口和实现的配置文夹:

MyBatis入门配置及CURD实现_第4张图片

3.2 解读生成的配置文件和方法

  • ​ id:对应的接口中的方法名
  • ​ resultType: sql语句执行的返回值类型
  • ​ parameterType:参数类型

3.3 编写业务逻辑层实现接口

1. 编写BookBiz接口类

package com.ycxw.biz;

import com.ycxw.model.Book;

/**
 * @author 云村小威
 * @site blog.csdn.net/Justw320
 * @create 2023-08-20 17:52
 */
public interface BookBiz {
    int deleteByPrimaryKey(Integer bid);

    int insert(Book record);

    int insertSelective(Book record);

    Book selectByPrimaryKey(Integer bid);

    int updateByPrimaryKeySelective(Book record);

    int updateByPrimaryKey(Book record);
}

2. 编写BookBizImpl接口实现类

package com.ycxw.biz.impl;

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

/**
 * @author 云村小威
 * @site blog.csdn.net/Justw320
 * @create 2023-08-20 17:52
 */
public class BookBizImpl implements BookBiz {
    //引入生成的接口
    private BookMapper bookMapper;

    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 int insert(Book record) {
        return bookMapper.insert(record);
    }

    @Override
    public int insertSelective(Book record) {
        return bookMapper.insertSelective(record);
    }

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

    @Override
    public int updateByPrimaryKeySelective(Book record) {
        return bookMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public int updateByPrimaryKey(Book record) {
        return bookMapper.updateByPrimaryKey(record);
    }
}

3.4 编写工厂类

        该类主要为了实现了一个简单的MyBatis的SqlSession管理工具类,通过openSession()方法可以获取到当前线程的SqlSession对象,方便进行数据库操作。

package com.ycxw.utils;

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

/**
 * 工厂类
 * @author 云村小威
 * @site blog.csdn.net/Justw320
 * @create 2023-08-20 17:58
 */
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());
    }

}

3.5 编写测试类测试

package com.ycxw.demo;

import com.ycxw.biz.BookBiz;
import com.ycxw.biz.impl.BookBizImpl;
import com.ycxw.mapper.BookMapper;
import com.ycxw.model.Book;
import com.ycxw.utils.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * @author 云村小威
 * @site blog.csdn.net/Justw320
 * @create 2023-08-20 18:05
 */
public class CURDTest {
    private BookBiz bookBiz;
    private SqlSession sqlSession;

    @Before
    public void before(){
        System.out.println("执行测试方法之前会执行的初始化代码块方法");
        //获取一个数据库会话对象,并将其赋值给sqlSession变量
        this.sqlSession = SessionUtil.openSession();
        //实例化业务逻辑层
        BookBizImpl book = new BookBizImpl();
        //获取接口实例
        BookMapper mapper = this.sqlSession.getMapper(BookMapper.class);
        book.setBookMapper(mapper);
        //最后赋值给bookBiz接口,便于对数据库进行增删改查操作
        this.bookBiz = book;
    }
    @After
    public void after(){
        System.out.println("执行测试方法之后的后执行的方法");
        //提交事务
        this.sqlSession.commit();
    }

    @Test
    public void text1(){
        System.out.println("测试查询方法方法..");
        Book book = bookBiz.selectByPrimaryKey(25);
        System.out.println(book);
    }
    @Test
    public void text2(){
        System.out.println("测试新增方法");
        int insert = bookBiz.insert(new Book(1,"Mybatis宝典",9.9f));
        System.out.println("所影响的行数"+insert);
    }
}

运行测试: 

 数据库验证:

MyBatis入门配置及CURD实现_第5张图片

你可能感兴趣的:(MyBatis,mybatis,java,开发语言,maven,数据库,intellij-idea)