Mybatis小记

本文详细介绍了Mybatis框架的用途、架构及其优势,包括简化JDBC代码、支持连接池、动态SQL等功能。通过实例展示了Mybatis的入门步骤,如创建数据库、配置实体类、映射文件和核心配置文件,以及增删改查操作。此外,还讨论了Mapper接口的使用和优化技巧,如日志配置和JDBC.properties文件的应用。
摘要由CSDN通过智能技术生成

 

自我控制是最强者的本能。——萧伯纳


目录

Mybatis简介

什么是Mybatis

为什么使用Mybatis

Mybatis的架构

Mybatis入门

准备数据

创建数据库、创建表、并插入数据

创建工程

编写实体类User

添加UserMapper.xml文件(实体类的映射文件)

添加mybatis-config.xml文件

测试

增删改查

动态SQL

if元素

where

foreach

#{}和${}占位符

Mapper接口开发

为什么要用mapper接口开发

如何使用mapper接口开发

优化

可以加入日志配置

JDBC.properties文件

拓展

mybatis-config文件没有提示

​​​​​​Mapper文件没有提示


Mybatis简介

什么是Mybatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

也就是说MyBatis通过一些配置后,只需要关注SQL语句即可,而不用花费大量的时间精力去编写一些复杂的重复的代码,如:注册驱动,获取连接,获取传输器,处理结果集等等。这一切得复杂的代码都被MyBatis给封装集成了,大大的减少了开发过程中的代码量与出错的概率。

总结:Mybatis对JDBC访问数据库的过程进行了封装,简化了JDBC代码,解决JDBC将结果集封装为Java对象的麻烦。

为什么使用Mybatis

Mybatis对JDBC访问数据库的过程进行了封装,那么在不使用Mybatis的情况下,JDBC是如何的呢?

使用传统方法访问数据库

(1)使用JDBC访问数据库有大量重复代码(比如注册驱动、获取连接、获取传输器、释放资源等);

(2)JDBC自身没有连接池,会频繁的创建连接和关闭连接,效率低;

(3)SQL是写死在程序中,一旦修改SQL,需要对类重新编译;

(4)对查询SQL执行后返回的ResultSet对象,需要手动处理,有时会特别麻烦;

使用Mybatis

(1)Mybatis对JDBC对了封装,可以简化JDBC代码;

(2)Mybatis自身支持连接池(也可以配置其他的连接池),因此可以提高程序的效率;

(3)Mybatis是将SQL配置在mapper文件中,修改SQL只是修改配置文件,类不需要重新编译。

(4)对查询SQL执行后返回的ResultSet对象,Mybatis会帮我们处理,转换成Java对象。

由上面可以看出,JDBC中的问题(复杂的代码,连接的创建,结果集的处理)几乎都被Mybatis解决了。

Mybatis的架构

(1)mybatis-config.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂

(2)基于SqlSessionFactory可以生成SqlSession对象

(3)SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。

(4)Executor是SqlSession底层的对象,用于执行SQL语句

(5)MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)

了解了这些,那就往下看看Mybatis如何使用吧。

Mybatis入门

准备数据

在此呢,以代码为例进行展示

创建数据库、创建表、并插入数据

1、创建数据库

create database if not exists userdb charset utf8;--userdb数据库不存在的话创建,指定编码utf8
use userdb; -- 选择userdb数据库

2、如果存在user表的话删除

drop table if exists user;

3、创建user表

create table user(
	id int primary key auto_increment,
	name varchar(50),
	job varchar(50),
	age int
);

4、插入数据

insert into user values(null, '张飞', '匹夫', 22);
insert into user mp values(null, '刘备', '老大', 29);
insert into user values(null, '关羽', '马夫', 24);
insert into user values(null, '赵子龙', '愣头青', 25);
insert into user values(null, '华雄', '小喽啰', 18);

数据都是乱写的,莫要认真哈

创建工程

1、创建Maven的Java工程

2、导入Junit、mysql、mybatis等开发包

<dependencies>
	<!-- junit单元测试 -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.9</version>
	</dependency>
	<!-- mysql驱动 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.32</version>
	</dependency>
	<!-- mybatis -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.2.8</version>
	</dependency>
	<!-- 整合log4j -->
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-log4j12</artifactId>
		<version>1.6.4</version>
	</dependency>
</dependencies>

3、创建测试类并提供一个方法

编写实体类User

此处需要注意一点:实体类的属性名应该与数据库表的字段名一致,不然会出现错误。

当然表的字段名不推荐使用驼峰,两个字母之间使用下划线连接,而实体类的属性是驼峰规则,此时,就需要有额外的配置使得属性名与字段名相匹配。(这个方法此处就不多说了,百度,不止一种方法)

package com.demo.pojo;

import java.io.Serializable;
/*
 * 实体类用于封装数据库中的每一条信息
 * 为了防止信息丢失,一般都会实现序列化
 */
public class User implements Serializable{

	private static final long serialVersionUID = -2261716295130942575L;
	//声明实体类的属性
	private Integer id;
	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值