mybatis概述
什么是mybatis?
它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性.
什么是ORM?
英文全称Object Relation Mapping,意思是:对象关系映射。对象指的是Java对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在Java对象和数据库的关系模型之间建立一种对应关系,比如用一个Java的User类,去对应数据库中的一张User表,类中的属性和表中的列一一对应。User类就对应User表,一个User对象就对应User表中的一行数据。
举个例子:
User表有以下数据:
User类有以下数据:
它们两个的对应关系就是:id对应user_id,name对应user_name,pwd对应user_pwd.
---------------------------------------------------------------------------------------------------------------------------------
为什么mybatis是半自动的ORM框架?和hibernate的区别?
用mybatis进行开发,需要手动编写SQL语句。而全自动的ORM框架,如hibernate,则不需要编写SQL语句。用hibernate开发,只需要定义好ORM映射关系,就可以直接进行CRUD操作了。由于mybatis需要手写SQL语句,所以它有较高的灵活性,可以根据需要,*地对SQL进行定制,也因为要手写SQL,当要切换数据库时,SQL语句可能就要重写,因为不同的数据库有不同的方言(Dialect),所以mybatis的数据库无关性低。虽然mybatis需要手写SQL,但相比JDBC,它提供了输入映射和输出映射,可以很方便地进行SQL参数设置,以及结果集封装。并且还提供了关联查询和动态SQL等功能,极大地提升了开发的效率。并且它的学习成本也比hibernate低很多。
快速入门
只需要通过如下几个步骤,即可用mybatis快速进行持久层的开发
1.搭建数据库(这里使用mysql数据库)
2. 在pom文件添加所需依赖,并编写全局配置文件(mybatis根据这个配置文件的内容,创建相应的SqlSessionFactory)
3.编写mapper映射文件(SQL语句写在映射文件,可以根据需求,在这里对SQL语句进行自定义。)
4.加载全局配置文件,生成SqlSessionFactory
5.创建SqlSession,调用mapper映射文件中的SQL语句来执行CRUD操作
---------------------------------------------------------------------------------------------------------------------------------
下面通过详细的图文,让你从不了解的小白到学会Mybatis的基本操作(学会了Mybatis的基操只是个开始,路还很长。若想成为这方面的大神,理解底层源码是必不可少的)
---------------------------------------------------------------------------------------------------------------------------------
一、搭建数据库(用作测试)
在SQLyog执行以下sql语句
USE `cxk`; //数据库名为cxk
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(20) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `user` */
insert into `user`(`id`,`name`,`pwd`) values (1,'蔡徐坤','123456'),(3,'坤坤','123456'),(4,'亚瑟','444444'),(5,'小马','444444'),(6,'王小二','111'),(7,'张三疯','222'),(8,'王大拿','333'),(9,'妲己','122'),(10,'赵云','6766'),(11,'安其拉','77777'),(12,'小鲁班','7777557');
---------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------
二、打开idea创建一个名为Mybatis的maven项目
---------------------------------------------------------------------------------------------------------------------------------
三、pom文件添加依赖,在resource目录下编写全局配置文件
1.添加依赖
2.编写配置文件
这是参数文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"></properties>
<environments default="mysql1">
<environment id="mysql1">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/kun/dao/UserMapper.xml"/>
</mappers>
</configuration>
mybatis全局配置文件
四、创建3个类、1个接口、1个映射文件。
1.User类(用作对象关系映射)
2.test类(执行CRUD的语句,并且检验运行结果)
import com.kun.dao.UserMapper;
import com.kun.pojo.User;
import com.kun.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class test {
@Test
public void test1(){
SqlSession s= MybatisUtils.getSqlSession();
UserMapper u= s.getMapper(UserMapper.class);
List<User> list= u.getUserList();
for (User list1:list){
System.out.println(list1);
}
}
@Test
public void testInsert(){
SqlSession s=MybatisUtils.getSqlSession();
UserMapper u=s.getMapper(UserMapper.class);
Map<String,Object> map=new HashMap<>();
map.put("uid",12);
map.put("uname","老三");
map.put("upwd","7777557");
int a=u.insertOne(map);
s.commit();
System.out.println("受影响行数"+a);
}
@Test
public void deleteById(){
SqlSession s=MybatisUtils.getSqlSession();
UserMapper a=s.getMapper(UserMapper.class);
int q= a.deleteId(2);
s.commit();
System.out.println("受影响行数"+q);
}
@Test
public void updateById(){
SqlSession s=MybatisUtils.getSqlSession();
UserMapper a=s.getMapper(UserMapper.class);
Map<String,Object> map=new HashMap<>();
map.put("id",4);
map.put("name","小马");
map.put("pwd","444444");
int q= a.updateById(map);
s.commit();
System.out.println("受影响行数"+q);
}
}
3.MybatisUtils类(运行开始就读取Mybatis全局配置文件)
4.UserMapper接口
5.创建UserMapper.xml映射文件
(映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。)
---------------------------------------------------------------------------------------------------------------------------------
以上准备好后,执行,查看结果。
---------------------------------------------------------------------------------------------------------------------------------
一、执行查询方法。
查询结果
数据库的数据
二、执行新增方法
结果
数据库的数据
三、执行删除方法
数据库的数据
四、执行修改方法
数据库的数据
总结:
编写mapper.xml,书写SQL,并定义好SQL的输入参数,和输出参数
编写全局配置文件,配置数据源,以及要加载的mapper.xml文件
通过全局配置文件,创建SqlSessionFactory
每次进行CRUD时,通过SqlSessionFactory创建一个SqlSession
调用SqlSession上的selectOne,selectList,insert,delete,update等方法,传入mapper.xml中SQL标签的id,以及输入参数
补充:
程序运行的时候,报红色说Mapper.xml文件找不到。并且文件不放在resource文件夹。
把以下代码加到pom文件中。不然Mybatis只会默认从resource路径,寻找映射文件。
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
本章完。这虽然是Mybatis的基操,但也要一定学会和理解。
连基操都不会,还想学更深入的?做梦去吧