Mybatis
环境:JDK,Mysql,maven,idea
https://blog.csdn.net/qq_40253426/article/details/108986838
1、简介
1.1、什么是Mybaits?
- Mybaits是一款==持久层框架==
- 它支持自定义 SQL、存储过程以及高级映射。
- MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
- MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
1.2、如何获得Mybaits?
maven仓库:
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
Github:https://github.com/mybatis/mybatis-3/releases
中文文档:https://mybatis.org/mybatis-3/zh/index.html
1.3、什么是持久化
数据持久化
- 持久化就是将程序的数据在持久化状态和瞬时状态转化的过程。
- 内存:断电即失
- 两种持久化方式:数据库(JDBC),io文件持久化。
为什么需要持久化?
- 有一些对象,不能让他丢掉;
- 内存太贵。
1.4、什么是持久层
- 完成持久化工作的代码块;
- 层界限十分明显;
持久化是一个动作,而持久层是一个名词,一个概念。
1.5、为什么需要MyBatis?
- 帮助程序员将数据存入到数据库中;
- 方便;
- 传统的JDBC代码太复杂;
- 简化框架,自动化;
- 不用MyBatis也可以,更容易上手。
优点:
- 简单易学;
- 灵活;
- sql和代码的分离,提高了可维护性;
- 提供映射标签,支持对象与数据库的orm字段关系映射;
- 提供对象关系映射标签,支持对象关系组建维护;
- 提供XML标签,支持编写动态SQL;
最重要一点:灵活性比较高
Spring SpringMVC SpringBoot 搭配上MyBatis
2、第一个MyBatis程序
思路:搭建环境—>导入MyBatis—>编写代码—>测试
2.1、搭建环境
2.1.1、搭建数据库
--查询所有的数据库
show databases;
--选择数据库
use `mybaits`;
--创建用户表
create table if not exists `user`(
`id` int(20) not null,
`name` varchar(30) default null,
`pwd` varchar(30) default null,
primary key(`id`)
);
--插入数据
insert into `user`(`id`,`name`,`pwd`)
value(1'张三','123456'),
(2,'李四','123456'),
(3,'王五','123456');
2.1.2、新建项目
1、新建一个maven项目
2、删除src
3、导入依赖
<dependencies>
<!--MySQL驱动-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<!--mybatis-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
2.1.3、新建模块
-
编写mybatis的核心配置文件–mybatis-config.xml
<?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:核心配置文件--> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <!--默认事务管理是JDBC--> <!--serverTimezone=GMT%2B8--> <!--serverTimezone=UTC--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&userUnicode=true&characterEncoding=UTF-8"/> <!--注意MySQL8.0以上版本要注意时区问题--> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--每一个Mapper.xml都需要在Mybatis核心配置文件中注册--> <mappers> <mapper resource="com/zhangtao/dao/UserMapper.xml"/> </mappers> </configuration>
-
编写mybatis工具类
package com.zhangtao.utils; 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 java.io.IOException; import java.io.InputStream; /* sqlSessionFactory -->sqlSession sqlSessionFactory--->sqlSession工厂专门用来生产sqlSession */ public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static{ try { //使用Mybatis第一步:获取sqlSession对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } /* 现在,你有一个SqlSessionFactory,顾名思义,你可以获得一个示例的SqlSession。 SqlSesion 包含针对数据库执行 SQL 命令所需的所有方法。 您可以直接针对 SqlSesion 实例执行映射的 SQL 语句。 */ public static SqlSession getSqlSession(){ //获取sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); return sqlSession; //或者优化 return sqlSessionFactory.openSession(); } }
2.1.4、编写代码
-
实体类
package com.zhangtao.pojo; public class User { private int id; private String name; private String pwd; public user(){ } 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; } @Override public String toString() { return "User [id="+id+",name:="+name+",pwd:"+pwd+"]"; } }
-
Dao接口
package com.zhangtao.dao; import com.zhangtao.pojo.User; import java.util.List; public interface UserDao { List<User> getUserList(); }
-
接口实现类–变成了接口配置文件—UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.zhangtao.dao.UserDao">
<!--查询语句中的id对应方法名-->
<!--结果类型时User-->
<select id="getUserList" resultType="com.zhangtao.pojo.User">
select * from mybaits.user;
</select>
</mapper>
- 接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件。
- 以后如果要添加接口的话,或者要修改,只需要修改接口以及接口实现类即可。(UserMapper.java,UserMapper.xml)
2.1.5、测试
package com.zhangtao.dao;
import com.zhangtao.pojo.User;
import com.zhangtao.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.