在学习使用 Spring Data JPA 的时候,在做一个自定义模糊查询的时候,出了点问题,这里记录下。
目的:根据用户名模糊查询
工具:Spring+SpringMVC+Spring Data JPA
1、UserDao.java
2、UserService.java
3、UserServiceImpl.java
4、UserController.java
1、如图,这是 user 列表
2、我们在搜索框输入 zhangsan,如我们所愿
3、我们输入 zhang,查询结果为空
原因其实很简单,因为没有加 %%
知道原因就好办了,我们通常是不想在搜索框里输入%%的,而让程序帮我加上。
比如这里我们在 UserServiceImpl.java里加上的参数里加上 %%
重启服务器,现在就可以啦
使用 @Query 自定义查询语句
修改 UserDao.java
?1 表示第一个参数
效果和方法一是一样的。
本文地址:https://liuyanzhao.com/6805.html
目的:根据用户名模糊查询
工具:Spring+SpringMVC+Spring Data JPA
代码一览
1、UserDao.java
- package com.liuyanzhao.blog.dao;
- import com.liuyanzhao.blog.entity.User;
- import org.springframework.data.jpa.repository.JpaRepository;
- import java.util.List;
- /**
- * @author 言曌
- * @date 2017/11/28 下午3:31
- */
- public interface UserDao extends JpaRepository<User, Integer> {
- //根据学号查询
- List<User> findByUsernameLike(String username);
- }
2、UserService.java
- package com.liuyanzhao.blog.service;
- import com.liuyanzhao.blog.entity.User;
- import java.util.List;
- /**
- * @author 言曌
- * @date 2017/11/28 下午3:32
- */
- public interface UserService {
- //根据用户名查询模糊用户
- List<User> findByUsernameLike(String username);
- }
3、UserServiceImpl.java
- package com.liuyanzhao.blog.service.Impl;
- import com.liuyanzhao.blog.dao.UserDao;
- import com.liuyanzhao.blog.entity.User;
- import com.liuyanzhao.blog.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import javax.transaction.Transactional;
- import java.util.List;
- /**
- * @author 言曌
- * @date 2017/11/28 下午3:32
- */
- @Service
- @Transactional
- public class UserServiceImpl implements UserService {
- @Override
- public List<User> findByUsernameLike(String username) {
- return userDao.findByUsernameLike(username);
- }
- }
4、UserController.java
- package com.liuyanzhao.blog.controller;
- import com.liuyanzhao.blog.entity.User;
- import com.liuyanzhao.blog.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.servlet.ModelAndView;
- import javax.servlet.http.HttpServletRequest;
- import java.util.List;
- /**
- * @author 言曌
- * @date 2017/11/28 下午3:33
- */
- @Controller
- @RequestMapping(value = "/admin/user")
- public class UserController {
- @RequestMapping(value = "/search")
- public ModelAndView search(HttpServletRequest request) {
- ModelAndView modelAndView = new ModelAndView();
- String query = request.getParameter("query");
- List<User> userList = userService.findByUsernameLike(query);
- modelAndView.addObject("userList",userList);
- modelAndView.addObject("query",query);
- modelAndView.setViewName("/admin/user/list");
- return modelAndView;
- }
- }
二、效果图
1、如图,这是 user 列表
2、我们在搜索框输入 zhangsan,如我们所愿
3、我们输入 zhang,查询结果为空
三、问题原因,解决方案
原因其实很简单,因为没有加 %%
解决方案一、
知道原因就好办了,我们通常是不想在搜索框里输入%%的,而让程序帮我加上。
比如这里我们在 UserServiceImpl.java里加上的参数里加上 %%
- @Override
- public List<User> findByUsernameLike(String username) {
- return userDao.findByUsernameLike("%"+username+"%");
- }
重启服务器,现在就可以啦
解决方法二、
使用 @Query 自定义查询语句
修改 UserDao.java
- package com.liuyanzhao.blog.dao;
- import com.liuyanzhao.blog.entity.User;
- import org.springframework.data.jpa.repository.JpaRepository;
- import org.springframework.data.jpa.repository.Query;
- import java.util.List;
- /**
- * @author 言曌
- * @date 2017/11/28 下午3:31
- */
- public interface UserDao extends JpaRepository<User, Integer> {
- //根据用户名模糊查询
- @Query("select u from User u where u.username like %?1%")
- List<User> findByUsernameLike(String username);
- }
?1 表示第一个参数
效果和方法一是一样的。
本文地址:https://liuyanzhao.com/6805.html
2017年11月30日 04:36:18
这边第二个项目准备用spring boot+jpa了,来看看博主,以防踩坑哈哈。 安全方面推荐博主看看shiro,比spring security好用。