Mybatis入门到入坟 一站式基础及进阶——囊括面试点与初学基础框架分析——从0到1 不会私我 我手把手教你
Posted 猿小付
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis入门到入坟 一站式基础及进阶——囊括面试点与初学基础框架分析——从0到1 不会私我 我手把手教你相关的知识,希望对你有一定的参考价值。
📖本篇内容:Mybatis入门到入坟一站式基础——囊括面试点与初学基础、框架分析
📆 最近更新:2022年1月11日 MySQL的最全常用SQL语句 —— 一文可以快速熟悉、回忆sql语句
🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起
本文目录
Mybatis入门到入坟一站式基础
写在前面
哇咔咔,小付又来了哦~今天给大家整理的是关于SSM中Mybatis
框架的入门到入坟的基础夯实学习资料, 这次是小付二刷的经历过往,耗时也不算太多,更加坚固了基础知识的掌握的同时
,也深刻理解了,Mybatis部分底层源码实现的工作流程
,感谢各位支持,但我希望这篇文章能带给你们更多的是知识的查缺补漏
,以及对框架的熟练掌握
,加油xdm,冲冲冲~!
1、什么是Mybatis
Mybatis介绍
Mybatis介绍
Mybatis是一款优秀的持久化框架:
- 它支持
定制化 SQL
、存储过程以及高级映射。 - MyBatis
避免了
几乎所有的JDBC 代码
和手动设置参数
以及获取结果集
。 - MyBatis 可以使用
简单的 XML 或注解来配置和映射原生信息
,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
。
ORM是什么?
orm是什么?
ORM(Object Relational Mapping)
,对象关系映射,是一种为了解决关系型数据库数据与简单Java对象(POJO)的映射关系的技术
。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据
,将程序中的对象自动持久化到关系型数据库中。
Mybatis的优缺点
优点:
基于SQL语句进行编程
,较为灵活,可以定制化SQL语句
。- 因为SQL写在了
xml文件
当中,解除了数据持久化与代码程序的耦合性
,便于管理
- 相较于JDBC降低了代码冗余的同时,也
不用手动关闭连接
,从而浪费资源 - 提供映射标签,支持对象与数据库的
ORM字段关系映射
;提供对象关系映射标签,支持对象关系组件维护 - 能够与Spring很好的集成,都属于非侵入式框架。
缺点:
- SQL语句的
编写工作量较大
,尤其当字段多
、关联表多时,对开发人员编写SQL语句的功底有一定要求,你会体验到写高中作文的感受。 - SQL语句
依赖于数据库
,导致数据库移植性差
,不能随意更换数据库。
Hibernate 和 MyBatis 的区别
共同点:
- 都对JDBC进行了封装,同时
都是持久化层开发的框架
,都用于DAO层的开发
。
不同点:
- 映射关系
- MyBatis 是一个半自动映射的框架,配置Java对象与sql语句执行结果的对应关系,多表关联关系配置简单
- Hibernate 是一个全表映射的框架,配置Java对象与数据库表的对应关系,多表关联关系配置复杂
- 开发难易程度以及使用场景
- Hibernate是重量级框架,学习起来较为困难,适合于需求相对稳定的中小型项目,办公等小型系统。
- Mybatis是轻量级的框架,学习起来较为轻松,适合于需求变化频繁,大型项目,例如电子商务系统。
2、快速入门使用Mybatis
步骤1:搭建Mybatis的环境
步骤1:搭建Mybatis的环境
添加驱动包(mybatis.jar与mysql.jar)
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
步骤2:快速创建一个数据库并且包含一张表作为测试
步骤2:快速创建一个数据库并且包含一张表作为测试
CREATE DATABASE `mybatis`;
USE `mybatis`;
CREATE TABLE `user`(
`id` INT(64) NOT NULL PRIMARY KEY,
`username` VARCHAR(30) DEFAULT NULL,
`password` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO user(`id`,`username`,`password`) VALUES(101,'Alascanfu','123456'),
(102,'root','root'),
(103,'admin','admin');
步骤3:创建配置文件 mybatis-config.xml进行配置
步骤3:创建配置文件 mybatis-config.xml进行配置
配置文件需要配置:
- 指定数据库的相关信息(url,username,password,driver)
- 框架可以根据配置文件自动获取连接
- 指定事务管理对象
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>
<!-- 多个数据源环境的配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<environment id="otherDevelopment">
<transactionManager type="JDBC"/>
<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>
<!-- 指定mapper文件的路径-->
<mappers>
<mapper resource="com.alascanfu.pojo.mapper.UserMapper.xml"/>
</mappers>
</configuration>
步骤4:创建一个MybatisUtils工具类 获取SqlSession
步骤4:创建一个MybatisUtils工具类 获取SqlSession
/**
* 功能描述
* sqlSessionFactory ----> sqlSession
* Mybatis的工具类 用来获取sqlSession
* @author Alascanfu
* @date 2022/1/9
*/
public class MybatisUtils
private static InputStream inputStream;
private static SqlSessionFactory sqlSessionFactory;
//利用静态代码块直接在初始化时加载
static
try
String resource = "mybatis-config.xml";
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
catch (IOException e)
e.printStackTrace();
/**
* 功能描述
* 获取sqlSession
* @date 2022/1/9
* @author Alascanfu
*/
public static SqlSession getSqlSession()
return sqlSessionFactory.openSession();
/**
* 功能描述
* 关闭流与断开SqlSession连接
* @date 2022/1/9
* @author Alascanfu
*/
public static void closeSqlSession()
try
inputStream.close();
getSqlSession().close();
catch (IOException e)
e.printStackTrace();
步骤5:创建实体类与接口类
步骤5:创建实体类与接口类
User.java
public class User
private int id ;
private String username;
private String password;
public User()
public User(int id, String username, String password)
this.id = id;
this.username = username;
this.password = password;
public int getId()
return id;
public void setId(int id)
this.id = id;
public String getUsername()
return username;
public void setUsername(String username)
this.username = username;
public String getPassword()
return password;
public void setPassword(String password)
this.password = password;
@Override
public String toString()
return "User" +
"id=" + id +
", username='" + username + '\\'' +
", password='" + password + '\\'' +
'';
接口UserMapper.java
public interface UserMapper
List<User> getUserList();
编写一个Mapper配置文件,来代替了之前JDBC中的UserDaoImpl的接口实现类
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 绑定一个对应的Mapper接口-->
<mapper namespace="com.alascanfu.pojo.mapper.UserMapper">
<select id="getUserList" resultType="com.alascanfu.pojo.User">
select * from user
</select>
</mapper>
步骤6:测试
步骤6:测试
UserMapperTest.java
public class UserMapperTest
@Test
public void test()
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList =
mapper.getUserList();
for (User user : userList)
System.out.println(user);
sqlSession.close();
运行结果:
Userid=101, username='Alascanfu', password='123456'
Userid=102, username='root', password='root'
Userid=103, username='admin', password='admin'
Process finished with exit code 0
如果测试类进行测试的时候可能会报错
要先进行配置好maven的过滤环境
否则在测试的时候就会找不到咱们设置好的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>mybatis-01-test</artifactId>
<groupId>com.alascanfu</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-02-HelloMybatis</artifactId>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 配置好过滤Maven配置文件-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
3、Mybatis实现CRUD操作——以及简单操作
步骤1:需要合理设计好对应了映射类,属性命名最好=列名
步骤1:需要合理设计好对应了映射类,属性命名最好=列名
步骤2:在Mapper接口中,定义对应的方法,增删改的返回值为int(代表的是操作修改的行),而查询则对应返回类型即可。
步骤2:在Mapper接口中,定义对应的方法,增删改的返回值为int(代表的是操作修改的行),而查询则对应返回类型即可。
public interface UserMapper
//获取表中的所有User
List<User> getUserList();
//插入一个用户
int insertUser(User user);
//根据id来删除一个用户
int deleteUserById(int id);
//根据id来修改用户
int updateUserById(User user);
//查询对应id的用户信息
User queryUserById(int id);
步骤3:当在Mapper接口中,创建好方法后,就要去Mapper的配置文件当中设置对应方法的SQL语句了。
步骤3:当在Mapper接口中,创建好方法后,就要去Mapper的配置文件当中设置对应方法的SQL语句了。
其中mapper中对应的标签名称 也就是翻译过来的 SQL映射语句
insert 插入
delete 删除
update 更新
select 查询
标签内的属性:
- parameterType:参数的类型
- resultType:返回值类型
<?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">
<mapper namespace="com.alascanfu.pojo.mapper.UserMapper">
<!-- 增加一个用户 这里的参数类型一定要写对应位置的返回类型 以免出错-->
<insert id="insertUser" parameterType="com.alascanfu.pojo.User">
insert into user (id,username,password) values(#id,#username,#password)
</insert>
<!-- 删除一个用户 -->
<delete id="deleteUserById" parameterType="int">
delete from USER where id = #id
</delete>
<!-- 根据id更新用户信息 -->
<update id="updateUserById" parameterType="com.alascanfu.pojo.User">
update user set username = #username,password=#password where id = #id
</update>
<!-- 查询所有用户信息 -->
<select id="getUserList" resultType="com.alascanfu.pojo.User">
SELECT * FROM USER
</select>
<!-- 根据用户id查询用户信息 -->
<select id="queryUserById" resultType="com.alascanfu.pojo.User">
select * from user where id = #id
</select>
</mapper>
注意内容:
#属性值(参数名称)
步骤4:连接数据库进行测试
步骤4:连接数据库进行测试
public class Test
//用于测试查询所有的用户信息
@org.junit.Test
public void test()
SqlSession sqlSession = MybatisUtils.getSqlSession(以上是关于Mybatis入门到入坟 一站式基础及进阶——囊括面试点与初学基础框架分析——从0到1 不会私我 我手把手教你的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2从入门到入坟 | 基础入门篇:「Spring Boot 2从入门到入坟」系列教程介绍
Spring Boot 2从入门到入坟 | 基础入门篇:「Spring Boot 2从入门到入坟」系列教程介绍