JPA入門代碼

JPA入門代碼

添加依賴

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

編寫配置文件

#數據源配置數據源配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

#配置JPA
#設置方言
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
#是否控制檯打印SQL語句
spring.jpa.show-sql=true
#自動生成策略,包括create、create-drop、update、none、validate
spring.jpa.hibernate.ddl-auto=update
#配置對應數據庫
spring.jpa.database=mysql
#設置命名策略
#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

創建實體類

/**
 * @Entity 指定當前類是實體類
 * @Table 指定實體類和表之間的對應關係
 * @Id 指定當前字段是主鍵
 * @GeneratedValue 指定主鍵的生成方式
 * @Column 指定實體類屬性和數據庫表之間的對應關係
 *                  屬性:
 *         		name:指定數據庫表的列名稱。
 *         		unique:是否唯一
 *         		nullable:是否可以爲空
 *         		inserttable:是否可以插入
 *         		updateable:是否可以更新
 *         		columnDefinition: 定義建表時創建此列的DDL
 */
@Entity
@Table(name = "userinfo")
public class UserInfo {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="userId")
    private Integer userId ;
    @Column(length = 30)
    private String username ;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

測試

@RunWith(SpringRunner.class)
@SpringBootTest
public class Test01 {
    @Test
    public void test01(){
        System.out.println("hello world");
    }
}

編寫dao

import com.ry.jpademo.domain.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserInfoRepository extends JpaRepository<UserInfo,Integer> {
}

測試增刪改查

import com.ry.jpademo.domain.UserInfo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;
import java.util.Optional;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserInfoRepositoryTest {
    @Autowired
    private UserInfoRepository userInfoRepository;

    @Test
    public void testSave() {
        //測試添加
        UserInfo userInfo = new UserInfo();
        userInfo.setUserName("zhangsan");
        userInfo = userInfoRepository.save(userInfo);
        System.out.println("測試save()結束" + userInfo);
    }

    @Test
    public void testModify() {
        //測試查詢並修改
        Optional<UserInfo> userInfoOptional = userInfoRepository.findById(1);
        if (userInfoOptional != null) {
            UserInfo userInfo = userInfoOptional.get();
            userInfo.setUserName("lisi");
            userInfoRepository.save(userInfo);
            System.out.println("測試結束" + userInfo);
        }
    }

    @Test
    public void testFindAll() {
        //測試查詢全部
        List<UserInfo> userInfos = userInfoRepository.findAll();
        System.out.println("測試findAll()結束" + userInfos);
    }

    @Test
    public void testDelete() {
        //測試刪除
        userInfoRepository.deleteById(1);
        System.out.println("測試deleteById()結束");
    }
}

擴展查詢

import com.ry.jpademo.domain.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserInfoRepository extends JpaRepository<UserInfo,Integer> {
    //擴展查詢
    UserInfo findByUserName(String userName);
}

測試

    @Test
    public void testFindByUserName() {
        //測試擴展查詢
        UserInfo userInfo=userInfoRepository.findByUserName("zhangsan");
        System.out.println("測試findByUserName()結束"+userInfo);
    }

JPQL
編輯自定義查詢dao

import com.ry.jpademo.domain.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface UserInfoRepository extends JpaRepository<UserInfo,Integer> {
    //擴展查詢
    UserInfo findByUserName(String userName);
    //dao自定義查詢
    @Query("from UserInfo u where u.userName = :userName")
    UserInfo findByName(@Param("userName") String userName) ;
}

測試

    @Test
    public void testfindByName() {
        //測試自定義查詢
        UserInfo userInfo=userInfoRepository.findByName("zhangsan");
        System.out.println("測試findByName()結束"+userInfo);
    }

自定義查詢補充

     //展示位置參數綁定
    @Query(value = "from User u where u.name=?1 and u.password=?2")
    User findByNameAndPassword(String name, String password);
 
    //展示名字參數綁定
    @Query(value = "from User u where u.name=:name and u.email=:email")
    User findByNameAndEmail(@Param("name")String name, @Param("email")String email);
    
    //展示like模糊查詢
    @Query(value = "from User u where u.name like %:nameLike%")
    List<User> findByNameLike(@Param("nameLike")String nameLike);
    
    //展示時間間隔查詢
    @Query(value = "from User u where u.createDate between :start and :end")
    List<User> findByCreateDateBetween(@Param("start")Date start, @Param("end")Date end);
    
    //展示傳入集合參數查詢
    @Query(value = "from User u where u.name in :nameList")
    List<User> findByNameIn(@Param("nameList")Collection<String> nameList);
    
    //展示傳入Bean進行查詢(SPEL表達式查詢)
    @Query(value="from User u where u.name=:#{#usr.name} and u.password=:#{#usr.password}")
    User findByNameAndPassword(@Param("usr")User usr);

分頁查詢(無條件)

    @Test
    public void testfindAllByPage() {
        //測試分頁查詢
        PageRequest pageable = PageRequest.of(1, 2);
        Page<UserInfo> page = userInfoRepository.findAll(pageable);
        System.out.println("總頁數:" + page.getTotalPages());
        System.out.println("總記錄數:" + page.getTotalElements());
        System.out.println("查詢結果:" + page.getContent());
        System.out.println("當前頁數:" + (page.getNumber() + 1));
        System.out.println("當前頁記錄數:" + page.getNumberOfElements());
        System.out.println("每頁記錄數:" + page.getSize());
}

分頁查詢(自定義無條件)
編輯dao

import com.ry.jpademo.domain.UserInfo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface UserInfoRepository extends JpaRepository<UserInfo, Integer> {
    
    //自定義分頁查詢
    @Query(value = "select * from UserInfo", nativeQuery = true)
    Page<UserInfo> findAllResult(Pageable pageable);

}

測試

@Test
    public void testfindAllByPage2() {
        //自定義分頁查詢
        //注意 Pageable pageable = PageRequest.of(0,2) ;參數0是第一頁,2是size
        Pageable pageable = PageRequest.of(0,2) ;
        Page<UserInfo> page = userInfoRepository.findAllResult(pageable) ;
        System.out.println("總頁數:" + page.getTotalPages());
        System.out.println("總記錄數:" + page.getTotalElements());
        System.out.println("查詢結果:" + page.getContent());
        System.out.println("當前頁數:" + (page.getNumber() + 1));
        System.out.println("當前頁記錄數:" + page.getNumberOfElements());
        System.out.println("每頁記錄數:" + page.getSize());
    }

分頁查詢(有條件)

//有條件的分頁查詢
    @Query(value = "from UserInfo u where u.userName like %:userNameLike%")
    Page<UserInfo> findByEmailLike(Pageable pageable, @Param("userNameLike") String userNameLike);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章