Spring Boot 实战:分别基于 MyBatis 与 JdbcTemplate 的数据库操作方法实现与差异分析

server/2024/11/29 1:26:16/

1. 数据库新建表

CREATE TABLE `table_emp`(id INT AUTO_INCREMENT,emp_name CHAR(100),age INT,emp_salary DOUBLE(10,5),PRIMARY KEY(id)
);INSERT INTO `table_emp`(emp_name,age,emp_salary) VALUES("tom",18,200.33);
INSERT INTO `table_emp`(emp_name,age,emp_salary) VALUES("jerry",19,666.66);
INSERT INTO `table_emp`(emp_name,age,emp_salary) VALUES("andy",20,777.77);

2. 数据库表模型Bean

@Data
public class Emp {private Integer id;private String empName;private Integer age;private Double empSalary;
}

3. 导入sql依赖

在pom.xml中添加依赖

<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency>

4. 数据库配置

在 application.properties 中新增配置

spring.application.name=mybatis-01-helloworldspring.datasource.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/harrylin
spring.datasource.username=root
spring.datasource.password=******
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

5. JdbcTemplate的实现方法

5.1 编写Dao接口

public interface EmpDao {Emp getEmpDaoById(Integer id);
}

5.2 编写接口实现类

此处通过sql查询出来的结果是通过jdbcTemplate的queryForObject方法完成类和结果的映射,其中类是由方法入参Emp.class决定。

@Repository
public class EmpDaoImpl implements EmpDao {@AutowiredJdbcTemplate jdbcTemplate;@Overridepublic Emp getEmpDaoById(Integer id) {String sql = "select * from table_emp where id = ?";Emp emp = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Emp.class), id);return emp;}
}

6.  MyBatis的实现方法

6.1 导入mybatis依赖

在pom.xml中添加依赖

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency>

6.1 编写mapper接口

注意,此处接口注解有别于JdbcTemplate接口注解,需标注@Mapper,而非@Repository

@Mapper  // 告诉Spring 这是myBatis操作数据库用的接口
public interface EmpMapper {  // Mapper接口// 按照id查询Emp getEmpById(Integer id);
}

6.2 编写mapper.xml实现

此文件可通过安装mybatisX插件

然后把光标停留在mapper接口处,Alt+enter 自动生成mapper.xml文件,文件头自动生成。

此处通过sql查询出来的结果和类之间的映射是mybatis完成,类是由mapper.xml配置中的

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.hongshan.mybatis.mapper.EmpMapper"></select><select id="getAllEmp" resultType="com.hongshan.mybatis.bean.Emp">select * from table_emp</select>
</mapper>

6.3 编写配置

        在配置文件 application.properties 中新增配置

# 告诉 mybatis xml 文件在哪里
mybatis.mapper-locations=classpath:mapper/**.xml
# 驼峰映射
mybatis.configuration.map-underscore-to-camel-case=true

 7. 测试

        这里自动注入时二者也有区别,JdbcTemplate使用的是实现类注入,

mybatis是直接用的mapper接口注入

@SpringBootTest
class Mybatis01HelloworldApplicationTests {@AutowiredEmpMapper mapper;@AutowiredEmpDao empDao;@Testvoid getEmpById_test() {Emp empById = mapper.getEmpById(1);System.out.println(empById);}@Testvoid getDaoEmpById_test(){Emp empDaoById = empDao.getEmpDaoById(1);System.out.println(empDaoById);}
}

 


http://www.ppmy.cn/server/145776.html

相关文章

CentOS上如何离线批量自动化部署zabbix 7.0版本客户端

CentOS上如何离线批量自动化部署zabbix 7.0版本客户端 管理的服务器大部分都是CentOS操作系统&#xff0c;版本主要是CentOS 7。因为监控服务器需要&#xff0c;要在前两天搭建的Zabbix 7.0系统上把这些CentOS 7系统都监控起来。因为服务器数量众多&#xff0c;而且有些服务器…

redislite:轻量级的嵌入式 Redis 解决方案

在现代应用程序中&#xff0c;数据存储和管理是至关重要的。Redis 是一个非常流行的内存数据结构存储&#xff0c;广泛用于缓存、会话存储和消息传递等场景。然而&#xff0c;在某些情况下&#xff0c;开发者并不希望在本地或服务器上维护一个独立的 Redis 实例。这时&#xff…

【cocos creator】下拉框

https://download.csdn.net/download/K86338236/90038176 const { ccclass, property } cc._decorator;type DropDownOptionData {optionString?: string,optionSf?: cc.SpriteFrame } type DropDownItemData {label: cc.Label,sprite: cc.Sprite,toggle: cc.Toggle }cccl…

JVM调优篇之JVM基础入门AND字节码文件解读

目录 Java程序编译class文件内容常量池附录-访问标识表附录-常量池类型列表 Java程序编译 Java文件通过编译成class文件后&#xff0c;通过JVM虚拟机解释字节码文件转为操作系统执行的二进制码运行。 规范 Java虚拟机有自己的一套规范&#xff0c;遵循这套规范&#xff0c;任…

行为型模式-命令模式

命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使你可以用不同的请求、队列或者日志来参数化对象。命令模式允许请求的发送者与接收者完全解耦。 关键组成部分 Command&#xff08;命令接口&#xff0…

Git | 通过Gihub+git组合来学习理解团队项目合作中分支的创建、合并、删除操作

分支操作 Gihubgit步骤 1: 创建新的 GitHub 仓库步骤 2: 克隆仓库到本地步骤 3:创建并切换到新分支&#xff1a;步骤 4:修改文件并提交更改&#xff1a;【包含**查看改动提交更改**】步骤 5:将本地分支推送到 GitHub&#xff1a;步骤 6:合并分支步骤 7:删除本地分支和远程分支步…

【探寻密码的奥秘】-001:解开密码的神秘面纱

目录 1、密码学概述1.1、概念1.2、目的1.3、应用场景 2、密码学的历史2.1、第一时期&#xff1a;古代密码时代2.2、第二时期&#xff1a;机械密码时代2.3、第三时期&#xff1a;信息密码时代2.4、第四时期&#xff1a;现代密码时代 3、密码学的基本概念3.1、一般通信系统3.2、保…

linux安全管理-会话安全

文章目录 1 设置命令行界面超时退出2 配置终端登录失败策略3 配置 SSH 登录失败策略 1 设置命令行界面超时退出 1、检查内容 检查操作系统是否设置命令行界面超时退出。 2、配置要求 操作系统设置命令行界面超时退出。 3、配置方法 配置命令行界面超时时间&#xff0c;编辑/et…