Spring JPA @Query学习

@Query顾名知义就是查询使用的,这里我先把准备条件的数据库sql贴出来,一共就三个参数非常的简单,对应实体类我就不贴出来了。

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

下面我们就开始吧(方法名字我随便取的)

//这里定义了一个dao的接口并且继承自SpringJpaRepository
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    /**Hql 语句 ?后面等于1代表下面第一个参数的对应此位置,多个参数依次类推*/
    @Query(value = "select u from User u where u.name= ?1")
    List<User> findHQLUser(String name);

    /**Sql 语句如果是原生sql必须要指明nativeQuery=true*/
    @Query(value = "select u.* from user u where u.name =?1",nativeQuery = true)
    List<User> findSQLUser(String name);

    /**Sql 语句2*/
    @Query(value = "select u.* from user u where u.name =:name",nativeQuery = true)
    List<User> findSQL2User(@Param("name")String name);

    /**Hql 语句2*/
    @Query(value = "select u from User u where u.name =:name")
    List<User> findHQL2User(@Param("name")String name);

    /**Sql 语句自动绑定*/
    @Query(value="select u.* from user u where u.name =?",nativeQuery = true)
    List<User> findSqlOrigin(String name);

    /**Hql 语句自动绑定*/
    @Query(value="select u from User u where u.name =?")
    List<User> findHqlOrigin(String name);

    /**属性分页*/
    @Query(value="select u from User u where u.name =?")
    List<User> findPageByName(String name, Pageable pageable);
}

然后我们进行单元测试来校验程序的正确性

@RunWith(SpringRunner.class)
@SpringBootTest(classes=BootApplication.class)
public class BootApplicationTest {

    @Autowired
    private UserRepository userRepository;

    /**因为实体类id我加了identity的所以是自增的,为了看出效果最好重复执行2次以上(没有使用事物回滚)*/
    @Test
    public void userRepositoryDemo1() throws Exception {
        //创建10条记录
        userRepository.save(new User("jdk1.0", 10));
        userRepository.save(new User("jdk1.1", 20));
        userRepository.save(new User("jdk1.2", 30));
        userRepository.save(new User("jdk1.3", 40));
        userRepository.save(new User("jdk1.4", 50));
        userRepository.save(new User("jdk1.5", 60));
        userRepository.save(new User("java6", 70));
        userRepository.save(new User("java7", 80));
        userRepository.save(new User("java8", 90));
        userRepository.save(new User("java9", 100));
        // 测试findAll, 查询所有记录
        System.out.println(userRepository.findAll().size());
    }

    /**我们来查询刚才插入的情况*/
    @Test
    public void userRepositoryDemo2()throws Exception{
        //HQL
        List<User> userHQL = userRepository.findHQLUser("jdk1.0");
        //请参照java8 lamda与stream
        userHQL.stream().forEach(System.out::println);
        //SQL
        List<User> userSQL = userRepository.findSQLUser("jdk1.1");
        userSQL.stream().forEach(System.out::println);
        //SQL2
        List<User> userSQL2 = userRepository.findSQL2User("jdk1.2");
        userSQL2.stream().forEach(System.out::println);
        //HQL2
        List<User> userHQL2 = userRepository.findHQL2User("jdk1.3");
        userHQL2.stream().forEach(System.out::println);
        //SQL origin
        List<User> userSQLOrigin = userRepository.findSqlOrigin("jdk1.4");
        userSQLOrigin.stream().forEach(System.out::println);
        //HQL origin
        List<User> userHQLOrigin = userRepository.findHqlOrigin("jdk1.5");
        userHQLOrigin.stream().forEach(System.out::println);
        //Pageable
        Sort sort = new Sort(Sort.Direction.DESC, "id");//id降序
        Pageable pageable = new PageRequest(1,1,sort);//第一页,每页显示10个
        List<User> pageList = userRepository.findPageByName("jdk1.5",pageable);
        pageList.stream().forEach(s->System.out.println("page->"+s));
    }
}

其实都是很简单的入门例子
http://blog.csdn.net/yingxiake/article/details/51016234 如果想看文字多一点可以参考这个人的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值