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

Mybatis

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

Mybatis

Mybatis

声明:全文都是来自狂神说Java,纯属个人学习用,视频请移步下面的网址:

https://www.bilibili.com/video/BV1WE411d7Dv?t=33.3

1、简介 1.1、什么是Mybatis
  1. MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
  2. MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  3. MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
  4. MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
  5. 2013年11月迁移到Github。

如何获得Mybatis?

  • maven仓库

    org.mybatis
    mybatis
    3.5.6

1.2、持久化

数据持久化

  • 持久化就是将程序的数据在持久状态和瞬时状态转化的过程
  • 内存:断电即失
  • 数据库(jdbc),io文件持久化

为什么需要持久化?

  • 有些对象,不能让他丢掉
  • 内存太贵了
1.3、持久层
  • 完成持久化工作的代码块
  • 层界限十分明显
1.4、为什么需要Mybatis?
  • 帮助程序员将数据存入数据库中
  • 方便
  • 传统的JDBC代码太复杂了。简化,框架,自动化
2、第一个Mybatis程序

思路:搭建环境–>导入Mybatis–>编写代码–>测试

2.1、搭建环境

搭建数据库

CREATE DATAbase `mybatis`;

USE `mybatis`;

create TABLE `user`(
	`id` INT(20) Not null PRIMARY KEY,
	`name` varchar(20) DEFAULT NUll,
	`pwd` VARCHAr(20) default NULL
)ENGINE=INNODB default CHARSET=utf8;

insert into `user`(`id`,`name`,`pwd`) VALUES
(1,'张三','123456'),
(2,'李四','123789'),
(3,'王五','258963')

新建项目

  1. 新建一个普通的maven项目

  2. 删除src目录,注意:新建好项目后,检查箭头指的地方是不是自己maven所在路径箭头

  3. 导入maven依赖


        
        
            mysql
            mysql-connector-java
            5.1.48
        
        
        
            org.mybatis
            mybatis
            3.5.6
        
        
        
            junit
            junit
            3.8.1
            test
        
    
2.3、编写代码
  • 实体类
public class User {
    private int id;
    private String name;
    private String pwd;

    //无参
    public User() {
        super();
    }
    //有参
    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}
  • Dao接口
public interface UserDao {
    List getUserList();
}

  • 接口实现类由原来的UserDaoImpl接口转换为Mapper配置文件




    
        select * from mybatis.user
    

2.4、测试

注意点:
org.apache.ibatis.binding.BindingException: Type interface com.hou.dao.UserDao is not known to the MapperRegistry.

3、CRUD 1、namespace

namespace中的包名要和Dao/Mapper接口的包名一致。

2、select

选择查询语句:

  • id:就是对应的namespace中的方法名;
  • resultType:SQL语句执行的返回值;
  • parameterType:参数类型。
  1. 编写接口
    //按ID获取对象
    User getUserById(int id);
    
  2. 编写对应的mapper中的SQL语句
     
        
            select * from student
        
        
            
            
            
            
        
    
        
            select s.id sid,s.name sname,t.name tname
            from student s,teacher t
            where s.tid = t.id
        
    
        
            
            
            
                
            
        
    
    
    11、一对多处理

    1、环境搭建
    和刚才一样
    实体类

    public class Student {
        private int id;
        private String name;
        private int tid;
    }
    
    public class Teacher {
        private int id;
        private String name;
        //一个老师包含多个学生
        private List students;
    }
    

    按照结果嵌套查询

        
            select * from teacher where id = #{tid}
        
        
            
        
        
            select * from blog where 1=1
            
                and title = #{title}
            
            
                and author = #{author}
            
        
    

    ForEach
    foreach元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量,它也允许你指定开头与结尾的字符串以及在迭代结果之间放置分隔符,这个元素是很智能的,因此他不会偶然地附加多余的分隔符。

        
            select * from blog
            
                
                    id = #{id}
                
            
        
    

    动态SQL就是在拼接SQL语句,我们只要保证SQL语言的正确性,按照SQL的格式,去排列组合就可以了。

    13、缓存 13.1、简介
    1. 什么是缓存?
      • 存在内存中的临时数据
      • 将用户经常查询的数据存在放在缓存中
    2. 为什么使用缓存?
      • 减少和数据库的交互次数,减少系统开销,提高效率
    3. 什么样的数据能使用缓存?
      • 经常查询并且不经常改变的数据
    13.2、Mybatis缓存
    • Mybatis包含一个非常强大的查询缓存特性,它可以非常方便地制定和配置缓存。缓存可以极大的提升查询效率。
    • Mybatis系统中默认定义了两级缓存:一级缓存和二级缓存
      • 默认情况下,只有一级缓存开启。(SqlSession级别的缓存,也称为本地缓存)
      • 二级缓存需要手动开启和配置,它是基于namespace级别的缓存。
      • 为了提高扩展性,Mybatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存
    13.3、 一级缓存
    • 一级缓存也叫本地缓存:SqlSession
      • 与数据同一次会话期间查询到的数据会放在本地缓存中。
      • 以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库;

    测试步骤:

    	1. 开启日志
    	2. 测试在一个Session中查询两次相同记录
    	3. 查看日志输出
    
    13.3、 二级缓存
    • 二级缓存也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存。
    • 基于namespace级别的缓存,一个名称空间,对应一个二级缓存;
    • 工作机制
      • 一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中;
      • 如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是会话关闭了,一级缓存的数据被保存到二级缓存中;
      • 新的会话查询信息,就可以从二级缓存中获取内容;
      • 不同的mapper查出的数据会放在自己对应的缓存(map)中;

    步骤:
    1. 开启全局缓存

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

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

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