From Hibernate To Mybatis (一)

本文介绍了作者从使用Hibernate转向Mybatis的经历,对比了两者在工程结构和配置上的区别,强调了Mybatis的轻量级特性。作者通过一个简单的CRUD操作,解释了Mybatis的配置文件、SQL语句的写法、参数配置以及如何调用SQL。总结指出,无论Hibernate还是Mybatis,选择合适的就是最好的。
摘要由CSDN通过智能技术生成



前言



新公司新项目的持久层用到了Mybatis,在此之前的一两年我一直使用的是Hibernate,关于这两个框架的争议一直存在,有人说Hibernate过于臃肿效率低于Mybatis,也有人说Hibernate优化做的好效率一样很棒,其实我还是认为各有优势的,比如Hibernate的API可以让我们无视数据库移植,HQL也简化了SQL,但Mybatis的灵活性确实略高于Hibernate,只要不是用JDBC,这些个框架整体上应当都是差不多的,无非就是用的好用的坏的问题。刚进公司那阵鸿洋曾经告诉过我,会Hibernate的话学Mybatis也就是几个小时的事情,看来确实如此,不管是整体的架构或者使用方法上都是同出一辙,本篇blog是我学习Mybatis的第一篇,所以就写一个简单的CRUD,当然我的这一系列blog还有一个特点就是会不断和hibernate做比较,一边总结回顾Hibernate,一边学习记录Mybatis。



初识MyBatis



首先看一下Mybatis的工程结构,


给我的第一感觉就是轻量级,jar包只需要2个,并无任何依赖,那么再来看看Hibernate的工程结构,


相比之下,孰“轻”孰“重”一目了然。再具体观察一下包的结构,不难发现Mybatis下有一个mappers包,里面放的是xml文件,没学过应该也听说过Mybatis的SQL语句是独立写在配置文件中的,并且正是写在这些mapper.xml文件中的,这个后面再细说。不管哪个框架自然应当有一个整体的配置文件,就像Hibernate中的hibernate.cfg.xml一样,我们来看看Mybatis的mybatis-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http:/
好的,这个实验看起来比较简单,我们可以先从搭建环境开始。以下是简要的步骤: 1. 安装并配置MySQL数据库。 2. 创建一个SpringBoot项目,添加web和mysql依赖。 3. 配置application.properties文件,设置数据库连接信息。 4. 创建数据库表,包括用户ID、用户名、用户工资字段。 5. 创建实体类User,对应数据库表。 6. 创建Mapper接口和XML文件,实现增删改查等功能。 7. 创建Controller类,处理用户请求,调用Mapper接口。 让我们逐步实现这些步骤。 ### 1. 安装并配置MySQL数据库 我们可以通过官网下载MySQL Community Server并进行安装。安装完成后,可以通过命令行进入MySQL,创建用户和数据库,以及授予用户访问数据库的权限。示例代码: ```mysql CREATE DATABASE mydatabase; CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword'; GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost'; ``` ### 2. 创建一个SpringBoot项目,添加web和mysql依赖 我们可以使用Spring Initializr快速创建一个SpringBoot项目,并添加web和mysql依赖。 ### 3. 配置application.properties文件,设置数据库连接信息 在src/main/resources目录下创建application.properties文件,添加以下配置: ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=myuser spring.datasource.password=mypassword spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update ``` ### 4. 创建数据库表,包括用户ID、用户名、用户工资字段 我们可以使用MySQL Workbench创建表,示例代码: ```mysql CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(45) NOT NULL, `salary` double NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; ``` ### 5. 创建实体类User,对应数据库表 ```java @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String username; private Double salary; // 省略 getter 和 setter 方法 } ``` ### 6. 创建Mapper接口和XML文件,实现增删改查等功能 ```java @Mapper public interface UserMapper { @Select("SELECT * FROM user") List<User> findAll(); @Select("SELECT * FROM user WHERE id = #{id}") User findById(Integer id); @Insert("INSERT INTO user(username, salary) VALUES(#{username}, #{salary})") int save(User user); @Update("UPDATE user SET username = #{username}, salary = #{salary} WHERE id = #{id}") int update(User user); @Delete("DELETE FROM user WHERE id = #{id}") int delete(Integer id); } ``` ### 7. 创建Controller类,处理用户请求,调用Mapper接口 ```java @Controller public class UserController { @Autowired private UserMapper userMapper; @GetMapping("/") public String index(Model model) { List<User> userList = userMapper.findAll(); model.addAttribute("userList", userList); return "index"; } @GetMapping("/add") public String add() { return "add"; } @PostMapping("/save") public String save(User user) { userMapper.save(user); return "redirect:/"; } @GetMapping("/edit/{id}") public String edit(@PathVariable("id") Integer id, Model model) { User user = userMapper.findById(id); model.addAttribute("user", user); return "edit"; } @PostMapping("/update") public String update(User user) { userMapper.update(user); return "redirect:/"; } @GetMapping("/delete/{id}") public String delete(@PathVariable("id") Integer id) { userMapper.delete(id); return "redirect:/"; } } ``` 至此,我们已经完成了这个实验的全部要求。可以使用浏览器访问http://localhost:8080/ 进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值