自学内容网 自学内容网

mybatis框架

一.Mybatis简介


1.1 Mybatis概述


MyBatis最初是Apache的一个开源项目iBatis, 2010年6月
这个项目由Apache Software Foundation迁移到了
Google Code。随着开发团队转投Google Code旗下,
iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到
Github。
MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开
发。它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获
取结果集的工作。MyBatis 可以通过简单的 XML 或注解来
配置和映射原始类型、接口和 Java POJO(Plain Old Java
Objects,普通老式 Java 对象)为数据库中的记录。
官网:https://mybatis.org/mybatis-3/zh/index.html


1.2 浅谈JDBC代码

public class DemoTest {
public static void main(String[] args) {
//1. 注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2. 获取Connection连接
String url = "jdbc:mysql:///db1?
useSSL=false";
String uname = "root";
String pwd = "1234";
Connection conn =
DriverManager.getConnection(url, uname, pwd);
// 接收输入的查询条件
String gender = "男";
// 定义sql
String sql = "select * from tb_user
where gender = ?";
// 获取pstmt对象
PreparedStatement pstmt =
conn.prepareStatement(sql);
// 设置?的值
pstmt.setString(1,gender);
// 执行sql
ResultSet rs = pstmt.executeQuery();
// 遍历Result,获取数据
User user = null;
ArrayList<User> users = new ArrayList<>
();
while (rs.next()) {
//获取数据
int id = rs.getInt("id");
String username =
rs.getString(“username”);
String password =
rs.getString(“password”);
//创建对象,设置属性值
user = new User();
user.setId(id);
user.setUsername(username);
user.setPassword(password);
user.setGender(gender);
//装入集合
users.add(user);
}
//释放资源
rs.colse();
pstmt.colse();
conn.close();
}
}

jdbc这个步骤非常的麻烦;所以我们用mybatis框架来代替jdbc

硬编码
注册驱动、获取连接。连接数据库的四个基本信息,以
后如果要将Mysql数据库换成其他的关系型数据库的
话,这四个地方都需要修改,如果放在此处就意味着要
修改我们的源代码。
如果表结构发生变化,SQL语句就要进行更改。这也不
方便后期的维护。
操作繁琐
手动设置参数
手动封装结果集

MyBatis:SQL 和 Java 编码分开,功能边界清晰。Java代码专
注业务、SQL语句专注数据
MyBatis:免除了几乎所有的 JDBC 代码以及设置参数和获取
结果集的工作


1.3 框架名词解释


框架就是一个半成品软件,是一套可重用的、通用的、软
件基础代码模型
在框架的基础之上构建软件编写更加高效、规范、通用、
可扩展

二.快速入门(基于Mybatis3方式)


2.1 入门案例实现步骤
创建数据库和表
创建模块,导入坐标
实体类准备
编写Mybatis核心配置文件,数据库的连接信息等
编写Mapper接口
编写 SQL 映射文件,编写SQL语句
测试

创建数据库和表:

CREATE TABLE t_emp(
emp_id INT primary key AUTO_INCREMENT,
emp_name CHAR(100),
emp_salary DOUBLE(10,5)
);
INSERT INTO t_emp(emp_name,emp_salary)
VALUES("张三",200.33);
INSERT INTO t_emp(emp_name,emp_salary)
VALUES("李四",200.44);
INSERT INTO t_emp(emp_name,emp_salary)
VALUES("王五",200.55);

创建模块,导入坐标

<dependencies>
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<!-- MySQL驱动 mybatis底层依赖jdbc驱动实现,本次
不需要导入连接池,mybatis自带! -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<!--junit5测试-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-
api</artifactId>
<version>5.3.1</version>
</dependency>
</dependencies>

准备实体

public class Employee {
private Integer empId;
private String empName;
private Double empSalary;
public Integer getEmpId() {
return empId;
}
public void setEmpId(Integer empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {

编写Mybatis核心配置文件
替换连接信息 解决硬编码问题
在模块下的 resources 目录下创建mybatis的配置文件
mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration表示mybatis框架的核心配置文件的根标
签,配置-->
<configuration>
<!--
environments:表示当前mybatis框架的环境:开发
测试环境等
一个environments标签下面可以书写多个
environment
一个environment标签代表一个环境
-->
<environments default="development">
<environment id="development">
<!--
事务管理,这里先使用mybatis框架的默认
管理type="JDBC",实际开发中
mybatis框架的事务由spring框架
-->
<transactionManager type="JDBC">
</transactionManager>
<!--
数据源即数据库连接池,不用修改,使用
mybatis默认的数据库连接池
实际开发中由spring管理,这就是
type="POOLED"
-->
<dataSource type="POOLED">
<property name="driver"
value="com.mysql.cj.jdbc.Driver"/>
<property name="url"value="jdbc:mysql://localhost:3306/ssm_01"/>
<property name="username"value="root"/>
<property name="password"value="123456"/>
</dataSource>
</environment>
</environments>
<!--加载映射配置文件-->
<mappers>
<mapper resource="EmployeeMapper.xml">
</mapper>
</mappers>
</configuration>

编写Mapper接口
Mybatis 中的 Mapper 接口相当于以前的 Dao。但是区别在
于,Mapper 仅仅只是建接口

package com.ll.mapper;
import com.ll.pojo.Employee;
import java.util.List;
//接口只规定方法,参数和返回值!映射配置文件中编写具体SQL
语句!
public interface EmployeeMapper {
public List<Employee> findAll();
}

编写 SQL 映射文件
统一管理sql语句,解决硬编码问题

在模块的 resources 目录下创建映射配置文件
EmployeeMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper
3.0//EN"
"https://mybatis.org/dtd/mybatis-3-
mapper.dtd">
<!--namespace:名称空间 该映射配置文件和哪个Mapper接口
进行映射绑定-->
<mapper
namespace="com.lzw.mapper.EmployeeMapper">
<!--id:唯一标识,映射接口的方法 resultType:输出的参数类型
-->
<select id="findAll"
resultType="com.lzw.pojo.Employee">
select emp_id empId,emp_name
empName,emp_salary empSalary from t_emp
</select>
</mapper>

test测试代码

public class DemoTest {
//入门案例
@Test
public void test01() throws IOException {
//读取核心配置文件
InputStream in =
Resources.getResourceAsStream("mybatis-
config.xml");
//构建SqlSessionFactory工厂对象
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(in);
//通过SqlSessionFactory工厂对象获取
SqlSession对象(就是connection)
SqlSession sqlSession =
sqlSessionFactory.openSession();
//基于接口获取实现类对象(代理对象)
EmployeeMapper employeeMapper =
sqlSession.getMapper(EmployeeMapper.class);
//通过多态调用方法
List<Employee> employeeList =
employeeMapper.findAll();
//处理结果
for (Employee employee : employeeList) {
System.out.println(employee);
}
//释放资源
sqlSession.close();
}
}

2.2 Lombok插件的使用(简化代码)


使用Lombok注解就可以省略生成getXxx()、setXxx()方法、
toString()方法、构造器等固定格式代码的繁琐操作,提高开
发效率。包括Logger日志对象。

Lombok原理:Lombok是将自动生成的代码织入字节码文件
中,从而实现:源代码没有,但是字节码文件有——毕竟我们
最终运行的是字节码文件,只要字节码文件中有即可。而这个
过程因为要参与源文件编译,所以需要安装IDEA插件。


Lombok安装

加入依赖

在resources创建xml文件将依赖复制到xml文件中去

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>

注解功能介绍


原文地址:https://blog.csdn.net/2401_85217463/article/details/142985983

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!