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