<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SpringBoot2.0之三 優雅整合Spring Data JPA

      ??在我們的實際開發的過程中,無論多復雜的業務邏輯到達持久層都回歸到了“增刪改查”的基本操作,可能會存在關聯多張表的復雜sql,但是對于單表的“增刪改查”也是不可避免的,大多數開發人員對于這個簡單而繁瑣的操作都比較煩惱。

      ??為了解決這種大量枯燥的簡單數據庫操作,大致的解決該問題的有三種方式
      1、使用類似Hibernate的ORM框架,通過Hibernate完成java實體類和數據庫之間的映射,完成簡單的單表的“增刪改查”

      2、使用代碼生成工具生成單表的“增刪改查”代碼,省去我們手動編寫的過程(我將在后面的文章中給出可定制化生成代碼方法,敬請關注!)

      3、使用Spring-data-jpa這樣的技術,它實現了模板Dao層,只需要在Dao,通過繼承一個接口,就可輕松完成“增刪改查”,具體使用方法如下:

      一、在pom.xml文件中添加如下依賴

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

      二、在application.yml文件中配置數據庫信息和jpa信息(注意:不同的SpringBoot版本jpa配置的方法可能會有不同)

      spring:    
        datasource:
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
          username: root
      
          password: 123456
      
        jpa:
          hibernate:
            ddl-auto: update
      

      ??個人推薦使用yml格式的配置文件,看起來更加清晰簡單(注意:每個配置屬性的縮進是兩個空格,這點一定要注意,不然會出現配置錯誤的情況,也可以在開發工具中安裝相關的yml的插件方便查看)。

      jpa的配置后 jpa.hibernate.ddl-auto= update,在其他低版本的SpringBoot中也有使用spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop 這種配置的,具體根據版本而定。該配置的主要作用是:自動創建、更新、驗證數據庫結構

      1、create:每次加載hibernate時都會刪除上一次的生成的表,然后根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是導致數據庫表數據丟失的一個重要原因(一般只會在第一次創建時使用)

      2、create-drop:每次加載hibernate時根據model類生成表,但是sessionFactory一關閉,表就自動刪除

      3、update:最常用的屬性,第一次加載hibernate時根據model類會自動建立起表的結構(前提是先建立好數據庫),以后加載hibernate時根據model類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務器后,表結構是不會被馬上建立起來的,是要等應用第一次運行起來后才會

      4、validate:每次加載hibernate時,驗證創建數據庫表結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值

      三、創建實體

      創建一個User類,配置好上面的信息后,啟動項目,對應的數據庫就會自動生成對應的表結構。@Table、@Entity、@Id等注解是jpa的相關知識,后面的文章將詳細講述。

      @Table(name = "t_user")
      @Entity
      public class User {
      	@Id
              @GeneratedValue
      
      	private Long id;
      
      	@Column
      	private String name;//姓名
      	
      	@Column
      	private Integer age;//年齡
      
           // .....
      }
      

      四、創建數據庫訪問Dao層

      @Repository
      public interface UserRepository  extends JpaRepository<User,Long>{
      
      	/**
      	 * 根據年紀查詢用戶
      	 * @param age
      	 * @return
      	 */
      	User findByAge(Integer age);
      
      	/**
      	 * 根據年紀和姓名查詢
      	 * @param name
      	 * @param age
      	 * @return
      	 */
          User findByNameAndAge(String name, Integer age);
      
          /**
           * 對于復雜查詢可以使用@Query 編寫sql
           * @param name
           * @return
           */
          @Query("from User u where u.name=:name")
          User findUser(@Param("name") String name);
      	
      }
      

      ??該Dao成繼承了JpaRepository接口,指定了需要操作的實體對象和實體對象的主鍵類型,通過查看JpaRepository接口源碼可以看到,里面已經封裝了創建(save)、更新(save)、刪除(delete)、查詢(findAll、findOne)等基本操作的函數,使用起來非常方便了,但是還是會存在一些復雜的sql,spring-data-jpa還提供了一個非常方便的方式,通過實體屬性來命名方法,它會根據命名來創建sql查詢相關數據,對應更加復雜的語句,還可以用直接寫sql來完成,具體例子如上所示。

      五、單元測試
      使用junit進行單元測試,代碼如下

      /**
       * 
       * @author 明天的地平線
       * 
       * SpringBoot 之前的版本配置單元測試類時使用       @SpringApplicationConfiguration(Application.class)
       * SpringBoot 1.5.9  改用@SpringBootTest(classes = Application.class)
       * 
       */
      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = Application.class)
      public class JpaTest {
      
      	@Autowired
      	private UserRepository userRepository;
      	
      	/**
      	 * 新增用戶
      	 * @throws Exception
      	 */
      	@Test
      	public void testAddUser() throws Exception {
      		User user = new User();
      		user.setName("zhangsan");
      		user.setAge(12);
      		userRepository.save(user);
      		
      		User user2 = new User();
      		user2.setName("lishi");
      		user2.setAge(22);
      		userRepository.save(user2);
      	}
      	
      	/**
      	 * 刪除用戶(根據對象刪除時,必須要有ID屬性)
      	 * @throws Exception
      	 */
      	@Test
      	public void testDelUser() throws Exception {
      		User user = new User();
      		user.setId(1L);
      		user.setName("zhangsan");
      		user.setAge(12);
      		userRepository.delete(user);
      	}
      	
      	/**
      	 * 修改用戶信息
      	 * @throws Exception
      	 */
      	@Test
      	public void testUpdUser() throws Exception {
      		User user = new User();
      		user.setId(2L);
      		user.setName("zhangsan11");
      		user.setAge(122);
      		userRepository.save(user);
      	}
      	
      	/**
      	 * 查詢用戶
      	 * @throws Exception
      	 */
      	@Test
      	public void testQueryUser() throws Exception {
      		User user = userRepository.findByAge(22);
      		System.out.println(user.getName());
      		
      		User user2 = userRepository.findByNameAndAge("lishi", 22);
      		System.out.println(user2.getName());
      		
      		User user3 = userRepository.findUser("zhangsan11");
      		System.out.println(user3.getName());
      	}
      	
      	/**
      	 * 查詢所有用戶
      	 * @throws Exception
      	 */
      	@Test
      	public void testQueryUserList() throws Exception {
      		List<User> list = userRepository.findAll();
      		for (User user : list) {
      			System.out.println(user.getName());
      		}
      	}
      	
      
      }
      

      數據庫數據如下:

      ??本文主要以SpringBoot整合jpa為主,Spring-data-jpa的內容遠比以上內容豐富和強大,例如分頁排序、對原生sql的支持等,后續將對此內容進行專門講解,感興趣的小伙伴可以關注我的博客和微信公眾號。

      Git代碼地址:https://gitee.com/Somta/SpringBoot/tree/master/SpringBoot-jpa
      原文地址:http://somta.com.cn/#/blog/view/7909f62e5af6426c802c8748366592e8

      posted @ 2018-06-12 17:47  明天的地平線  閱讀(417)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 天天摸天天碰天天添| 无码囯产精品一区二区免费| 不卡一区二区国产精品| 2019亚洲午夜无码天堂| 一面膜上边一面膜下边视频| 亚洲日本VA午夜在线电影| 国产高清无遮挡内容丰富| 国产青榴视频在线观看| 欧美和黑人xxxx猛交视频| 久久亚洲精品中文字幕馆| 性饥渴少妇AV无码毛片| 中文字幕av一区二区| 99久久国产成人免费网站| 亚洲色在线v中文字幕| 卡一卡二卡三精品| 九九热精品在线视频免费| 精品一区二区av天堂| 国内久久人妻风流av免费| 国产99视频精品免费视频36| 午夜成人性爽爽免费视频| 山丹县| 九九热精品在线视频免费| 亚洲国产良家在线观看| 乐至县| 国产精品自产在线观看一| 四虎国产精品永久入口| 一本色道久久综合无码人妻| 国产亚洲精品久久久久久久久| 国产一区二区午夜福利久久| 高清无打码一区二区三区| 免费av深夜在线观看| 四虎影视一区二区精品| 精品国产免费一区二区三区香蕉| 极品白嫩少妇无套内谢| 四虎精品视频永久免费| 精品无码一区二区三区电影| 纯肉高h啪动漫| 中文字幕av一区二区| 西西大胆午夜人体视频| 一区二区三区激情都市| 四虎影视一区二区精品|