dao层和service层中对应操作

本文总结了在MyBatis框架下,CRUD操作的规范使用方式,包括select、update、insert和delete的具体实现,强调了在Service层与DAO层之间的调用规范,以及在实际开发中逻辑删除的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进行代码检查的时候,被同事发现了一个问题,dao层中不管是update,insert,delete还是select操作,统一用的是,但是我在使用的时候结果并没有错误,但为了规范,在此做一下总结,贴出代码留个教训。
代码检查错误
1、select操作
service层中:selectOne—>查找一条记录;select—>查找多条记录;返回值—>hashmap

Map<String, Object> selMap=commDAO.selectOne(KFSGL + "KFSGL_S", paramsMap);		
Map<String, Object> selMap=commDAO.select(KFSGL + "KFSXX_Q", paramsMap);

dao层中:

<!--单记录查找  -->
	<select id="KFSGL_S" parameterType="hashmap" resultType="hashmap">
		select ID,KFSMC,KFSDM,LXRXM,LXDH,LXRSM,YXDZ,TXDZ,KFSMS	
		from FW_SYPT_KFSJLB
		where ID=#{ID}	
	</select>
<!-- 多记录查询开发商信息 -->
	<select id="KFSXX_Q" parameterType="hashmap" resultType="hashmap">
		select id KFSID, KFSMC as KFS_XZ
		  from FW_SYPT_KFSJLB
         WHERE 1=1  AND YXBZ = '1'
    </select>

2、update操作
service层中:update—>更新;返回值—>int

if(id!=null&&id!=""){
	 temp=commDAO.update(KFSGL + "KFSGL_U", paramsMap);
}

dao层中:可以不写resultType,细节方面要注意

<update id="KFSGL_U" parameterType="hashmap">  
		update FW_SYPT_KFSJLB
		<set>
			<if test="KFSMC != null and KFSMC != ''"> KFSMC =#{KFSMC}, </if>
			<if test="KFSDM != null and KFSDM != ''"> KFSDM =#{KFSDM}, </if>
			<if test="LXRXM != null and LXRXM != ''"> LXRXM =#{LXRXM}, </if>
			<if test="LXDH != null and LXDH != ''">   LXDH =#{LXDH},   </if>
			<if test="LXRSM != null and LXRSM != ''"> LXRSM =#{LXRSM}, </if>
			<if test="YXDZ != null and YXDZ != ''">   YXDZ =#{YXDZ},   </if>
			<if test="TXDZ != null and TXDZ != ''">   TXDZ =#{TXDZ},   </if>
			<if test="KFSMS != null and KFSMS != ''"> KFSMS =#{KFSMS}, </if>
			<if test="CJR != null and CJR != ''">     CJR =#{CJR},     </if>
			CJSJ =sysdate
		</set>
		<where>
			ID = #{ID}
		</where>
	</update>

3、insert操作
service层中:insert—>插入;返回值—>int

temp=commDAO.insert(KFSGL + "KFSGL_I", paramsMap);

dao层中:可以不写resultType,细节方面要注意

<!-- 更新或者插入操作,默认有效标志为1 -->
	 <insert id="KFSGL_I" parameterType="hashmap">
		insert into FW_SYPT_KFSJLB(ID,KFSMC,KFSDM,LXRXM,LXDH,LXRSM,YXDZ,TXDZ,KFSMS,YXBZ,CJSJ,CJR)
		values(SEQ_SYPT_KFSJLB_ID.nextval,#{KFSMC},#{KFSDM},#{LXRXM},#{LXDH},#{LXRSM},#{YXDZ},#{TXDZ},{KFSMS},'1',sysdate,#{CJR})
	</insert>

4、delete操作
由于数据很重要,作用非常大,因此在实际开发中,基本上是不存在物理上的删除数据的,只是逻辑上的删除数据,仅仅只是让用户觉得自己删除了数据,实际开发中的delete一般用update操作来代替。这里为了总结,还是写一写delete操作。
service层中:delete—>删除;返回值—>int

temp=commDAO.delete(KFSGL + "KFSGL_D", paramsMap);

dao层中:可以不写resultType,细节方面要注意

<!-- 更新或者插入操作,默认有效标志为1 -->
	 <insert id="KFSGL_D" parameterType="hashmap">
		delete from FW_SYPT_KFSJLB  where id='#{id}'
	</insert>

5、总结
service层中统一调用了select(),用于进行update,insert,delete还是select操作(dao层配置sql语句还是没有改变,还是用了update,insert等等关键字),结果并没有错误,原因可能是因为service中查找mybatis中的配置信息时,仅仅还是根据id找到相应的sql语句进行执行,并没有匹配service中的函数调用是否和mybatis中配置的一样。但是这类问题要规避,因为现在没有问题不代表之后没有问题,缺陷都是隐藏在没有被发现,还是要注重规范。

### DAOServiceController的关系 DAO(Data Access Object)主要负责与数据库交互,执行增删改查等操作[^1]。其心职责是对数据库的具体操作进行抽象化,使得上无需关心底数据库实现细节。 Service位于DAO之上,作为业务逻辑的心部分,它调用了DAO的方法来完成特定的业务需求[^2]。Service不仅封装了复杂的业务流程,还通过组合多个DAO方法实现了更高级别的功能。每个模型通常对应一个Service接口及其对应的实现类,这些接口定义了该模块的服务能力。 Controller则处于最顶,它是应用与外部世界(通常是Web前端或其他客户端)沟通的桥梁[^3]。它的作用在于接收用户的请求并解析参数,随后调用相应的Service方法获取所需数据或执行某些动作,并最终将结果返回给用户[^4]。 因此,这之间形成了清晰的责任划分: - **DAO**专注于数据访问; - **Service**关注于业务逻辑处理; - **Controller**侧重于请求响应管理。 这种分架构有助于降低系统的复杂度,提高可维护性扩展性,同时也减少了不同次间的耦合程度。 ### 类图设计说明 为了更好地展示上述者间的关系以及它们内部可能存在的结构形式,可以绘制如下所示简化版UML类图: #### UML类图描述 以下是基于以上理论构建的一个简单示例类图的文字表述版本: - `UserDAO`继承自`BaseDAO<T>`泛型基类; - `UserService`依赖注入了一个实例化的对象——即上面提到过的`UserDAO`; - 接着,在`UserController`里边同样也存在对`UserService`类型的成员变量声明并通过构造函数等方式初始化赋值过程。 实际编码时可以通过Spring框架自动装配机制简化手动创建对象的过程。下面给出一段伪代码用于辅助理解此概念: ```java // 假设这是我们的DAO接口定义 public interface UserDAO extends BaseDAO<User> { Optional<User> findById(Long id); } @Service public class UserService { private final UserDAO userDAO; @Autowired // Spring 注入方式 public UserService(UserDAO userDAO){ this.userDAO = userDAO; } public List<User> getAllUsers(){ return (List<User>) userDAO.findAll(); } } @RestController @RequestMapping("/users") public class UserController { private final UserService userService; @Autowired public UserController(UserService userService){ this.userService = userService; } @GetMapping("/{id}") public ResponseEntity<?> getUserById(@PathVariable Long id){ var result = userService.findById(id); if(result.isPresent()){ return new ResponseEntity<>(result.get(), HttpStatus.OK); }else{ return new ResponseEntity<>("Not Found",HttpStatus.NOT_FOUND); } } } ``` 这段代码展示了如何在一个典型的Java Web应用程序中组织这个组件之间的相互关系。 ### 使用IDEA生成UML类图的实际步骤简介 如果希望快速得到项目的整体视图或者局部区域内的详细情况,则可以直接借助IntelliJ IDEA内置工具来自动生成所需的图形表示法[^5]。具体做法包括但不限于选中目标文件夹/包右键菜单选项中的【Diagrams】->【Show Diagram...】命令启动向导对话框按照提示逐步设置条件直至预览效果满意为止即可保存输出成果供后续分析研究用途所用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值