新建項目選擇web,JPA,MySQL三個依賴java
對於已存在的項目能夠在bulid.gradle加入,spring boot將會幫你自動配置好mysql
compile('org.springframework.boot:spring-boot-starter-data-jpa') compile('org.springframework.boot:spring-boot-starter-web') runtime('mysql:mysql-connector-java')
而後在src/main/resources/application.properties下添加基本配置git
#數據庫鏈接地址 spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=false #數據庫帳號 spring.datasource.username=root #數據庫密碼 spring.datasource.password=123456zxc #數據庫驅動 spring.datasource.driver-class-name=com.mysql.jdbc.Driver #jpa設置 spring.jpa.hibernate.ddl-auto=create #是否在控制檯顯示數據庫語句 spring.jpa.show-sql=true
spring.jpa.properties.hibernate.hbm2ddl.auto 其做用是:自動建立、更新、驗證數據庫表結構。該參數的幾種配置以下:github
至此基本配置完成web
建立一個User實體,包含id(主鍵)、name(姓名)、age(年齡)屬性,經過ORM框架其會被映射到數據庫表中,因爲配置了hibernate.hbm2ddl.auto,在應用啓動的時候框架會自動去數據庫中建立對應的表。spring
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity//這是一個和數據庫表相關聯的類 public class User { @Id//主鍵 @GeneratedValue//自增加 private Long id;//id @Column(length = 30)//長度30 private String name;//名稱 @Column(nullable = false)//不可空 private Integer age;//年齡 public User() { } public User(String name, Integer age) { this.name = name; this.age = age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
建立一個userRepository接口,進行數據庫操做sql
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; public interface UserRepository extends JpaRepository<User, Long>//JpaRepository<實體類型,主鍵類型> { // 經過名稱找到用戶 User findByName(String name); // 經過名稱和年齡找到用戶 User findByNameAndAge(String name, Integer age); // 經過名稱模糊查詢 List<User> findByNameLike(String name); // 使用hql查詢 @Query("from User u where u.name=:name")//:name對應@Param裏的name User findByHQL(@Param("name") String name); // 使用sql查詢 @Query(value = "select * from user where name = ?1 and age = ?2", nativeQuery = true)//?1表示第一個參數,?2表示第二個參數 User findBySQL(String name, Integer age); }
在src/test/java/你的包名/你的項目名ApplicationTests編寫對應的單元測試來驗證編寫的內容是否正確數據庫
import org.junit.Assert; 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; @RunWith(SpringRunner.class) @SpringBootTest public class JpaLearnApplicationTests { // 注入userRepository @Autowired private UserRepository userRepository; @Test public void contextLoads() { // 添加10個測試用例 userRepository.save(new User("QQQ",1)); userRepository.save(new User("WWW",2)); userRepository.save(new User("EEE",3)); userRepository.save(new User("AAA",4)); userRepository.save(new User("SSS",5)); userRepository.save(new User("DDD",6)); userRepository.save(new User("ZZZ",7)); userRepository.save(new User("XXX",8)); userRepository.save(new User("CCC",9)); userRepository.save(new User("QQQ2",10)); // 測試findAll, 查詢全部記錄 Assert.assertEquals(10, userRepository.findAll().size()); // 測試findByName, 查詢姓名爲AAA的User Assert.assertEquals(4, userRepository.findByName("AAA").getAge().longValue()); // 測試findByHQL, 查詢姓名爲AAA的User Assert.assertEquals(4, userRepository.findByHQL("AAA").getAge().longValue()); // 測試findByNameAndAge, 查詢姓名爲SSS而且年齡爲5的User Assert.assertEquals("SSS", userRepository.findByNameAndAge("SSS", 5).getName()); // 測試findBySQL, 查詢姓名爲SSS而且年齡爲5的User Assert.assertEquals("SSS", userRepository.findBySQL("SSS", 5).getName()); // 測試刪除姓名爲AAA的User userRepository.delete(userRepository.findByName("AAA")); // 測試findAll, 查詢全部記錄, 驗證上面的刪除是否成功 Assert.assertEquals(9, userRepository.findAll().size()); // 測試findAll, 查詢名字有Q的有幾個 Assert.assertEquals(2,userRepository.findByNameLike("%Q%").size()); } }
點擊運行測試用例服務器
源碼地址:https://github.com/LieRabbit/...
原文地址:https://lierabbit.cn/2018/01/...session