0
JavaWeb博客系统后端-创建对应的DAO
拉大锯 发表于 2020-01-25 17:29 405

什么是DAO?

可能很多同学都听说过DAO,有些人念D、A、O,有些人念'到'。跟上课点名一样吧。

DAO原单词: Database access object 翻译过来大概是数据访问对象的意思。

可以理解为访问数据库的接口。

创建各个数据表的dao

我们前面添加的依赖是spring的jpa,但是同学们在学校里学的应该是myBatis,SSM嘛,springmvc、spring、mybatis。我们这里使用spring的jpa

一般来说,我们为每天个表创建一个DAO类,我们要操作哪张表的时候,直接通过对应的dao操作即可。

比如说,我们User表

UserDao

整一个UserDao接口

package net.sunofbeaches.dao;

import net.sunofbeaches.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<User, String> {
}

继承JpaSpecificationExecutor,我们可以看看里面有什么方法

/**
 * Interface to allow execution of {@link Specification}s based on the JPA criteria API.
 *
 * @author Oliver Gierke
 * @author Christoph Strobl
 */
public interface JpaSpecificationExecutor<T> {

	/**
	 * Returns a single entity matching the given {@link Specification} or {@link Optional#empty()} if none found.
	 *
	 * @param spec can be {@literal null}.
	 * @return never {@literal null}.
	 * @throws org.springframework.dao.IncorrectResultSizeDataAccessException if more than one entity found.
	 */
	Optional<T> findOne(@Nullable Specification<T> spec);

	/**
	 * Returns all entities matching the given {@link Specification}.
	 *
	 * @param spec can be {@literal null}.
	 * @return never {@literal null}.
	 */
	List<T> findAll(@Nullable Specification<T> spec);

	/**
	 * Returns a {@link Page} of entities matching the given {@link Specification}.
	 *
	 * @param spec can be {@literal null}.
	 * @param pageable must not be {@literal null}.
	 * @return never {@literal null}.
	 */
	Page<T> findAll(@Nullable Specification<T> spec, Pageable pageable);

	/**
	 * Returns all entities matching the given {@link Specification} and {@link Sort}.
	 *
	 * @param spec can be {@literal null}.
	 * @param sort must not be {@literal null}.
	 * @return never {@literal null}.
	 */
	List<T> findAll(@Nullable Specification<T> spec, Sort sort);

	/**
	 * Returns the number of instances that the given {@link Specification} will return.
	 *
	 * @param spec the {@link Specification} to count instances for. Can be {@literal null}.
	 * @return the number of instances.
	 */
	long count(@Nullable Specification<T> spec);
}

可以做什么事情呢?可以查询是吧!

  • 可以查询单个
  • 可以分页查询
  • 还可以分页查询
  • 可以统计个数

另外,我们也继承JpaRepository,有两个泛型,一个是T,一个是ID,T,也就是我们的对象类型,ID则是id的类型。我们的User里的id是字符串类型,所以我们这里是JpaRepository<User,String>

这个接口还继承了其他的接口,同学们可以点进去看看。主要包括一些增删该查的方法。

如果需要自定义的查询我们后面在使用的时候再去编写即可。

CategoryDao

以同样的方式,创建CategoryDao

package net.sunofbeaches.dao;

import net.sunofbeaches.pojo.Category;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public interface CategoryDao extends JpaSpecificationExecutor<Category>, JpaRepository<Category, String> {
}

ArticleDao

package net.sunofbeaches.dao;

import net.sunofbeaches.pojo.Article;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public interface ArticleDao extends JpaSpecificationExecutor<Article>, JpaRepository<Article, String> {
}

LooperDao

package net.sunofbeaches.dao;

import net.sunofbeaches.pojo.Looper;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public interface LooperDao extends JpaSpecificationExecutor<Looper>, JpaRepository<Looper, String> {
}

SettingsDao

package net.sunofbeaches.dao;

import net.sunofbeaches.pojo.Settings;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public interface SettingsDao extends JpaSpecificationExecutor<Settings>, JpaRepository<Settings, String> {
}

KpiDao

package net.sunofbeaches.dao;

import net.sunofbeaches.pojo.KpiDaily;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public interface KpiDao extends JpaSpecificationExecutor<KpiDaily>, JpaRepository<KpiDaily, String> {
}

ok啦,创建完了,我们后面接下去写controller吧!

评论
0/240
  • 独一无二的名字.
    怎么会评论了这么多条。。。
    2020-03-27 23:47  回复
    1239547734093037568
    • 独一无二的名字.
      迫不及待
      2020-03-27 23:46  回复
      1239547734093037568
      • 独一无二的名字.
        迫不及待
        2020-03-27 23:46  回复
        1239547734093037568
        • 独一无二的名字.
          迫不及待
          2020-03-27 23:46  回复
          1239547734093037568
          • 独一无二的名字.
            迫不及待
            2020-03-27 23:46  回复
            1239547734093037568
            • 独一无二的名字.
              迫不及待
              2020-03-27 23:46  回复
              1239547734093037568
              • yuan
                老哥我想问一下,我在阿里云上面买了一个轻量级应用服务器和一个esc再加上一个域名(绑在轻量应用服务器上了),我要如何把博客挂在域名上面,使我可以直接通过买的域名访问博客
                2020-03-23 02:46  回复
                1241797965698400256
                • 拉大锯  回复 @yuan
                  博客系统跑在你的服务器上咯,然后域名解析到你的服务器。访问域名就是访问你的服务器了,访问你的服务器就是访问你的博客系统啦。
                  拉大锯 2020-03-23 02:46   回复 1153952789488054272
              • 指尖跳动
                催更!催更!
                2020-03-20 12:23  回复
                1222889130006941696
                • 拉大锯  回复 @指尖跳动
                  我录完领券联盟先吧。
                  拉大锯 2020-03-20 12:23   回复 1153952789488054272
              文章目录