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

MyBatis学习笔记

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

MyBatis学习笔记

MyBatis学习笔记–持续上传更新

文章目录
  • MyBatis学习笔记--持续上传更新
  • 前言
  • 一、Mybatis简介
    • 1、MyBatis历史
    • 2、MyBatis特性
    • 3、MyBatis下载
    • 4、MyBatis和其它持久化层技术对比
  • 二、MyBatis框架搭建及实现CRUD
    • 1. 引入依赖
    • 2. 创建核心配置文件
    • 3. 创建表及实体类
      • 3.1 创建数据库&表
      • 3.2 创建实体类
    • 4. 导入日志文件
    • 5. 编写mapper接口
    • 6. 编写映射文件
    • 7. 编写测试类
  • 三、核心配置文件详解
    • 1、核心配置文件标签
    • 2、核心配置文件案例
  • 四、MyBatis获取参数值的两种方式(重点)
    • 1、单个字面量类型的参数
    • 2、多个字面量类型的参数
    • 3、map集合类型的参数
    • 4、实体类类型的参数
    • 5、使用`@Param`标识参数
    • 6、总结


前言

本次学习笔记基于尚硅谷在B站推出的MyBatis课程进行学习记录,在此感谢尚硅谷官方“让天下没有难学的技术”。感谢!

  • 视频学习地址:https://www.bilibili.com/video/BV1VP4y1c7j7
  • 学习思维导图:
一、Mybatis简介 1、MyBatis历史

MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。

iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

  • SQL Maps:SQL Map提供了一个简洁的框架,使用简单的XML描述文件将Java Bean,Map实现和基本数据类型的包装类(String,Integer等)映射成JDBC的PreparedStatement。
  • Data Access Objects(DAO,数据访问对象):DAO对象包括数据引擎功能,通过数据引擎功能,它可以访问结构化查询语言(SQL)数据库。
2、MyBatis特性
  1. MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
  2. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
  3. MyBatis 可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
  4. MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架
3、MyBatis下载
  • MyBatis下载地址:https://github.com/mybatis/mybatis-3
  • MyBatis中文文档:https://mybatis.org/mybatis-3/zh/index.html
4、MyBatis和其它持久化层技术对比
  • JDBC
    • SQL 夹杂在Java代码中耦合度高,导致硬编码内伤
    • 维护不易且实际开发需求中 SQL 有变化,频繁修改的情况多见
    • 代码冗长,开发效率低
  • Hibernate 和 JPA
    • 操作简便,开发效率高
    • 程序中的长难复杂 SQL 需要绕过框架
    • 内部自动生产的 SQL,不容易做特殊优化
    • 基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难。
    • 反射操作太多,导致数据库性能下降
  • MyBatis
    • 轻量级,性能出色
    • SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据
    • 开发效率稍逊于HIbernate,但是完全能够接受
二、MyBatis框架搭建及实现CRUD

开发环境

  • IDE:idea 2020.3
  • 构建工具:maven 3.6.3
  • MySQL版本:MySQL 5.7
  • MyBatis版本:MyBatis 3.5.7

创建maven工程

来吧,展示!

1. 引入依赖

1.定义打包方式:jar。
2.引入对应依赖:Mybatis核心,junit测试,MySQL驱动,log4j日志。



    4.0.0

    com.atguigu.mybatis
    MyBatis_demo1
    1.0-SNAPSHOT
    
    jar

    
        8
        8
    

    
        
        
            org.mybatis
            mybatis
            3.5.7
        

        
        
            junit
            junit
            4.12
            test
        

        
        
            mysql
            mysql-connector-java
            5.1.3
        

        
        
            log4j
            log4j
            1.2.17
        
    


2. 创建核心配置文件

核心配置文件:

  • 主要用于配置连接数据库的环境以及MyBatis的全局配置信息
  • 核心配置文件存放的位置是src/main/resources目录下

(习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。)





    
    
        
             
            
                
                
                
                
            
        
    
    
    
        
    

3. 创建表及实体类 3.1 创建数据库&表

1)创建数据库:mybatis
2)创建数据表:t_user

3.2 创建实体类

根据表字段从而创建相应属性,并通过idea快捷键Alt+Insert快速生成无参/有参构造方法、get/set方法、toString方法等。

package com.min.mybatis.pojo;


public class User {
    private Integer id;

    private String username;

    private String password;

    private Integer age;

    private String sex;

    private String email;

    public User(Integer id, String username, String password, Integer age, String sex, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
        this.sex = sex;
        this.email = email;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + ''' +
                ", password='" + password + ''' +
                ", age=" + age +
                ", sex='" + sex + ''' +
                ", email='" + email + ''' +
                '}';
    }
}
4. 导入日志文件
  • log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录下
  • 日志的级别:FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试),从左到右打印的内容越来越详细



    
        
        
            
        
    
    
        
    
    
        
    
    
        
        
    

5. 编写mapper接口

MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。

package com.min.mybatis.mapper;

import com.min.mybatis.pojo.User;

import java.util.List;


public interface UserMapper {

    

    //说明:增删改都是返回数量,可以用int接收,不需查看返回值用void

    
    int insertUser();

    
    void updateUser();

    
    void deleteUser();

    
    User getUserById();

    
    List getAllUser();
}

6. 编写映射文件

MyBatis中可以面向接口操作数据,要保证两个一致:

  • mapper接口的全类名和映射文件的命名空间(namespace)保持一致
  • mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致





    
    
        insert into t_user
        values (null, 'admin', '123456', 23, '男', '12345@qq.com')
	

    
    
        update t_user set username = '张三' where id = 2
    

    
    
        delete from t_user where id = 3
    

    
    
    
        select * from t_user
    


7. 编写测试类

注意:SqlSession默认不自动提交事务,若需要自动提交事务,则在获取sqlSession对象时,使用SqlSession sqlSession = sqlSessionFactory.openSession(true);,传入一个Boolean类型的参数,值为true,这样就可以自动提交。

package com.min.mybatis.test;

import com.min.mybatis.mapper.UserMapper;
import com.min.mybatis.pojo.User;
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.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserMapperTest {

    @Test
    public void testInsertUser() throws IOException {

        //1、加载核心配置文件
        
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

        //2、获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

        //3、获取SqlSessionFactory
        
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);

        //4、获取sqlSession对象
        
        //SqlSession sqlSession = sqlSessionFactory.openSession();
        
        SqlSession sqlSession = sqlSessionFactory.openSession(true);

        //5、获取mapper接口对象
        
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        //6、测试功能
        
        int result = userMapper.insertUser();
        
        //sqlSession.commit();
        System.out.println("result:" + result);

    }


    @Test
    public void testUpdateUser() throws IOException {
        //1、加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //2、获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //3、获取SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //4、获取sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //5、获取mapper接口对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //6、测试功能
        userMapper.updateUser();
    }

    @Test
    public void testDeleteUser() throws IOException {
        //1、加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //2、获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //3、获取SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //4、获取sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //5、获取mapper接口对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //6、测试功能
        userMapper.deleteUser();
    }


    @Test
    public void testGetUserById() throws IOException {
        //1、加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //2、获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //3、获取SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //4、获取sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //5、获取mapper接口对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //6、测试功能
        User user = userMapper.getUserById();
        System.out.println(user);
    }

    @Test
    public void testGetAllUser() throws IOException {
        //1、加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //2、获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //3、获取SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //4、获取sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //5、获取mapper接口对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //6、测试功能
        List list = userMapper.getAllUser();
        list.forEach(user -> System.out.println(user));
    }
}
三、核心配置文件详解 1、核心配置文件标签

核心配置文件(mybatis-config.xml)中的标签必须按照固定的顺序:

properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappers

2、核心配置文件案例



    
    
    
    
        
        
        
        
    
    
    
        
        
        
        
        
    
    
    
    
        
        
            
            
            
            
                
                
                
                
                
                
                
                
            
        
    
    
    
    
        
        
        
    

四、MyBatis获取参数值的两种方式(重点)

MyBatis获取参数值的两种方式:${} 和 #{}

  • ${}的本质就是:字符串拼接
  • ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号
  • #{}的本质就是:占位符赋值
  • #{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号
1、单个字面量类型的参数

若mapper接口中的方法参数为单个的字面量类型,此时可以使用${}和#{}以任意的名称(最好见名识意)获取参数的值,注意使用${}时需要手动加单引号。

1)使用#{}占位符赋值



	select * from t_user where username = '${username}'

2、多个字面量类型的参数

若mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合中,有两种键值对情况:

  1. 以arg0,arg1… …为键,以参数为值
  2. 以param1,param2… …为键,以参数为值
  • 因此只需要通过${}或#{}访问map集合提供的键就可以获取相对应的值(注意${}需要手动加单引号)
  • 其中map提供的键,使用arg或者param都行,要注意的是:arg是从arg0开始的,param是从param1开始的


    select * from t_user where username = #{username} and password = #{password}

@Test
public void checkLoginByParam() {
	SqlSession sqlSession = SqlSessionUtils.getSqlSession();
	ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
	mapper.CheckLoginByParam("admin","123456");
}
6、总结

建议分成两种情况进行处理

  1. 实体类类型的参数
  2. 使用@Param标识参数
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991814.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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