笔者在前段时间参加后端面试时遇到了这么一个场景,平时开发项目的时候用的都是Spring,Springboot框架,那肯定少不了Mybatis这样的ORM框架,请你说说这类ORM框架的好处是什么?
在 Java 开发中,我们经常会使用 ORM(Object Relational Mapping,对象关系映射)框架技术,如 MyBatis、Hibernate 等。
使用这些 ORM 技术的目的是为了在 Java 应用程序中更方便地处理数据库操作,即OOP和关系型数据库的中间层,降低开发难度和提高开发效率。
例如我们想从数据库中获取一个user的信息,我们会执行SQL语句:
"SELECT id, name, email, country, phone_number FROM users WHERE id = 20"
上述代码会返回关于该user的部分信息(姓名,邮箱,国籍,电话号码),由where后的id条件进行筛选。
如果使用ORM工具,上述代码可以简化:
users.GetById(20)
注意,上述只是一种ORM的表达,不同工具的使用方式可能有细微的不同,但是大体思路都是一样的。
Hibernate 使开发人员能够遵循 OOP 概念(如继承、多态性、关联、组合)编写数据持久类。 Hibernate 具有高性能并且可扩展。
Apache OpenJPA 也是一个 Java 持久性工具。 它可以用作独立的 POJO(普通旧 Java 对象)持久层。
Mybatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。Mybatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。Mybatis 可以使用简单的 XML 或注解进行配置和原生映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
该案例展示了如何使用 Mybatis 进行 User 对象的查询,包括 ResultMap 的定义、Mapper 接口的定义以及 Java 代码的处理过程。
首先,我们创建一个 User 实体类:
public class User {
private Integer id;
private String username;
private String password;
private String email;
// Getter and Setter methods
}
接下来,我们创建一个UserMapper.java
接口,定义一个方法用于查询 User:
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserMapper {
@Select("SELECT * FROM users WHERE username = #{username}")
User getUserById(String username);
}
然后,我们需要在application.properties
文件中配置 Mybatis:
mybatis.type-aliases-package=com.example.demo.entity
mybatis.mapper-locations=classpath:mapper/*.xml
接着,我们创建一个UserMapper.xml
文件,编写 SQL 查询语句:
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
<resultMap id="UserResultMap" type="com.example.demo.entity.User">
<id column="id" property="id" />
<result column="username" property="username" />
<result column="password" property="password" />
<result column="email" property="email" />
resultMap>
<select id="getUserById" resultMap="UserResultMap">
SELECT * FROM users WHERE username = #{username}
select>
mapper>
最后,我们创建一个 Java 类UserService
,用于处理 Mybatis 读取的数据:
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(String username) {
User user = userMapper.getUserById(username);
return user;
}
}
上述案例中,我们定义了一个getUserById
方法,该方法会根据传入的username
参数,从users
表中查询对应的 User 对象。UserMapper.xml
文件中定义了查询语句以及结果映射,将查询结果映射到User
实体类中。最后,UserService
类负责调用UserMapper
接口中的getUserById
方法,并返回查询到的 User 对象。
参考资料
What is an ORM – The Meaning of Object Relational Mapping Database Tools