苏州新区网站制作公司,做模型挣钱的网站,前海艾爻网站 建设,wordpress说说插件前言#xff1a;
注意#xff0c;本篇不适用于有相关开发经验的开发者#xff0c;作为一个在职开发者#xff0c;我经常在完成从0-1的模块#xff0c;也就是从数据库表开始到创建实体类#xff0c;以及dao层#xff0c;Service层等业务需要添加相关注解#xff0c;这样…前言
注意本篇不适用于有相关开发经验的开发者作为一个在职开发者我经常在完成从0-1的模块也就是从数据库表开始到创建实体类以及dao层Service层等业务需要添加相关注解这样就经常忘掉相关注解导致项目启动不起来这篇博文算是博主在开发中的纪录或者总结吧对于有相关开发经验的开发者你可以移步了本文对你来说没得一点收获仅仅就是博主在自己开发过程中的相关总结了。
我们一般进行开发的时候会要求先设计数据库我想数据库设计大部分都是上级给你设计好了吧我相信大部分情况下各位都是采用上级的设计好的数据库但是也有时候上级会要你自己设计但不管是上级设计好数据还是你自己设计数据库相关实体类Dao层Service层Service实现层Dao映射层以及控制层这几个地方的注解以及接口稍微出一点问题你的项目可能就跑不起来相应的模块甚至他会说找不到你所调用的方法。
踩过几次坑但让我记住我还真不一定每次都记得故此在这里记录一下算是给我自己一个查询错误的机会。
在Java中我们在Spring Boot框架中通常使用相关注解来标识不用的层级组件下面和我一起看一下呗
Mapper层
Mapper层或者称为Dao层数据访问层 Mapper标识Mapper接口用于与数据库进行交互的数据访问层组件。 Repository作为通用的注解也可以用于标识Mapper接口表示它是一个仓库组件。
Mapper
Repository
public interface YourMapper {// Mapper方法定义
}
注意Spring Boot中我们喜欢将Mapper放到Spring Boot启动类中如下 如果我们没有在Dao层配置Mapper,那么我们就需要在启动类里边添加MapperScan避免产生找不到Mapper文件。
Service层
Service层业务逻辑层 Service标识Service类用于实现业务逻辑的组件。
Service
public class YourService implements YouInterface{// Service方法实现
}控制层
Controller标识Controller类用于处理HTTP请求和响应的组件。 RestController与Controller类似但它还包含了ResponseBody注解用于直接返回响应数据。
Controller
public class YourController {// 控制层方法实现
}或者
RestController
RequestMapping(/**)
public class YourController {// 控制层方法实现
}Mapper层对应的映射文件
?xml version1.0 encodingUTF-8?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.*.YourMapper这里强调一下namespace需要和YouMapper中的Dao层名称必须一样否则就算你映射上去了他也找不到对应的Mapper里边的SQL方法
案例
要在MyBatis中插入一个List对象到数据库中你可以使用批量插入的方式来实现。
DAO
DAO层 在DAO层可以定义与数据库交互的方法并使用MyBatis的注解或XML配置来实现具体的数据操作。
Mapper
public interface YourMapper {void insertList(ListYourObject list);
}DAO映射文件
在Mapper XML文件中编写对应的SQL语句
insert idinsertList parameterTypejava.util.ListINSERT INTO your_table (column1, column2, ...) VALUESforeach collectionlist itemitem separator,(#{item.property1}, #{item.property2}, ...)/foreach
/insertService接口
public interface YourService {// Service方法定义void insertList(ListYourObject list);
}就一个单一的接口其他无任何属性添加没有添加任何注解。它用于定义Service层的方法契约具体的业务逻辑实现则由对应的Service实现类来完成。
Service实现层
Service层 在Service层可以定义业务逻辑的方法并调用DAO层的方法来实现数据访问和操作。
Service
public class YourService implements YouServiceInterface{Autowiredprivate YourMapper yourMapper;//一般我们在做增删改查的时候需要做事务回滚OverrideTransactionalpublic void insertList(ListYourObject list) {ListObject list ...; // 前端传递的ListObjectfor (Object obj : list) {if (obj instanceof YourObject) {YourObject yourObject (YourObject) obj;ListObject list1 yourObject.getList1();// 对list1进行操作}}yourMapper.insertList(list);}
}YourService类使用Service注解标识为Service组件并通过Autowired注解注入了YourMapper对象。insertList方法调用了YourMapper中的insertList方法来实现批量插入。
我遍历了前端传递的ListObject并判断每个元素是否为YourObject类型。如果是则将其转换为YourObject对象并通过getList1()方法获取嵌套的ListObject。
insertList(ListYourObject list)方法在出现异常时回滚事务你可以使用Spring的事务注解来实现。
具体来说可以在你的服务类中添加Transactional注解这将会将该方法标记为一个事务。当该方法执行时如果出现异常事务将会回滚确保之前的操作都被撤销。
控制层Controller
RestController
RequestMapping(/your-api)
public class YourController {Autowiredprivate YourService yourService;PostMapping(/insert-list)public ResponseEntityString insertList(RequestBody ListYourObject list) {yourService.insertList(list);return ResponseEntity.ok(Insert success);}
}YourController类使用RestController注解标识为控制器组件并使用RequestMapping注解定义了接口的基础路径。YourController类通过Autowired注解注入了YourService对象。
insertList方法使用PostMapping注解标识为POST请求并使用RequestBody注解将请求体中的JSON数据映射为List对象。insertList方法调用了YourService中的insertList方法来实现批量插入。