springBoot整合springdata Jpa的基本使用以及带条件的分页查询

23 篇文章 0 订阅
10 篇文章 0 订阅

一、springBoot整合springData Jpa

在application.properties中声明启用如下:

spring.datasource.name=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/mst?useSSL=false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.aliba
#Spring Data JPA
spring.jpa.database=MYSQL
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.show-sql=trueba.druid.pool.DruidDataSource

开启springData Jpa自动配置

pom.xml文件

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

这里使用的Druid数据源,则创建配置类

@Configuration
public class DruidConfig {

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid(){
        return  new DruidDataSource();
    }

    /**
     * 配置Druid的监控
     *     1、配置一个管理后台的Servlet
     */

    @Bean
    public ServletRegistrationBean<StatViewServlet> statViewServlet(){
        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        Map<String,String> initParams = new HashMap<>(5);

        initParams.put("loginUsername","admin");
        initParams.put("loginPassword","123456");
        //默认就是允许所有访问
        initParams.put("allow","");
        initParams.put("deny","localhost");

        bean.setInitParameters(initParams);
        return bean;
    }


    /**
     * 2、配置一个web监控的filter
     */
    @Bean
    public FilterRegistrationBean<WebStatFilter> webStatFilter(){
        FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>();
        bean.setFilter(new WebStatFilter());

        Map<String,String> initParams = new HashMap<>(5);
        initParams.put("exclusions","*.js,*.css,/druid/*");

        bean.setInitParameters(initParams);

        bean.setUrlPatterns(Collections.singletonList("/*"));

        return  bean;
    }

}

二、jpa基本使用

1.方法名的使用

只要满足一定的规范,方法名即可操作数据库。如:

public interface UserDao extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {
    /**
     * findUserByUsernameAndPassword
     * @param name name
     * @param password password
     * @return User
     */
    User findUserByLoginNameAndPassword(String name, String password);

    /**
     * updataPasswordById
     * @param id id
     * @param newPasseord newPasseord
     */
    @Modifying
    @Query("update User u set u.password=:newPasseord where u.id=:id")
    void updatePasswordById(@Param("id") Integer id, @Param("newPasseord") String newPasseord);

    /**
     * deleteUserById
     * @param id id
     */
    @Modifying
    void deleteUserById(Integer id);

    /**
     * findUserById
     * @param id id
     * @return User
     */
    User findUserById(Integer id);
}

如果你是用的idea则会提示。

注意:如果该方法是update或者delete必须在方法上加入注解@Modifying,insert不能使用该规范

2.@Query注解的使用

如果方法较为麻烦,或者参数不按方法的顺序,则可使用该注解

@Modifying
    @Query("update User u set u.password=:newPasseord where u.id=:id")
    void updatePasswordById(@Param("id") Integer id, @Param("newPasseord") String newPasseord);

三、Jpa的带条件分页使用

使用Specification方法实现分页功能,该方法dao层必须继承JpaSpecificationExecutor接口

/**
     * 获取menu list
     * @return  List<Menu>
     *
     */
    @Override
    public List<Menu> getMenuList(HttpServletRequest request) {
        String pid1 = request.getParameter("pid");
        int pid = (pid1 == null || "".equals(pid1.trim())) ?-1:Integer.parseInt(pid1);
        String menuName = request.getParameter("menuname");
        String url = request.getParameter("url");
        String icon = request.getParameter("icon");
        String page1 = request.getParameter("page");
        int page = (page1 == null || "".equals(page1.trim()))?-1:Integer.parseInt(page1);
        String rows1 = request.getParameter("rows");
        int rows = (rows1 == null || "".equals(rows1.trim()))?-1:Integer.parseInt(rows1);

        Specification<Menu> specification = getMenuSpecification(pid, menuName, url, icon);
        int firstResult = (page -1) * rows;
        Pageable pageable = new PageRequest(firstResult, rows);
        return menuDao.findAll(specification,pageable).stream().collect(Collectors.toList());
    }

    /**
     * 带条件的分页查询
     * @param pid pid
     * @param menuName menuName
     * @param url url
     * @param icon icon
     * @return Specification
     */
    private Specification<Menu> getMenuSpecification(int pid, String menuName, String url, String icon) {
        return (Specification<Menu>) (root, criteriaQuery, criteriaBuilder) -> {
            Predicate predicate = criteriaBuilder.conjunction();
            if (pid != -1) {
                predicate.getExpressions().add(criteriaBuilder.equal(root.get("pid"), pid));
            }
            if (menuName != null && !"".equals(menuName.trim())) {
                predicate.getExpressions().add(criteriaBuilder.equal(root.get("menuname"), menuName));
            }
            if (url != null && !"".equals(url.trim())) {
                predicate.getExpressions().add(criteriaBuilder.equal(root.get("url"), url));
            }
            if (icon != null && !"".equals(icon.trim())) {
                predicate.getExpressions().add(criteriaBuilder.equal(root.get("icon"), icon));
            }
            return predicate;
        };
    }

注意:stream().collect(Collectors.toList());

这个方法是Java jdk1.8以后的版本才有的

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值