您的位置:首页 > 科技 > 能源 > Mybatis

Mybatis

2025/5/15 2:14:19 来源:https://blog.csdn.net/hang_sa_mu/article/details/141905866  浏览:    关键词:Mybatis

目录

1、 之前的JDBC的使用缺点?

2、 Mybatis的介绍

3 、xml方式整合Mybatis[重点]

3.1 环境

3.2 编写接口和映射文件

3.3 yml文件 配置文件【重要】

3.4 扫描mapper 

3.5 测试

1、 之前的JDBC的使用缺点?

  • 大量的代码重复

  • 手动加载驱动,创建连接(Connection),关流

  • 封装数据麻烦(ORM) 将数据库中表数据 赋值给实体类对象

  • 效率不高(没有缓存)

2、 Mybatis的介绍

官网: mybatis – MyBatis 3 | Introduction

MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层(Dao)框架。用于操作数据库。


MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。且有缓存机制,可以提高查询效率。


Mybatis是一个半ORM框架,可以消除JDBC的代码和步骤,让开发者只关注SQL本身。

ORM是对象关系映射,是指数据库表和java实体类一一对应.

半ORM框架,还是需要写SQL,由框架帮你完成映射

完全ORM框架,连SQL都不需要写,只需要遵循ORM的要求,就会自动生成SQL完成映射(Hibernate,JPA等)


3 、xml方式整合Mybatis[重点]

xml方式在编写复杂SQL时,更适合

3.1 环境

mybatis和druid的springboot环境下的依赖

<!-- 小辣椒 -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
<!-- mysql驱动 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version>
</dependency>
​
<!-- druid 德鲁伊   数据库连接池 -->
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version>
</dependency>
​
<!-- mybatis -->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version>
</dependency>

安装小辣椒插件:Lombok

准备数据库

create table tb_user(id int primary key auto_increment,username varchar(50),password varchar(50),phone varchar(50),createTime date,money double,sex int
)default charset = utf8;

实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {
​private int id;private String username;private String password;private String phone;private Date createTime;private double money;private int sex;
}

3.2 编写接口和映射文件

接口就是我们之前的Dao层接口,Mybatis习惯叫做Mapper,所以先创建mapper包,然后再在其中创建接口文件

public interface UserMapper {User findUserById(int id)
}

以前是写接口的实现类,现在mybatis的接口实现功能由xml文件来实现了

在resources/下创建mapper文件夹,在其内创建mapper映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace名称空间 -->
<!-- 用来关联,映射文件(XML)和接口文件,即接口的类路径 -->
<mapper namespace="com.qf.mapper.UserMapper">
​<!--select标签,用于执行查询语句id: 是接口中的方法名resultType: 返回的结果类型,是接口对应方法的返回值[现在只写User报错,要写完整类路径]==========================代码执行时,调用接口方法findUserById时传入的参数,就会赋值给#{}内的id执行完,查询返回结果集会自动封装到resultType指定的对象中--><select id="findUserById" resultType="com.qf.model.User"><!-- #{id} 就相当于是之前的预处理的 ?,会自动给此处复制  --><!-- 其实就是接口方法的参数列表的值,会传给 #{id} -->select * from tb_user where id = #{id}</select>
</mapper>

3.3 yml文件 配置文件【重要】

# 连接数据库的信息
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://ip:3306/数据库名?serverTimezone=UTCusername: rootpassword: 123456# 数据库连接池type: com.alibaba.druid.pool.DruidDataSource
# mybatis配置
mybatis:# 扫描映射文件mapper-locations: classpath:mapper/*.xml# 配置别名扫描的包type-aliases-package: com.qf.modelconfiguration:# 开启驼峰映射配置map-underscore-to-camel-case: true    
# 打印执行过程的sql信息
logging:level:com.qf.mapper: DEBUG    

3.4 扫描mapper 

主类扫描mapper

@SpringBootApplication
@MapperScan("com.qf.mapper") // 扫描mapper接口,创建代理对象
public class TestSpringbootApplication {
​public static void main(String[] args) {SpringApplication.run(TestSpringbootApplication.class, args);}
}

3.5 测试

@RestController
public class TestMybatisController {
​// todo: 这里省略了service,也可以调用service,由service掉mapper@Autowiredprivate UserMapper userMapper;
​// http://localhost:8080/find?id=1@GetMapping("/m1")public R testMybatis1(int id) {User user = userMapper.findUserById(id);return R.ok(user);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com