当前位置: 首页 > article >正文

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

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

spring.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 {
    @Autowired
    JdbcTemplate jdbcTemplate;
    @Override
    public 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 {
	@Autowired
	EmpMapper mapper;
	@Autowired
	EmpDao empDao;

	@Test
	void getEmpById_test() {
		Emp empById = mapper.getEmpById(1);
		System.out.println(empById);
	}

	@Test
	void getDaoEmpById_test(){
		Emp empDaoById = empDao.getEmpDaoById(1);
		System.out.println(empDaoById);
	}
}

 


http://www.kler.cn/a/416957.html

相关文章:

  • 网络工程师 (31)VLAN
  • OpenFeign远程调用返回的是List<T>类型的数据
  • 502 Bad Gateway 错误详解:从表现推测原因,逐步排查直至解决
  • NO.11十六届蓝桥杯备战|if-else语句|嵌套if|悬空else|练习4道(C++)
  • SQL自学,mysql从入门到精通 --- 第 14天,主键、外键的使用
  • PHP 运算符
  • 【QNX+Android虚拟化方案】125 - 如何创建android-spare镜像
  • 基于SpringBoot的欢迪迈手机商城架构设计
  • 从扩散模型开始的生成模型范式演变--SDE
  • AI/ML 基础知识与常用术语全解析
  • C# 数据类型详解:掌握数据类型及操作为高效编码奠定基础
  • 闪豆下载器(多平台视频批量下载器)v4.0
  • 神经网络中的优化方法(一)
  • 数据结构与算法——N叉树(自学笔记)
  • pandas read_csv读取中文内容文件报错UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte
  • 【C++篇】排队的艺术:用生活场景讲解优先级队列的实现
  • C、C++ 和 C# 三种语言及其常见框架的介绍
  • 大数据环境下网络安全态势感知研究
  • 混淆零碎知识点
  • 挑战用React封装100个组件【003】
  • ElasticSearch7.x入门教程之全文搜索(七)
  • 深入理解 GitHub 高级应用:从分支管理到自动化工作流
  • 【大数据学习 | Spark调优篇】Spark之JVM调优
  • iOS开发之修改已有项目的项目名和类名前缀
  • Shell脚本小练习
  • GitLab: You cannot create a branch with a SHA-1 or SHA-256 branch name