谷歌上怎样做网站,网站建设 王卫洲,WordPress 网格布局,购物最便宜的平台目录 Dao层的作用Dao层的特点与 Service 层和 Controller 层的关系实例介绍MenuDaoOperatorLogDaoRoleDaoUserDao四个文件的共同点引用的包使用Repository注解继承JpaRepository接口接口的实体类的主键类型使用 Query()注解 Dao层的作用
负责与数据库进行交互#xff0c;主要… 目录 Dao层的作用Dao层的特点与 Service 层和 Controller 层的关系实例介绍MenuDaoOperatorLogDaoRoleDaoUserDao四个文件的共同点引用的包使用Repository注解继承JpaRepository接口接口的实体类的主键类型使用 Query()注解 Dao层的作用
负责与数据库进行交互主要负责数据的查询和更新。Dao层用于封装数据库访问的细节为上层业务逻辑提供数据操作服务。
Dao层的特点
Dao 层是独立的与 Service 层和 Controller 层无直接关系便于维护和扩展。使用面向接口编程提高代码的灵活性和可扩展性。Dao层通常指的是数据访问对象Data Access Object层它通常是一个接口而不是一个类。使用接口而不是类可以实现松耦合方便替换不同的数据库实现。
与 Service 层和 Controller 层的关系
Dao 层位于 Service 层和 Controller 层之间负责数据的查询和更新。Service 层调用 Dao 层的方法进行数据的操作。Controller 层负责处理 HTTP 请求调用 Service 层的方法最终返回给前端页面。
实例介绍
MenuDao
package hanshuhuan.test.dao.admin;import hanshuhuan.test.entity.admin.Menu;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;Repository
public interface MenuDao extends JpaRepositoryMenu, Long {//从Menu表中选择所有id等于:id的记录Query(select m from Menu m where m.id :id)//它接收一个Long类型的参数id//使用上面定义的查询语句来查找Menu表中id等于:id的记录//如果找到了这样的记录就返回这个记录如果没有找到就返回一个空的Menu对象Menu find(Param(id)Long id);
}OperatorLogDao
package hanshuhuan.test.dao.admin;
import java.util.List;import hanshuhuan.test.entity.admin.OperaterLog;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;Repository
public interface OperatorLogDao extends JpaRepositoryOperaterLog, Long {Query(select ol from OperaterLog ol where id :aaid)OperaterLog find(Param(aaid)Long id);Query(valueselect * from hansh_operator_logs order by creat_time desc limit 0,:size,nativeQuerytrue)ListOperaterLog findLastestLog(Param(size)int size);
}RoleDao
package hanshuhuan.test.dao.admin;
import hanshuhuan.test.entity.admin.Role;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;Repository
public interface RoleDao extends JpaRepositoryRole, Long {Query(select r from Role r where r.id :id)Role find(Param(id)Long id);
}
UserDao
package hanshuhuan.test.dao.admin;import hanshuhuan.test.entity.admin.User;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;Repository
public interface UserDao extends JpaRepositoryUser, Long{public User findByUsername(String username);Query(select u from User u where id :id)public User find(Param(id)Long id);
}四个文件的共同点
引用的包
都有一个相应的实体【MenuDao-Menu】【OperatorLogDao-OperatorLog】【RoleDao-Role】【UserDao-User】。
使用Repository注解
Repository注解在Spring框架中用于标记数据访问层DAL的类当使用这个注解时Spring会自动将这些类注册为Bean并在需要时自动注入到其他Bean中【通过使用Spring Boot的Bean开发者可以更轻松地管理和配置应用程序的组件】。在相应的DAO类上使用Repository注解Spring会自动管理这些类的生命周期并在需要时自动注入到其他需要使用这些DAO类的类中。
继承JpaRepository接口
JpaRepository是一个用于简化数据库操作的接口它提供了基本的增删查改方法。
接口的实体类的主键类型
均为Long表示泛型参数的类型这个泛型参数的作用是限制该接口的方法只能操作主键类型为Long的实体类以确保方法的返回值和参数类型的一致性。
使用 Query()注解
Query() 是一个用于在 Spring Data JPA中定义查询方法的注解。它可以用于自定义基于实体类的查询方法允许在方法上定义一些元数据来描述查询例如查询名称、查询类型、查询条件等。使用 Query() 的语法如下
Query(query SELECT * FROM entity WHERE id :id, nativeQuery true)
ListEntity findById(Param(id) Long id); 其中query 属性用于指定查询语句可以包含占位符来表示参数值。如果需要使用 nativeQuery 属性则必须将 nativeQuery 属性设置为 true,并且查询语句必须使用 JPQL 或 SQL 方言。