package com.example.demo.mapper.user;
import com.example.demo.entity.user.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.jpa.repository.JpaRepository;
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.Repository;
import java.util.List;
/**
* Create with IntelliJ IDEA.
*
* @author: [email protected]
* Date: 2018/9/17
* Time: 20:23
*/
@Mapper
public interface UserRepository extends JpaRepository<User, Integer>, Repository<User, Integer>
, CrudRepository<User, Integer> {
//使用佔位符來進行數據庫查詢 :?1 ?2 參數依次遞增
@Query("select o.name,o.age,o.address from User o where o.name=?1 and o.age=?2")
List<User> queryUser(String name, Integer age);
//使用參數來進行查詢 : o.name=:name;o.age=:age需要和註解@Param共同使用
@Query("select o.name,o.age,o.address from User o where o.name=:name and o.age=:age")
List<User> queryUserAddress(@org.springframework.data.repository.query.Param("name") String name, @org.springframework.data.repository.query.Param("age") Integer age);
// LIKE的使用 :使用佔位符來進行數據庫查詢
@Query("select o.name,o.age,o.address from User o where o.name like %?1% and o.age =?2")
List<User> queryUserTestLike(String name, Integer age);
//LIKE的使用 :使用參數來進行數據庫查詢
@Query("select o.name,o.age,o.address from User o where o.name like %:name% and o.age =:age")
List<User> queryUserTestLike2(@org.springframework.data.repository.query.Param("name") String name, @org.springframework.data.repository.query.Param("age") Integer age);
//支持原生的本地數據庫查詢
@Query(nativeQuery = true, value = "SELECT count(1) FROM USER ")
Integer findCountUser();
//jpa整合事務操作, @Modifying 與@Query 要共同使用需要在進行增加和修改操作時進行事務操作,需要在service中添加 @Transactional
@Modifying
@Query("update User o set o.age =:age where o.id =:id")
void updateUser(@org.springframework.data.repository.query.Param("id") Integer id, @org.springframework.data.repository.query.Param("age") Integer age);
}