spring boot: @Entity @Repository一個簡單的數據讀存儲讀取
創建了一個實體類。
如何持久化呢?
1、使用@Entity進行實體類的持久化操作,當JPA檢測到我們的實體類當中有
@Entity 注解的時候,會在數據庫中生成對應的表結構信息。
2.哪些處理需要事務呢
save,update ,delete 方法需要綁定事務.
使用@Transactional進行事務的綁定.
3.dao文件
使用@Repository注解,標注這是一個持久化操作對象.
以Cat為例;
CREATE TABLE `cat` ( `id` int(11) NOT NULL AUTO_INCREMENT, `cat_age` varchar(255) DEFAULT NULL, `cat_name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
1.新建Cat.java
package com.muyang.boot22.bena; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; /** * 創建了一個實體類。 * * 如何持久化呢? * * 1、使用@Entity進行實體類的持久化操作,當JPA檢測到我們的實體類當中有 * * @Entity 注解的時候,會在數據庫中生成對應的表結構信息。 * * * 如何指定主鍵以及主鍵的生成策略? * * 2、使用@Id指定主鍵. * * * * @author Angel -- 守護天使 * @version v.0.1 * @date 2016年12月17日 */ @Entity public class Cat { @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id; private String catAge; private String catName; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCatAge() { return catAge; } public void setCatAge(String catAge) { this.catAge = catAge; } public String getCatName() { return catName; } public void setCatName(String catName) { this.catName = catName; } }
CatDao.java
JdbcTemplate的使用
package com.muyang.boot22.dao; import javax.annotation.Resource; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; import com.muyang.boot22.bena.Cat; /** * 使用@Repository注解,標注這是一個持久化操作對象. * @author Angel -- 守護天使 * @version v.0.1 * @date 2016年12月18日 */ @Repository public class CatDao { @Resource JdbcTemplate jdbcTemplate; public Cat selectCatName(String catName) { /** * 1、定義一個Sql語句; * 2、定義一個RowMapper. * 3、執行查詢方法. */ String sql = "select * from cat where cat_name=:catName"; RowMapper<Cat> rowMapper = new BeanPropertyRowMapper<>(Cat.class); Cat cat = jdbcTemplate.queryForObject(sql, new Object[] {catName}, rowMapper); return cat; } }
CatRepository.java
繼承CrudRepository.java
package com.muyang.boot22.repository; import org.springframework.data.repository.CrudRepository; import com.muyang.boot22.bena.Cat; public interface CatRepository extends CrudRepository<Cat, Integer> { }
Cat2Repository.java
繼承PagingAndSortingRepository
使用@Query查詢注解
package com.muyang.boot22.repository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; import com.muyang.boot22.bena.Cat; public interface Cat2Repository extends PagingAndSortingRepository<Cat, Integer> { /** * 1/ 查詢方法 以 get | find | read 開頭. * 2/ 涉及查詢條件時,條件的屬性用條件關鍵字連接,要注意的是條件屬性以首字母大寫。 */ public Cat findByCatName(String catName); /** * 如何編寫JPQL語句, * Hibernate -- HQL語句. * JPQL 語句 和HQL語句是類似的. */ @Query("from Cat where catName=:cn") public Cat findMyCatName(@Param("cn") String catName); }
CatService.java
調用CatDao.java, CatRepository.java, Cat2Repository.java
package com.muyang.boot22.service; import java.util.List; import javax.annotation.Resource; import javax.transaction.Transactional; import org.springframework.stereotype.Service; import com.muyang.boot22.bena.Cat; import com.muyang.boot22.dao.CatDao; import com.muyang.boot22.repository.Cat2Repository; import com.muyang.boot22.repository.CatRepository; @Service public class CatService { @Resource CatRepository catRepository; @Resource Cat2Repository cat2Repository; @Resource CatDao catDao; /** * save,update ,delete 方法需要綁定事務. * * 使用@Transactional進行事務的綁定. * * @param cat */ @Transactional public void save(Cat cat) { catRepository.save(cat); } @Transactional public void delete(int id) { catRepository.delete(id); } public Cat findOne(int id) { return catRepository.findOne(id); } public Iterable<Cat> findAll() { return catRepository.findAll(); } public Cat selectCatName(String catName) { return catDao.selectCatName(catName); } public Cat selectMyCatName(String catName) { return cat2Repository.findMyCatName(catName); } public Cat findByCatName(String catName) { return cat2Repository.findByCatName(catName); } }
CatController.java
調用CatService.java
package com.muyang.boot22.controller; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.muyang.boot22.bena.Cat; import com.muyang.boot22.service.CatService; @RestController @RequestMapping(value="/cat") public class CatController { @Resource CatService catService; @RequestMapping(value="/index") public Iterable<Cat> index() { return catService.findAll(); } @RequestMapping(value="/id/{id}") public Cat findById(@PathVariable(value="id") int id) { return catService.findOne(id); } @RequestMapping(value="/catName/{catName}") public Cat findMyCatName(@PathVariable(value="catName") String catName) { return catService.selectMyCatName(catName); } @RequestMapping(value="/findName/{catName}") public Cat findByCatName(@PathVariable(value="catName") String catName) { return catService.findByCatName(catName); } }
訪問地址:
http://localhost:8081/springboot/cat/index
http://localhost:8081/springboot/cat/id/1
http://localhost:8081/springboot/cat/catName/%E5%BC%A0%E4%B8%89