我在浏览一份文档时,遇到了一个叫做DAO的术语。我发现它是一个数据访问对象。谁能给我解释一下这到底是什么?
我知道它是一种用于访问来自不同类型数据源的数据的接口,在我的这个小研究中,我偶然发现了一个叫做数据源或数据源对象的概念,我的头脑中混乱了。
我真的想知道DAO在编程上是什么,以及它在哪里被使用。它是如何使用的?任何从最基本的东西解释这个概念的页面链接也很受欢迎。
我在浏览一份文档时,遇到了一个叫做DAO的术语。我发现它是一个数据访问对象。谁能给我解释一下这到底是什么?
我知道它是一种用于访问来自不同类型数据源的数据的接口,在我的这个小研究中,我偶然发现了一个叫做数据源或数据源对象的概念,我的头脑中混乱了。
我真的想知道DAO在编程上是什么,以及它在哪里被使用。它是如何使用的?任何从最基本的东西解释这个概念的页面链接也很受欢迎。
当前回答
我认为最好的例子(以及解释)你可以在oracle网站上找到:这里。另一个好的教程可以在这里找到。
其他回答
数据访问对象管理与数据源的连接,以获取和存储数据。它抽象了业务对象的底层数据访问实现,以支持对数据源的透明访问。 数据源可以是任何数据库,如RDBMS、XML存储库或平面文件系统等。
Pojo也可以作为Java中的Model类,我们可以在其中为私有定义的特定变量创建getter和setter。 记住所有变量都是用私有修饰符声明的
Spring JPA DAO
例如,我们有一些实体Group。
对于这个实体,我们创建存储库GroupRepository。
public interface GroupRepository extends JpaRepository<Group, Long> {
}
然后,我们需要创建一个服务层,我们将使用这个存储库。
public interface Service<T, ID> {
T save(T entity);
void deleteById(ID id);
List<T> findAll();
T getOne(ID id);
T editEntity(T entity);
Optional<T> findById(ID id);
}
public abstract class AbstractService<T, ID, R extends JpaRepository<T, ID>> implements Service<T, ID> {
private final R repository;
protected AbstractService(R repository) {
this.repository = repository;
}
@Override
public T save(T entity) {
return repository.save(entity);
}
@Override
public void deleteById(ID id) {
repository.deleteById(id);
}
@Override
public List<T> findAll() {
return repository.findAll();
}
@Override
public T getOne(ID id) {
return repository.getOne(id);
}
@Override
public Optional<T> findById(ID id) {
return repository.findById(id);
}
@Override
public T editEntity(T entity) {
return repository.saveAndFlush(entity);
}
}
@org.springframework.stereotype.Service
public class GroupServiceImpl extends AbstractService<Group, Long, GroupRepository> {
private final GroupRepository groupRepository;
@Autowired
protected GroupServiceImpl(GroupRepository repository) {
super(repository);
this.groupRepository = repository;
}
}
在控制器中,我们使用这个服务。
@RestController
@RequestMapping("/api")
class GroupController {
private final Logger log = LoggerFactory.getLogger(GroupController.class);
private final GroupServiceImpl groupService;
@Autowired
public GroupController(GroupServiceImpl groupService) {
this.groupService = groupService;
}
@GetMapping("/groups")
Collection<Group> groups() {
return groupService.findAll();
}
@GetMapping("/group/{id}")
ResponseEntity<?> getGroup(@PathVariable Long id) {
Optional<Group> group = groupService.findById(id);
return group.map(response -> ResponseEntity.ok().body(response))
.orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
}
@PostMapping("/group")
ResponseEntity<Group> createGroup(@Valid @RequestBody Group group) throws URISyntaxException {
log.info("Request to create group: {}", group);
Group result = groupService.save(group);
return ResponseEntity.created(new URI("/api/group/" + result.getId()))
.body(result);
}
@PutMapping("/group")
ResponseEntity<Group> updateGroup(@Valid @RequestBody Group group) {
log.info("Request to update group: {}", group);
Group result = groupService.save(group);
return ResponseEntity.ok().body(result);
}
@DeleteMapping("/group/{id}")
public ResponseEntity<?> deleteGroup(@PathVariable Long id) {
log.info("Request to delete group: {}", id);
groupService.deleteById(id);
return ResponseEntity.ok().build();
}
}
数据访问对象模式或DAO模式用于将低级数据访问API或操作与高级业务服务分开。以下是数据访问对象模式的参与者。
数据访问对象接口——这个接口定义了要在模型对象上执行的标准操作。
数据访问对象具体类——这个类实现了上面的接口。该类负责从数据源获取数据,数据源可以是database / xml或任何其他存储机制。
模型对象或值对象——该对象是简单的POJO,包含get/set方法,用于存储使用DAO类检索到的数据。
示例代码在这里..
我认为最好的例子(以及解释)你可以在oracle网站上找到:这里。另一个好的教程可以在这里找到。