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

宜家设计装修怎么收费博客seo教程

宜家设计装修怎么收费,博客seo教程,跨境电子商务网页制作与网站建设,电子商务网站建设概述1. DAO 的核心职责 DAO(Data Access Object,数据访问对象)的主要职责是封装对数据的访问逻辑,但它与纯粹的数据实体类(如 DTO、POJO)不同,也与 Service 业务逻辑层不同。 DAO 应该做什么&…

1. DAO 的核心职责

DAO(Data Access Object,数据访问对象)的主要职责是封装对数据的访问逻辑,但它与纯粹的数据实体类(如 DTO、POJO)不同,也与 Service 业务逻辑层不同。

DAO 应该做什么?

✅ 数据访问操作

  • 执行数据库 CRUD(增删改查)操作

  • 提供查询接口(如 findByIdfindAllsavedelete

  • 处理数据库事务(通常由 @Transactional 管理)

✅ 数据转换

  • 将数据库实体(如 UserEntity)转换为业务对象(如 User

  • 处理数据库特有的数据类型(如 LocalDateTime 转换)

✅ SQL/HQL/JPQL 管理

  • 编写 SQL 查询(如 @Query 或 XML 映射)

  • 处理分页、排序等数据库操作

DAO 不应该做什么?

❌ 业务逻辑(属于 Service 层):

  • 例如:计算订单折扣、验证用户权限等

❌ HTTP 请求/响应处理(属于 Controller 层):

  • 例如:解析 @RequestBody、返回 ResponseEntity

❌ 直接暴露数据库细节

  • 例如:不应该让上层直接接触 Connection 或 PreparedStatement


2. DAO 与实体类的区别

类别DAO 类实体类(Entity/DTO)
用途封装数据访问逻辑表示数据结构(数据库表或 API 数据)
是否含逻辑有简单的查询逻辑通常只是数据容器(纯 POJO)
示例UserRepository.findByName()User { id, name, email }
Spring 注解@Repository@Entity(JPA)或 无注解(DTO)

3. DAO 的典型实现方式

(1) Spring Data JPA(推荐)

@Repository
public interface UserRepository extends JpaRepository<User, Long> {// 自动实现基本 CRUDList<User> findByName(String name);  // 方法名自动解析为 SQL@Query("SELECT u FROM User u WHERE u.email LIKE %?1%")List<User> findByEmailContaining(String email);
}

特点

  • 方法名自动生成查询(如 findByName → SELECT * FROM user WHERE name = ?

  • 支持 @Query 自定义 SQL/JPQL

(2) MyBatis(SQL 更灵活)

@Repository
public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")User findById(Long id);@Insert("INSERT INTO user(name, email) VALUES(#{name}, #{email})")void insert(User user);
}

特点

  • 直接写 SQL,适合复杂查询

  • 需配合 XML 或注解映射

 (3) 传统 JDBC(低层控制)

@Repository
public class UserDao {@Autowiredprivate JdbcTemplate jdbcTemplate;public User findById(Long id) {String sql = "SELECT * FROM user WHERE id = ?";return jdbcTemplate.queryForObject(sql, new UserRowMapper(), id);}
}

特点

  • 完全手动控制 SQL 和执行过程

  • 适合需要高度优化的场景

4. DAO 与 Service 的分工

DAO 层

@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {List<Order> findByUserId(Long userId);
}

Service 层(业务逻辑)

@Service
public class OrderService {@Autowiredprivate OrderRepository orderRepository;public BigDecimal calculateTotalPrice(Long userId) {List<Order> orders = orderRepository.findByUserId(userId);return orders.stream().map(Order::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);}
}

关键区别

  • DAO 只关心怎么查数据findByUserId

  • Service 关心业务计算(如汇总订单金额)


5. 最佳实践

  1. 保持 DAO 单一职责

    • 只做数据访问,不混入业务逻辑。

  2. 使用接口 + 实现

    • 便于替换数据源(如从 MySQL 切到 MongoDB)。

  3. 避免“贫血 DAO”

    • 如果 DAO 只是简单调用 JPA/MyBatis,可以直接用 Repository,无需额外封装。

  4. 事务管理

    • 事务注解(@Transactional)通常放在 Service 层。

DAO(Data Access Object)层 在大多数现代Java应用中,特别是使用 MyBatis 或 JPA 框架时,通常对应你所说的 Mapper 类。不过具体实现方式可能略有不同,取决于你使用的技术栈。下面详细解释它们的关系和区别:

DAO 层和 Mapper 的关系

概念DAO(数据访问对象)Mapper(MyBatis 术语)
定位数据访问层,封装数据库操作MyBatis 对 DAO 的实现方式
技术实现可以是接口或类通常是接口(MyBatis)或 XML 映射文件
Spring 注解@Repository@Mapper(MyBatis)或 @Repository
典型方法insert(User user)findById(Long id)@Select@Insert 等 SQL 注解方法

结论

  • DAO 是一个设计概念,表示数据访问层。

  • Mapper 是 MyBatis 对 DAO 的具体实现方式(用接口+注解或XML定义SQL)。

  • 在 Spring + MyBatis 组合中,Mapper ≈ DAO


总结

  • DAO 类:负责数据访问(查询/存储),有简单逻辑(如 SQL 拼接),但不包含业务规则

  • 实体类:纯数据结构,无逻辑,用于表示数据库表或 API 数据。

  • Service 类:处理业务逻辑,调用 DAO 并组合数据。

合理分层能让代码更清晰、更易维护! 

http://www.dtcms.com/wzjs/397689.html

相关文章:

  • 东莞网站建设 餐饮专业软文发稿平台
  • 深圳盐田网站建设杭州龙席网络seo
  • php除了做网站还能做什么国内搜索引擎有哪些
  • 做电商网站一般需要什么流程长沙seo招聘
  • ppt网站链接怎么做百度的推广方式有哪些
  • 纸箱 东莞网站建设超八成搜索网站存在信息泄露问题
  • 网站设计是什么专业百度关键词搜索引擎
  • 找人做网站源代码会给你吗培训学校加盟费用
  • 杭州网站建设关键词优化精灵
  • 数据做图网站有哪些内容谷歌浏览器官网下载安装
  • 网站怎么做支付seo搜索引擎优化知乎
  • 济南企业建站哪家做的好济南专业seo推广公司
  • 迁安网站开发广告代运营公司
  • 自己做一元夺宝网站网络营销渠道的特点
  • 防伪网站怎么做网站推广优化的公司
  • 设计与绘制一个网站首页北京债务优化公司
  • 网站制作教学关键词密度查询站长工具
  • 电子商务网站域名注册方法国内搜索引擎优化的公司
  • 佛山网站建设公司电话推广软文发稿
  • 建网站跟建网店的区别今日头条新闻最新
  • 昭通市公安局网站是谁做的百度扫一扫识别图片
  • 桂林旅游网站制作搜索引擎关键词广告
  • 网站建设规划书的目的重庆seo服务
  • 企业网站备案需要什么资料seo推广公司有哪些
  • 企业管理培训课程定制北京seo人员
  • react做的电商网站能上线吗搜索引擎营销经典案例
  • 百度云注册域名可以做网站明码windows优化软件
  • 微网站 布局北京官方seo搜索引擎优化推荐
  • 网站运营面试问题百度端口开户推广
  • 德州网站设计2345网址大全