(二)SpringDate jpa的使用和自定义sql语句

sping Data jpa 的使用

一.调用封装好了的接口

1.1方法定义规范

在这里插入图片描述

1.2 封装接口案例

此案例写在了测试类中

    @Test
    void test06() {
        List<User> list = userDao.findUserByUsernameStartingWith("赵");
        for (User user : list) {
            System.out.println("user = " + user);
        }
        System.out.println("================================");
        List<User> user = userDao.findUserByUsernameStartingWithAndAddressEquals("赵", "广州");
        System.out.println("user = " + user);
    }

    @Test
    void test05() {
        //页码从 0 开始计
        Pageable pageable = PageRequest.of(1, 2);
        Page<User> page = userDao.findAll(pageable);
        System.out.println("总记录数= " + page.getTotalElements());
        System.out.println("总页数 = " + page.getTotalPages());
        System.out.println("查询结果 = " + page.getContent());
        System.out.println("当前页的记录数 = " + page.getNumberOfElements());
        System.out.println("页码 = " + page.getNumber());
        System.out.println("是否是最后一页 = " + page.isLast());
        System.out.println("是否第一页 = " + page.isFirst());

    }

    @Test
    void test04() {
        //按照 id 倒序查询
        List<User> list = userDao.findAll(Sort.by(Sort.Direction.DESC, "id"));
        for (User user : list) {
            System.out.println("user = " + user);
        }
    }

    @Test
    void test03() {
        //根据 id 查询用户
        Optional<User> optional = userDao.findById(2);
        User user = optional.get();
        System.out.println("user = " + user);
    }

    @Test
    void test02() {
        userDao.deleteById(1);
    }

    @Test
    void test01() {
        User u = new User();
        u.setId(1);
        u.setAddress("深圳");
        //如果id存在,则更新,否则添加
        //默认是更新所有字段,建议更新的时候,先查询,再更新
        userDao.saveAndFlush(u);
    }

    @Test
    void contextLoads() {
        User u = new User();
        u.setUsername("张三");
        u.setAddress("广州");
        userDao.save(u);
    }


1.3 自定义sql语句—使用 @Query 注解

1.3.1 自定义查询

例子一:Id最大的用户的信息
UserDao层

	 @Query(value = "select * from t_user where id=(select max(id) from t_user)"
	 ,nativeQuery = true)
    User maxIdUser();

Test


    @Test
    void maxIdUser(){
        System.out.println("userDao.maxIdUser() = " + userDao.maxIdUser());
    }

注意:

nativeQuery = true,以执行原生sql语句,所谓原生sql,也就是说这段sql拷贝到数据库中,然后把参数值给一下就能运行了
nativeQuery = false时,就不是原生sql,而其中的select * from xxx中xxx也不是数据库对应的真正的表名,而是对应的实体名,并且sql中的字段名也不是数据库中真正的字段名,而是实体的字段名(少去用,Hql的东西)

1.4 自定义数据修改sql(增、删除、改)语句-- @Query+@Modifying注解

1.如果自定义的SQL,涉及到数据修改,那么需要这个注解@Modifying
2.数据修改都是update语句
3.涉及到增删改的操作必须在事务内执行,用@Transactional开启事务
4.测试类如果添加了事务会默认回滚事务(底层原理,避免太多脏数据),用@Rollback(false)让事务不回滚

例子一:
Dao层

  //原生的sql查询
//    @Query(value = "update t_user set address=?1 where id=?2",nativeQuery = true)
    @Query(value = "update t_user set address=:address where id=:id",nativeQuery = true)

        //如果自定义的SQL,涉及到数据修改,那么需要这个注解
        @Modifying
    int updateAddressById(@Param("address") String address, @Param("id") Integer id);


Test

    //原生的sql查询
//    @Query(value = "update t_user set address=?1 where id=?2",nativeQuery = true)
    @Query(value = "update t_user set address=:address where id=:id",nativeQuery = true)

    //如果自定义的SQL,涉及到数据修改,那么需要这个注解
    @Modifying
    int updateAddressById(@Param("address") String address, @Param("id") Integer id);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值