MyBatis保姆级理解与使用专业学习eclipse版

  1. My Batis简介

1.1 M yBatis的特点

MyBatis保姆级理解与使用专业学习eclipse版

1 .2 MyBatis简介

MyB atis 是一个半自动化的持久化层的ORM 框架。

所谓的持久化层就是dao 。

ORM:(Object Relation Mapping) 对象关系映射

Java 中的对象Bean 与数据库中的表建立映射关系。表中建立关系是通过外键->主键

优势:只需要配置好配置文件,那么久可以通过操作Java 中的对象就能影响数据库表中的数据。

半自动化:

全自动化Hibernate :无需手写SQL ,自动生成sql 语句,自动生成的SQL ,性能太低。无法优化SQL 语句。当然Hibernate 也支持原生手写SQL,但是还是写的太麻烦了。

而MyB atis 是半自动化,需要手写SQL,但是SQL可以做自动的拼接。

ibatis

https://mybatis.net.cn/

什么是 MyBatis ?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO (Plain Old Java Objects ,普通老式Java 对象)为数据库中的记录。

MyBatis保姆级理解与使用专业学习eclipse版
  1. 搭建Mybaits 框架

导入jar 包

编写配置文件

使用核心类库

2.1 通过maven 下载mybaits

MyBatis保姆级理解与使用专业学习eclipse版

2.2 建立maven 工程&编写pom 文件

2 .2.1 新建maven 的web 项目

MyBatis保姆级理解与使用专业学习eclipse版

2 .2.2 mybaits 需要的 pom文件内容

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”>

mybaits 的核心jar 包–>

mybaits 的核心jar 包–>

1.8

MyBatis保姆级理解与使用专业学习eclipse版

mybaits 的核心就这一个jar 包,所以是轻量级的。

2.3 准备工作

2 .3.1 建立数据库m ybaitsdb01,建表,插入数据

MyBatis保姆级理解与使用专业学习eclipse版

create table sys _emp(

emp_id bigint auto_increment,

emp_name varchar(20),

emp_pwd varchar(20),

emp_gender enum(‘m’,’f’),

emp _salary double(10,5),

primary key(emp_id)

);

INSERT INTO sys_emp VALUES (null, ‘范冰冰’, ‘fbb’, ‘f’, 100.5);

INSERT INTO sys_emp VALUES (null, ‘李冰冰’, ‘lbb’, ‘f’, 300);

INSERT INTO sys_emp VALUES (null, ‘张彬彬’, ‘zbb’, ‘m’, 599);

INSERT INTO sys_emp VALUES (null, ‘万茜’, ‘wq’, ‘m’, 4000);

INSERT INTO sys_emp VALUES (null, ‘李若彤’, ‘lrt’, ‘m’, 5000.8);

select * from sys_emp;

MyBatis保姆级理解与使用专业学习eclipse版

2. 3.2 编写实体bean

package com.hy.bean;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

@Data

@NoArgsConstructor

@AllArgsConstructor

public class Emp {

private Long empId;

private String empName;

private String empPwd;

private String empGender;

private Double empSalary;

//构造方法(去ID 的)

public Emp(String empName, String empPwd, String empGender, Double empSalary) {

super();

this.empName = empName;

this.empPwd = empPwd;

this.empGender = empGender;

this.empSalary = empSalary;

}

}

2. 3.2 编写mapper 接口( dao接口)

EmpMapper

package com.hy.mapper;

import java.util.List;

import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.hy.bean.Emp;

/**

  • 声明这个接口是为了方便上层代码调用Mybatis 的具体功能

  • Mapper 配置文件的namespace 属性要和接口的全类名一致,这样才能通过接口找到Mapper 配置

  • 接口中的方法名要和Mapper 配置文件中SQL 语句标签的id 属性一致,这样才能通过方法名找到具体SQL 语句

  • 又因为在Mapper 配置文件中id 属性的值是不能重复的,所以当前接口中方名也不能重复——当前接口中的方法不能重载

*/

public interface EmpMapper {

/**

  • 通过这个方法对应Mapper 配置文件中的SQL 语句

  • @param empId 当前方法的参数对应SQL 语句中#{empId}声明的参数

  • @return 当前方法的返回值类型和resultType 属性指定的类型一致

*/

abstract public Emp selectEmpById(Long empId);

/**

  • 执行插入操作

  • @param emp

  • @return 受影响的行数

*/

abstract public int insertEmp(Emp emp);

/**

  • 执行删除操作

  • @param empId

  • @return 受影响的行数

*/

abstract public int deleteById(long empId);

/**

  • 执行更新操作

  • @param harry

  • Mybatis 返回的受影响行数也可以不使用

*/

abstract public void updateEmp(Emp harry);

/**

  • 模糊查询,根据员工姓名片段查询对应数据

  • @param 查询条件

  • @return 查询结果

*/

abstract public Emp selectEmpByName(String empName);

// 使用@Param 注解给方法形参命名,具体用法参照Mapper 配置文件

abstract public void updateSalaryById(@Param(“empId”) Long empId, @Param(“empSalary”) Double salary);

abstract public void updateByMap(Map

abstract public Integer selectCount();

abstract public Map

abstract public List

// 执行插入数据操作,自增主键会放入实体类对象的id 属性

// 方法返回值还是受影响行数

abstract public int insertWithKey(Emp emp);

abstract public List

}

这里我们换成了EmpM apper ,新名字我们就适应新的写法,去掉前面的I ,当然也可以不去掉叫IE mpM apper 。

MyBatis保姆级理解与使用专业学习eclipse版

2.4 编写配置文件

Mybaits 比较特殊有两个配置文件,一是,核心(全局)配置文件,二是,映射文件(编写sql 语句的映射文件)

2.4.1 如何编写核心(全局)配置文件[mybatis-config.xml]

位置:resources 目录下,只有一个

名称:核心配置名字推荐使用:mybaits-config.xml。

这里,我们习惯上命名为mybaits-config.xml ,这个文件名只是建议,并非强制要求的。将来和Spring 整合之后,这个配置文件可以省略。目前大家操作时,可以直接复制,粘贴。

将来mybaits 和Spring 整合了之后,mybatis-config 这个全局配置文件 ,可以保留,也可以省略,省略之后,可以放在spring 中配置文件中进行mybatis 相关文件的配置。

MyBatis保姆级理解与使用专业学习eclipse版

2 .4.2 编写核心配置文件

核心配置模板,直接从官网拷贝。

MyBatis保姆级理解与使用专业学习eclipse版

“1.0” encoding= “UTF-8” ?>

PUBLIC “-//mybatis.org//DTD Config 3.0//EN”

“http://mybatis.org/dtd/mybatis-3-config.dtd”>

将黄色的地方改写

“1.0” encoding= “UTF-8” ?>

PUBLIC “-//mybatis.org//DTD Config 3.0//EN”

“http://mybatis.org/dtd/mybatis-3-config.dtd”>

在实际的工作中,一般都有是哪个环境,开发,测试,部署,设置连接的数据库都可以不一样,简单的说就是,可以连接不同的数据库,比如:连接Oracle 的环境。

2 .4.2.1 重点总结:

事务管理器和数据源以后都是在spring 中进行配置的,spring 在它的声明式事务里面,S pring 给我们提供了事务管理器,Spring 帮我们做事务的管理,包括开启事务,提交事务或是回滚事务,包括释放数据库的连接,管理数据源,这些都是Spring 帮我们去管理。所以这一部分配置以后都要移植到Spring 的配置文件中的。

现在暂时在这里面配置好,帮助我们去学习,操作就行了。

2 .4.3 如何编写S QL语句的映射文件

映射文件位置:resources/mapper => 相当于dao

映射文件名称:XxxM apper

将来mybaits 和Spring 整合了之后,mybatis-config 这个全局配置文件 ,可以保留,也可以省略,省略之后,可以放在spring 中配置文件中进行mybatis 相关文件的配置。

但是XxxMapper 映射文件必须保留。

2.4.3.1 ORM相关概念

MyBatis保姆级理解与使用专业学习eclipse版

2 .4.4 设置相关映射文件

2 .4.4.1 在resources 目录下设置mappers 目录

MyBatis保姆级理解与使用专业学习eclipse版

2 .4.4.2 拷贝x ml文件里的内容

从官网拷贝:https://mybatis.net.cn/getting-started.html ;

PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”

“http://mybatis.org/dtd/mybatis-3-mapper.dtd”>

select * from Blog where id = #{id}

MyBatis保姆级理解与使用专业学习eclipse版

注意:以前我们叫dao ,现在叫mapper ,本质上都是持久化层的类,只是命名习惯的区别而已。

注意:EmpM apper.xml 所在的目录要和mybatis-config.xml 中使用的mapper 标签配置的一致。

2 .4.4.3 编写S QL语句

“1.0” encoding= “UTF-8” ?>

PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”

“http://mybatis.org/dtd/mybatis-3-mapper.dtd”>

“selectEmpById” resultType= “com.hy.bean.Emp”>

select emp_id empId,emp_name empName,emp_pwd empPwd,emp_gender empGender , emp_salary empSalary

from sys_emp where emp_id = #{empId}

MyBatis保姆级理解与使用专业学习eclipse版

这里是符合SQL 语句的命名标准,但是不符合JavaB ean 的命名习惯,所以要加别名。

2.4.4.4 注册Xxx M apper. xml映射文件

所谓的注册M apper :就是指定Mybaits 映射文件的具体位置。

在mybatis-config.xml 全局配置文件中,通过mapper 标签,配置一个具体的XxxM apper.xml映射文件。

resource 属性:指定Mapper 映射文件的实际存储位置,对于maven 工程的目录结构来说,对Maven 工程的目录结构来说,resources 目录下的内容会直接放入类路径。

所以,这里我们以resources 目录为基准 ,不加/的相对路径,就是相对resources 目录 。

MyBatis保姆级理解与使用专业学习eclipse版

2.5 在Junit 中编写测试类

2 .5.1 从 XML 中构建SqlSessionFactory

每个基于 MyBatis 的应用都是以一个SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过SqlSessionFactoryBuilder 获得。而SqlSessionFactoryBuilder 则可以从XML 配置文件或一个预先配置的Configuration 实例来构建出SqlSessionFactory 实例。

XML 配置文件中包含了对MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource )以及决定事务作用域和控制方式的事务管理器(TransactionManager )。

2 .5.2 具体操作

package com.hy.mybatis.test;

import java.io.IOException;

import java.io.InputStream;

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 org.junit.Test;

import com.hy.bean.Emp;

import com.hy.mapper.EmpMapper;

public class TestEmpMapper {

@Test

public void testSelectEmpById() throws IOException {

//1. 使用Mybaits 的Resources 类来读取Mybatis 全局配置文件

InputStream inputStream = Resources. getResourceAsStream(“mybatis-config.xml”);

//2. 创建SqlSessionFactoryBuilder 对象

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

//3. 调用builder 对象的build 方法创建SqlSessionFactory 类的对象(工厂设计模式)

SqlSessionFactory sessionFactory = builder.build(inputStream);

//4. 通过SqlSessionFactory 对象开启一个从Java 程序到数据库的会话

SqlSession sqlSession = sessionFactory.openSession();

//5. 通过sqlSession 对象找到Mapper 映射文件中可以执行的SQL 语句,并执行。 namespace

Object obj = sqlSession.selectOne(“com.hy.mapper.EmpMapper.selectEmpById”,1);

//6. 打印结果

System. out.println(obj);

//7. 提交事务

sqlSession.commit();

//8. 关闭sqlSession

sqlSession.close();

}

@Test

public void testSelectEmpById2() throws IOException {

//1. 使用Mybaits 的Resources 类来读取Mybatis 全局配置文件

InputStream inputStream = Resources. getResourceAsStream(“mybatis-config.xml”);

//2. 创建SqlSessionFactoryBuilder 对象

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

//3. 调用builder 对象的build 方法创建SqlSessionFactory 类的对象(工厂设计模式)

SqlSessionFactory sessionFactory = builder.build(inputStream);

//4. 通过SqlSessionFactory 对象开启一个从Java 程序到数据库的会话

SqlSession sqlSession = sessionFactory.openSession();

//5. 通过sqlSession 对象通过反射机制,直接生成一个EmpMapper 接口的匿名类的对象

EmpMapper empMapper = sqlSession.getMapper(EmpMapper. class);

//6. 执行语句,打印结果

Emp emp = empMapper.selectEmpById(2L);

System. out.println(emp);

//7. 提交事务

sqlSession.commit();

//8. 关闭sqlSession

sqlSession.close();

}

}

1,2 ,3,4,7,8 都是暂时写的,等和Spring 整合后,代码就非常简单了。我们这里已经可以看出,不用写E mpM apper 的实现类了。只写接口即可。

Original: https://www.cnblogs.com/lijili/p/16596706.html
Author: 雾里看瓜
Title: MyBatis保姆级理解与使用专业学习eclipse版

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620912/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球