我应该如何将数据库表复制到可以在 Spring Boot Rest api 中使用的等效 Java bean 类中?
Posted
技术标签:
【中文标题】我应该如何将数据库表复制到可以在 Spring Boot Rest api 中使用的等效 Java bean 类中?【英文标题】:How should i replicate database table into equivalent java bean class which can be used in spring boot rest api? 【发布时间】:2020-06-21 02:08:44 【问题描述】:我的数据库表名称是 seller,其中包含列 seller_id(PK)(Auto Increment)、seller_name、seller_email强>等.. 这是 java bean 类 SellerBean
public class SellerBean
private Integer sellerId;
private String sellerName;
private String sellerEmail;
....
//Constructor & Getters-Setters
我为卖家注册创建了一个rest api方法,并使用Swagger作为api文档
@RestController
public class SellerRestController
@Autowired
SellerService sellerService;
@RequestMapping(value="seller/register",method = RequestMethod.POST)
public ResponseEntity<SellerBean> registerSeller(@RequestBody SellerBean sellerBean)
SellerBean seller = sellerService.registerSeller(sellerBean);
return new ResponseEntity<>(seller,HttpStatus.OK);
这里的问题是,当我通过 swagger UI 检查此方法时,此方法要求输入包含 SellerBean 的所有字段的 json,但我不希望询问(或被由用户输入) 有什么方法可以限制要求(或输入)的任何 bean 字段? (我必须在 SellerBean 中保留该 SellerId,因为我已经通过它执行了所有 CRUD 操作)
【问题讨论】:
【参考方案1】:您可以使用 JPA 来做到这一点。
这是一个小例子:
首先,您需要创建作为数据库表“镜像”的实体:
@Entity(name = "Seller")
@Table(name = "SELLER") // your table name
public class Seller
@Id
@Column(name = "id") // your column name
private Long id;
@Column(name = "name")
private String sellerName;
@Column(name = "email")
private String sellerEmail;
...
然后你可以使用 JpaRepository 和 CrudRepository 接口来做你想做的事:
@Repository
public interface Repository<Seller> extends JpaRepository<Seller, Long>
然后是一个 DAO:
public class SellerDaoImpl implements SellerDao
SellerRepository repository;
public SellerDaoImpl(SellerRepository repository)
this.repository = repository;
@Override
@Transactional
public Seller create(Seller toCreate)
return this.repository.save(toCreate);
您的服务应如下所示:
public SellerServiceImpl implements SellerService
SellerMapper mapper;
SellerDao dao;
public SellerServiceImpl(SellerMapper mapper, SellerDao dao)
this.mapper = mapper;
this.dao = dao;
@Override
@Transactional
public SellerDto registerSeller(SellerDto toRegister)
Seller entity = this.mapper.mapDto(toRegister);
return this.mapper.mapEntity(this.dao.create(entity));
您的 DTO(基本上是您的 SellerBean):
public class SellerDto
private String sellerName;
private String sellerEmail;
...
还有你的映射器:
public class SellerMapper
public SellerDto mapEntity(Seller entity)
if (entity == null)
return null;
SellerDto dto = new SellerDto();
dto.setSellerName(entity.getSellerName());
dto.setSellerEmail(entity.getSellerEmail());
...
return dto;
public Seller mapDto(SellerDto dto)
if (dto == null)
return null;
Seller entity = new Seller();
entity.setSellerName(dto.getSellerName());
entity.setSellerEmail(dto.getSellerEmail());
...
return entity;
别忘了 Bean 的配置:
@Configuration
@EnableJpaRepositories(basePackageClasses = SellerRepository.class)
@EntityScan(basePackageClasses = SellerConfiguration.class)
public class SellerConfiguration
@Bean
public SellerModelMapper sellerModelMapper()
return new SellerModelMapper();
@Bean
public SellerDao sellerDao(SellerRepository repository)
return new SellerDao(repository);
@Bean
public SellerService sellerService(SellerMapper mapper, SellerDao dao)
return new SellerService(mapper, dao);
【讨论】:
以上是关于我应该如何将数据库表复制到可以在 Spring Boot Rest api 中使用的等效 Java bean 类中?的主要内容,如果未能解决你的问题,请参考以下文章
oracle中如何将数据从一个表复制到另一个表(仅复制其中某些字段)