MyBatis笔记01_MyBatis的介绍+使用

MyBatis_01

概述

  • MyBatis是一款优秀的 持久层 框架,用于简化JDBC的开发。

  • MyBatis本是 Apache的一个开源项目iBatis,2010年这个项目由apache迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

  • 官网:https://mybatis.org/mybatis-3/zh/index.html

持久层:数据库访问层(Data Access Layer)又称为DAO层,有时候也称为是持久层,其功能主要是负责数据库的访问。简单地说就是实现对数据表的Select(查询)、Insert(插入)、Update(更新)、Delete(删除)等操作。如果要加入ORM的思想,就会包括对象和数据表之间的映射,以及对象实体的持久化操作。

框架 :是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。在框架的基础上进行软件开发更加高效、规范、通用、可拓展。

搭建一个小项目

1.创建springboot项目,File–>New–>Project 然后按照下图步骤

 2.导入 mybatis的起步依赖、mysql的驱动包、Lombok注解。

2.搭建数据库,直接运行sql脚本到数据库中即可

CREATE DATABASE /*!32312 IF NOT EXISTS*/`Mybatis` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `Mybatis`;

/*Table structure for table `dept` */

DROP TABLE IF EXISTS `dept`;

CREATE TABLE `dept` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(10) NOT NULL COMMENT '部门名称',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='部门表';

/*Data for the table `dept` */

insert  into `dept`(`id`,`name`,`create_time`,`update_time`) values (1,'学工部','2023-12-15 17:03:04','2023-12-15 17:03:04'),(2,'教研部','2023-12-15 17:03:04','2023-12-15 17:03:04'),(3,'咨询部','2023-12-15 17:03:04','2023-12-15 17:03:04'),(6,'就业部','2023-12-21 18:49:18','2023-12-21 18:49:18'),(7,'销售部','2023-12-21 18:50:22','2023-12-21 18:50:22');

/*Table structure for table `emp` */

DROP TABLE IF EXISTS `emp`;

CREATE TABLE `emp` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `username` varchar(20) NOT NULL COMMENT '用户名',
  `password` varchar(32) DEFAULT '123456' COMMENT '密码',
  `name` varchar(10) NOT NULL COMMENT '姓名',
  `gender` tinyint(3) unsigned NOT NULL COMMENT '性别, 说明: 1 男, 2 女',
  `image` varchar(300) DEFAULT NULL COMMENT '图像',
  `job` tinyint(3) unsigned DEFAULT NULL COMMENT '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师',
  `entrydate` date DEFAULT NULL COMMENT '入职时间',
  `dept_id` int(10) unsigned DEFAULT NULL COMMENT '部门ID',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='员工表';

/*Data for the table `emp` */

insert  into `emp`(`id`,`username`,`password`,`name`,`gender`,`image`,`job`,`entrydate`,`dept_id`,`create_time`,`update_time`) values (1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(12,'hebiweng','123456','鹤笔翁',1,'12.jpg',5,'2008-08-18',3,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(13,'fangdongbai','123456','方东白',1,'13.jpg',5,'2012-11-01',3,'2023-12-15 17:03:05','2023-12-15 17:03:05'),(14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,'2023-12-15 17:03:05','2023-12-15 17:03:05');

3.配置MyBatis

在springboot项目中,可以编写application.properties文件,配置数据库连接信息。我们要连接数据库,就需要配置数据库连接的基本信息。

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis

#输入自己的数据库的用户名和密码
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=root

4.目录搭建mapper,pojo文件夹 

5.pojo包存放实体类,搭建Emp,User实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Emp {
    private Integer id;
    private String username;
    private String password;
    private String name;
    private Short gender;
    private String image;
    private Short job;
    private LocalDate entrydate;     //LocalDate类型对应数据表中的date类型
    private Integer deptId;
    private LocalDateTime createTime;//LocalDateTime类型对应数据表中的datetime类型
    private LocalDateTime updateTime;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;   //id(主键)
    private String name;  //姓名
    private Short age;    //年龄
    private Short gender; //性别
    private String phone; //手机号

    //省略GET, SET方法
}

6.在mapper包下创建一个接口 UserMapper ,这是一个持久层接口(Mybatis的持久层接口规范一般都叫 XxxMapper)。

@Mapper//@Mapper注解:表示是mybatis中的Mapper接口
public interface UserMapper {
    //查询所有用户数据
    @Select("select id, name, age, gender, phone from user")
    List<User> list();
}

7.编写测试类,在src下的test目录下,已经自动帮我们创建好了测试类 ,该测试类在运行时,会自动通过引导类加载Spring的环境(IOC容器)。我们要测试那个bean对象,就可以直接通过@Autowired注解直接将其注入进行,然后就可以测试了。

@SpringBootTest
public class MyBatisApplicationTests{
	
    @Autowired
    private UserMapper userMapper;
	
    @Test
    public void testList(){
        List<User> userList = userMapper.list();
        for (User user : userList) {
            System.out.println(user);
        }
    }

}

8.一起看看运行结果怎么样

User(id=1, name=白眉鹰王, age=55, gender=1, phone=18800000000)
User(id=2, name=金毛狮王, age=45, gender=1, phone=18800000001)
User(id=3, name=青翼蝠王, age=38, gender=1, phone=18800000002)
User(id=4, name=紫衫龙王, age=42, gender=2, phone=18800000003)
User(id=5, name=光明左使, age=37, gender=1, phone=18800000004)
User(id=6, name=光明右使, age=48, gender=1, phone=18800000005)

MyBatis的优缺点


1. Mybait的优点: 
(1) 简单易学, 容易上手(相比于Hibernte) 基于SQL编程;
(2) JDBC相比,减少了50%以上的代码量,消除了JDBC业量冗余的代码,不是要手动开关连接;
(3) 很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库, 所以只要DBC支持的数据库MyBatis都支持,而JDBC提供了可扩展性,所以只要这个数据库有针对Java的Jar包就可以就可以与MyBatis兼容), 开发人员不需要考虑数据库的差异性。 
(4) 提供了很多第三方插件(分页插件/逆向工程)
(5) 能够与Spring很好的集成;
(6) MyBamybatistis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响, SQL写在XML里, 从程序代码中彻底分离,解除sql与程序代码的耦合,便于统一管理和优化, 并可重用。
(7) 提供XML标签,支持编写动态SQL语句。
(8) 提供映射标签,支持对象与数据库的ORM字段关系映射。
(9) 提供对象关系映射标签,支持对象关系组建维护。
2. MyBatis框架的缺点:
(1) SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。
(2) SQL语句依赖于数据库, 导致数据库移植性差,不能随意更换数据库。

与JDBC技术对比

jdbc缺点

原始的JDBC程序,存在以下几点问题:

  1. 数据库链接的四要素(驱动、链接、用户名、密码)全部硬编码在java代码中

  2. 查询结果的解析及封装非常繁琐

  3. 每一次查询数据库都需要获取连接,操作完毕后释放连接, 资源浪费, 性能降低

Mybatis优点
  1. 数据库连接四要素(驱动、链接、用户名、密码),都配置在springboot默认的配置文件 application.properties中

  2. 查询结果的解析及封装,由mybatis自动完成映射封装,我们无需关注

  3. 在mybatis中使用了数据库连接池技术,从而避免了频繁的创建连接、销毁连接而带来的资源浪费。

数据库连接池

我们所讲解的mybatis中,使用了数据库连接池技术,避免频繁的创建连接、销毁连接而带来的资源浪费。

数据库连接池是个容器,负责分配、管理数据库连接(Connection)

  • 程序在启动时,会在数据库连接池(容器)中,创建一定数量的Connection对象

允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个

  • 客户端在执行SQL时,先从连接池中获取一个Connection对象,然后在执行SQL语句,SQL语句执行完之后,释放Connection时就会把Connection对象归还给连接池(Connection对象可以复用)

释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

  • 客户端获取到Connection对象了,但是Connection对象并没有去访问数据库(处于空闲),数据库连接池发现Connection对象的空闲时间 > 连接池中预设的最大空闲时间,此时数据库连接池就会自动释放掉这个连接对象

数据库连接池的好处:

  1. 资源重用

  2. 提升系统响应速度

  3. 避免数据库连接遗漏

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值