使用JPA
一、概念
Entity:表示数据库中的表,映射到Java类。
DAO:用于封装对数据库的访问逻辑。
DTO:用于在层之间传输数据。
二、关联
Entity类直接与数据库表映射,是持久化类,通常用JPA注解标识。一个Entity类对应数据库中的一张表。
DAO接口或类包含CRUD操作,用于操作Entity对象,与数据库交互。
DTO类是数据传输对象,用于将数据在不同层(例如,服务层和控制层)之间传递,通常不包含业务逻辑,仅包含数据。一般用于前后端分离架构,封装返回给前端数据格式,也减少网络的数据传输。
Entity类如何书写
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
// Getters and Setters
}
DAO接口如何书写
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
DTO类如何书写
public class UserDTO {
private Long id;
private String username;
// Getters and Setters
}
服务层使用DAO和DTO
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public UserDTO getUserByUsername(String username) {
User user = userRepository.findByUsername(username);
UserDTO userDTO = new UserDTO();
userDTO.setId(user.getId());
userDTO.setUsername(user.getUsername());
return userDTO;
}
}
使用Mybatis
一、概念
1. Entity:同样是与数据库表映射的Java类。
2. DAO:对应的是MyBatis的Mapper接口,定义SQL映射。
3. DTO:用于在层之间传输数据,和JPA中相同。
Entity类如何书写
public class User {
private Long id;
private String username;
private String password;
// Getters and Setters
}
Mapper接口(DAO)如何书写
import org.apache.ibatis.annotations.*;
public interface UserMapper {
@Select("SELECT * FROM users WHERE username = #{username}")
User findByUsername(@Param("username") String username);
@Insert("INSERT INTO users(username, password) VALUES(#{username}, #{password})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insertUser(User user);
}
Mapper XML文件
<?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.example.mapper.UserMapper">
<select id="findByUsername" parameterType="String" resultType="com.example.entity.User">
SELECT * FROM users WHERE username = #{username}
</select>
<insert id="insertUser" parameterType="com.example.entity.User">
INSERT INTO users(username, password) VALUES(#{username}, #{password})
<selectKey keyProperty="id" resultType="Long" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
</mapper>
DTO类如何书写
public class UserDTO {
private Long id;
private String username;
// Getters and Setters
}
服务层使用Mapper和DTO
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public UserDTO getUserByUsername(String username) {
User user = userMapper.findByUsername(username);
UserDTO userDTO = new UserDTO();
userDTO.setId(user.getId());
userDTO.setUsername(user.getUsername());
return userDTO;
}
}