DAO
的术语。我发现它是一个数据访问对象。有人可以解释一下这到底是什么吗?我知道它是一种用于从不同类型的数据源访问数据的接口,而在我的研究过程中,我还遇到了一个叫做数据源或数据源对象的概念,这更加让我困惑。
我真的想知道在编程中,
DAO
是如何使用的。它是如何使用的?如果有任何解释这个概念的基础知识的页面链接,我也会很感激。public class Employee {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Employee
表中。
一个简单的DAO接口用于处理操纵员工实体所需的数据库操作,如下所示:interface EmployeeDAO {
List<Employee> findAll();
List<Employee> findById();
List<Employee> findByName();
boolean insertEmployee(Employee employee);
boolean updateEmployee(Employee employee);
boolean deleteEmployee(Employee employee);
}
接下来,我们需要为该接口提供具体实现以处理SQL服务器,以及另一种处理平面文件等。
什么是数据访问对象(DAO) -
它是一个对象/接口,用于从数据存储的数据库中访问数据。
为什么我们要使用DAO:
将数据检索与数据资源(如数据库)分离。
概念是"将数据资源的客户端界面与其数据访问机制分开。"
直接访问数据的问题在于数据源可能会更改。例如,考虑您的应用程序部署在访问Oracle数据库的环境中。然后它随后部署到使用Microsoft SQL Server的环境中。如果您的应用程序使用存储过程和特定于数据库的代码(例如生成数字序列),则如何在应用程序中处理它?你有两个选择:
DAO模式由以下内容组成:
- Data Access Object接口 - 此接口定义要执行的标准操作模型对象(s)。
- Data Access Object具体类 - 此类实现上述接口。这个类负责从数据源获取数据,可以是数据库/xml或任何其他存储机制。
- 模型对象或值对象 - 此对象是简单的POJO,包含用DAO类检索的数据的get/set方法。
我希望这已经澄清了您对DAO的理解!
我会尽力帮忙翻译,以下是涉及到IT技术的内容,为了确保准确性,我会尽量在不改变原意的情况下使其更加通俗易懂。请注意不要删除或更改HTML标签。
我将不针对Java进行专业描述,因为DAO和ORM在所有编程语言中都有应用。
要理解DAO,您首先需要了解ORM(对象关系映射)。这意味着,如果您有一个名为“person”的表,其中包含“name”和“age”两列,那么您需要创建该表的对象模板:
type Person {
name
age
}
list persons = DAO.getPersons();
...
person = DAO.getPersonWithName("John");
age = person.age;
你不需要亲自编写DAO抽象层,通常情况下,它是一些开源项目的一部分,具体取决于你所使用的语言和框架。
现在来到这里的主要问题:“..它被用在哪里..”。通常情况下,如果你正在编写复杂的业务和特定领域的代码,如果没有DAO,你的生活将会非常困难。当然,你不必使用提供的ORM和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类用于重用JDBC逻辑,Dao(Data Access Object)是一种设计模式。dao是一个简单的Java类,其中包含JDBC逻辑。
数据访问层在将业务逻辑层和持久层分离方面表现出色。DAO设计模式完全隐藏了其客户端的数据访问实现。
Java数据访问对象(Java DAO)是业务应用程序中的重要组件。业务应用程序几乎总是需要从关系型或对象数据库中访问数据,而Java平台提供了许多访问这些数据的技术。最古老且最成熟的技术是使用Java数据库连接(JDBC)API,它提供了执行针对数据库的SQL查询并逐个获取结果列的能力。