@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 如果想看文字多一点可以参考这个人的