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

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-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.lryc.cn/news/493098.html

相关文章:

  • 【jmeter】服务器使用jmeter压力测试(从安装到简单压测示例)
  • 使用Python实现自动化邮件通知:当长时程序运行结束时
  • 框架学习07 - SpringMVC 其他功能实现
  • NAT:连接私有与公共网络的关键技术(4/10)
  • RabbitMQ2:介绍、安装、快速入门、数据隔离
  • 衡山派D133EBS 开发环境安装及SDK编译烧写镜像烧录
  • 【Spring MVC】如何获取cookie/session以及响应@RestController的理解,Header的设置
  • C++设计模式行为模式———策略模式
  • Spring Cloud 中 bootstrap.yml 配置文件详解
  • Java项目实战II基于SpringBoot前后端分离的网吧管理系统(开发文档+数据库+源码)
  • ASP网络安全讲述
  • DFS 创建分级菜单
  • HDU Go Running(最小点覆盖 + 网络流优化)
  • C++设计模式-中介者模式
  • 文件上传与下载服务 | Flask 实战
  • MySQL 中的排序:索引排序与文件排序
  • 深入理解React Hooks:使用useState和useEffect
  • AWS codebuild + jenkins + github 实践CI/CD
  • Android PMS(Package Manager Service)源码介绍
  • 运维面试整理总结
  • 图数据库 Cypher语言
  • 阿里云oss转发上线-实现不出网钓鱼
  • Spring Boot 3.4.0 发行:革新与突破的里程碑
  • 【网络安全】
  • 在SQLyog中导入和导出数据库
  • RabbitMQ简单应用
  • 使用LUKS对Linux磁盘进行加密
  • 戴尔电脑安装centos7系统遇到的问题
  • 3.4.SynchronousMethodHandler组件之ResponseHandler
  • Linux 下进程的状态