import java.util.List;
import java.util.concurrent.Future;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.scheduling.annotation.Async;
import org.springframework.transaction.annotation.Transactional;
import com.my.domain.User;
/**
* 用户DAO 不需要添加@Repository注解
* Spring会自动为我们继承CrudRepository接口的接口创建实现类
* @author WANBGBOWE
*
*/
public interface UserRepository extends CrudRepository<User, Integer> {
//使用命名规范查询:fin 、findBy、read等
public User findByName(String name);
public List<User> findByNameAndAge(String name,String age);
//小于 生成的JQL:where age<?1
public List<User> findByAgeLessThan(String age);
//大于 生成的JQL:where age>?1
public List<User> findByAgeGreaterThan(String age);
//is null 生成的JQL:where age is null
public List<User> findByAgeIsNull(String age);
//like 生成的JQL:where age like ?1
public List<User> findByAgeLike(String age);
//使用@Query查询
@Query("select u from User u")
public List<User> getUser();
//更新第一种方式:命名化参数
@Transactional
@Modifying//修改标识,必须写
@Query("update User u set u.name=:name where u.age =:age ")
public int updateUserByAge(@Param("name")String name,@Param("age")String age);
//更新第二种方式:占位符
@Transactional //必须加事务,或者在调用的地方,否则不能正常执行
@Modifying//修改标识,必须写
@Query("update User u set u.name=?1,u.sex=?2 where u.age =?3 ")
public int updateUserByAge(String name,String sex ,String age);
//使用本地化查询 不支持翻页和动态的排序
@Modifying
@Query(value="select u.* from user u where u.name like %?1",nativeQuery=true)
public List<User> selctUserByNative(String name);
//异步的方法 返回的是单一的对象
@Async
public Future<User> findByAge(String age);
Spring技术内幕之Spring Data JPA-查询方式
最新推荐文章于 2023-10-13 18:43:33 发布