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

MyBatis第一天的笔记

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

MyBatis第一天的笔记

MyBatis第一天
  • MyBatis第一天
  • 1. 简介
    • 1.1 什么是 MyBatis
    • 1.2 MyBatis发展历史
    • 1.3 MyBatis的特点
    • 1.4 如何获取
  • 2. 入门
    • 2.1 环境准备
      • 2.1.1 准备一张表
      • 2.2 创建一个工程
      • 2.3 添加依赖
    • 2.2 编写实体类
    • 2.3 编写MyBatis全局配置文件
    • 2.4 编写Dao接口类
    • 2.5 编写MyBatis映射文件
    • 2.6 编写测试
  • 3. 源码分析
    • 3.1 SqlSessionFactory
    • 3.2 SqlSession
  • 4. 实现CRUD
    • 4.1 在接口中添加方法
    • 4.2 修改映射文件:
    • 4.3 编写测试
      • 4.3.1 插入
      • 4.3.2 更新
      • 4.3.3 根据ID查询
      • 4.3.4 多条件查询
      • 4.3.5 删除
  • 5. 配置文件
    • 5.1 properties
    • 5.2 settings
    • 5.3 typeAliases
      • 5.3.1 typeAlias
      • 5.3.2 package
      • 5.3.3 @Alias
    • 5.4 typeHandlers
      • 5.4.1 自定义类型转换器
      • 5.4.2 配置自定义类型转换器
    • 5.5 environments
      • 5.5.1 transactionManager
      • 5.5.2 dataSource
    • 5.6 databaseIdProvider
      • 5.6.1 配置
      • 5.6.2 使用
    • 5.7 mappers
      • 5.7.1 逐个注册
      • 5.7.2 接口名注册
      • 5.7.3 基于注解配置
      • 5.7.4 批量注册

MyBatis第一天 1. 简介

MyBatis的官网是:https://mybatis.org/mybatis-3/zh/index.html

目前 MyBatis的版本为 3.5.9

1.1 什么是 MyBatis

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

简单的说:MyBatis简化了我们对 JDBC 的操作。

1.2 MyBatis发展历史

MyBatis源自于 Apache 的一个开源项目 iBatis,2010年6月时这个项目由 Apache Software Foundation 迁移到了 Google Code,这些开发团队也就跟着迁移到了 Google Code 旗下。iBatis 就在 3.x 时正式更名为 MyBatis,并且把代码托管到了 GitHub。

iBatis 这名称来源于 “internet” 和 “abatis” 的组合,是一个基于 Java 的特久层框架。

1.3 MyBatis的特点

1.MyBatis是一个半自动化的持久层框架

2.开发人员可以自己编写SQL语句来实现优化

3.在MyBatis中,SQL和Java代码是分开,边界清晰

1.4 如何获取

在浏览器地址栏中输入MyBatis 的官网地址(https://github.com/mybaits/mybatis-3/releases),然后就可以下载。

或者使用 Maven 的坐标来进行项目的依赖添加。

2. 入门 2.1 环境准备 2.1.1 准备一张表
create database if not exists mydb;
use mydb;
create table t_department
(
    did         int auto_increment
        primary key,
    dname       varchar(100) not null,
    description varchar(200) null,
    manager_id  int          null
);

2.2 创建一个工程

在 IDEA 中,我们还在 JavaWeb 这个空工程下创建的 mybatis-one 模块。

2.3 添加依赖

在项目的 pom.xml 文件中添加如下依赖。

        
        
            org.mybatis
            mybatis
            3.5.9
        
        
        
            mysql
            mysql-connector-java
            5.1.49
        

另外还可以把 lombok 添加到 pom.xml 文件中

			
        
            org.projectlombok
            lombok
            1.18.22
            provided
        

还可以添加一个日志依赖到项目中,如 logback

        
        
            ch.qos.logback
            logback-classic
            1.2.10
        

还需要在项目的资源目录下创建 logback 的配置文件。

logback.xml



    
    
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %-5level %logger{0} %msg%n
            UTF-8
        
    
    
    
        
    
    
        
    
    
    
        
    

完整内容:



    
    
    
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %-5level %logger{0} %msg%n
            UTF-8
        
    
    
    
        ${LOG_FILE_PATH}/mybatis.log
        
        
            INFO
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %-5level %logger{0} %msg%n
            UTF-8
        
        
            
            mybatis.%d{yyyy-MM-dd}.log
            30
            
                100MB
            
        
    
    
    
        
    
    
        
    
    
    
        
        
    

2.2 编写实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class Department {
    private Integer did;
    private String dname;
    private String description;
}
2.3 编写MyBatis全局配置文件

在项目的资源目录(resources)中创建 mybatis-config.xml 文件





    
    
        
        
            
            
            
            
                
                
                
                
            
        
    
    

2.4 编写Dao接口类
package com.xianopeng.mapper;

import com.xianopeng.entity.Department;

import java.util.List;


public interface DepartmentMapper {
    // 查询全部
    List selectDepartments();
}

在 MyBatis 中,一般定义 Dao 层为 mapper 层,而 XxxDao 定义为 XxxMapper。它们都是表示 Dao 层,只是命名不同而已。

2.5 编写MyBatis映射文件

在 MyBatis 中,通过映射文件来实现在 Jdbc 中的接口实现类的功能。

我们还是把这个文件放到资源目录下。文件的结构还是从官网上去取。一般定义为接口的名称.xml。




    
        select * from t_department
    
    
    
        select * from t_department where did=#{did} and dname=#{dname}
    


4.3 编写测试

我们使用 junit 来编写测试,因此我们要把 Junit 的依赖添加到项目中。


    junit
    junit
    4.13.2
    test

编写测试:

4.3.1 插入
package com.xianopeng.test;

import com.xianopeng.entity.Department;
import com.xianopeng.mapper.DepartmentMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;


public class MyBatisCRUDTest {
    private SqlSession sqlSession;

    // 插入
    @Test
    public void testInsert() {
        DepartmentMapper mapper = sqlSession.getMapper(DepartmentMapper.class);
        mapper.insert(new Department().setDname("市场部").setDescription("扩展业务的部门"));
        // 提交事务
        sqlSession.commit();
    }

    @Before
    public void init() {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            sqlSession = sqlSessionFactory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @After
    public void destroy() {
        sqlSession.close();
    }
}
4.3.2 更新
    // 更新
    @Test
    public void testUpdate() {
        try {
            DepartmentMapper mapper = sqlSession.getMapper(DepartmentMapper.class);
            mapper.update(new Department().setDid(5).setDname("市场部").setDescription("给公司创收的部门"));
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
        }
    }
4.3.3 根据ID查询
    @Test
    public void testSelect() {
        DepartmentMapper mapper = sqlSession.getMapper(DepartmentMapper.class);
        Department department = mapper.select(5);
        System.out.println(department);
    }
4.3.4 多条件查询
    // 多条件查询
    @Test
    public void testSelectByCondition() {
        Map map = new HashMap<>();
        map.put("did", 5);
        map.put("dname", "市场部");

        DepartmentMapper mapper = sqlSession.getMapper(DepartmentMapper.class);
        List departments = mapper.selectByCondition(map);
        departments.forEach((department) -> {
            System.out.println(department.getDid() + "t" + department.getDname());
        });
    }
4.3.5 删除
    @Test
    public void testDelete() {
        try {
            DepartmentMapper mapper = sqlSession.getMapper(DepartmentMapper.class);
            mapper.delete(5);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
        }
    }
5. 配置文件

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

  • properties:用于定义外部数据库连接信息
  • settings:设置全局的参数,用于优化 MyBatis 框架
  • typeAliases:用于指定别名
  • typeHandlers:用于定义或配置类型处理器
  • objectFactory:对象工厂
  • plugins:用于配置 MyBatis 的插件功能
  • environments:用于运行环境
  • databaseProvider:用于定义数据库厂商的标识,便于切换数据库
  • mappers:用于注册映射文件
5.1 properties

我们在项目的资源目录中创建 db.properties 文件,在这个文件中定义数据库连接信息。

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.72.71:3306/mydb?useSSL=false&characterEncoding=utf8
username=root
password=123456

接下来在主配置文件中使用 properties 标签来把我们编写好的连接数据库信息的文件引用。




    
    
        
            
            
                
                
                
                
            
        
    
    
        
    

通过 properties 标签来引用外部的数据库连接信息文件,然后在文件中需要使用的地方通过 ${key} 方式来引用。

5.2 settings

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

它的具体配置信息参考官网的内容:https://mybatis.org/mybatis-3/zh/configuration.html#settings

在官网的 settings 项目最后,有一个完整推荐配置:


  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

5.3 typeAliases

这个标签是用于给我们的 Java 对象指定别名,从而让我们的代码更加简洁。

5.3.1 typeAlias

对于它的配置,我们可以按如下的方式来进行:

    
        
    

这种方式指定好后,我们就可以修改映射文件:




    
    
        insert into t_department(dname,description) values(#{dname}, #{description})
    
    
    
        update t_department set dname=#{dname},description=#{description} where did=#{did}
    
    
    
        delete from t_department where did=#{did}
    
    
    
        select * from t_department where did=#{did}
    
    
    
        select * from t_department
    
5.7 mappers

它是用于注册我们的映射文件,使用有以下几种方式:

5.7.1 逐个注册

    
    

有多少个映射文件,我们就需要在 mappers 标签中使用多少个 mapper 子标签来注册。这种方式可行,但是会让配置文件变得臃肿。

5.7.2 接口名注册

要实现接口名注册我们需要把接口的地址放到 mappers 标签中,然后通过 class 属性来指定。


    
    

要使用这种方式,我们需要把映射文件和接口类放在同一个目录下。

另外,在 IDEA 中,默认情况下,Maven 工程是不会把除了 resources 目录下的资源文件编译到类路径下外,其它目录下的 xml 文件、properties 文件等是不会编译到类路径下的。要想让它进行编译,我们需要在 pom.xml 文件中添加如下的配置。

    
        
        
            
                src/main/java
                
                    ***.properties
                
            
        
    
5.7.3 基于注解配置

我们要想使用注解配置,我们就需要在接口的方法中添加注解,然后再 mappers 标签中使用类名来注册。

5.7.4 批量注册

    

使用这种方式,也是需要把映射文件和接口类放到同一个目录中。

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

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

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