本文共 9671 字,大约阅读时间需要 32 分钟。
create user boot identified by boot;
grant create session,resource to boot;
create sequence hibernate_sequence increment by 1 start with 0 nomaxvalue nocache
create or replace trigger ID_autoincrementbefore insert on PERSON for each rowwhen(new.id is null)beginselect hibernate_sequence.nextval into :new.id from dual;end;
com.pyc springjpa 0.0.1-SNAPSHOT jar springjpa
mvn install:install-file -DgroupId=com.oracle "-DartifactId=ojdbc6" "-Dversion=11.2.0.2.0" "Dfile=ojdbc6.jar 下载存放的路径"
com.oracle ojdbc6 11.2.0.2.0
com.google.guava guava 18.0
4.0.0 org.springframework.boot spring-boot-starter-parent 1.3.0.M1 com.pyc springjpa 0.0.1-SNAPSHOT jar springjpa Demo project for Spring Boot UTF-8 1.8 com.oracle ojdbc6 11.2.0.2.0 com.google.guava guava 18.0 org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.springframework.boot spring-boot-maven-plugin
insert into person(id,name,age,address) values(hibernate_sequence.nextval,'pyc',22,'汕尾');insert into person(id,name,age,address) values(hibernate_sequence.nextval,'xx',21,'天津');insert into person(id,name,age,address) values(hibernate_squence.nextval,'yy',20,'上海');insert into person(id,name,age,address) values(hibernate_sequence.nextval,'zz',24,'大理');insert into person(id,name,age,address) values(hibernate_sequence.nextval,'aa',25,'北京');insert into person(id,name,age,address) values(hibernate_sequence.nextval,'bb',26,'南昌');
# 配置数据源spring.datasource.driver-class-name=oracle.jdbc.OracleDriverspring.datasource.url=jdbc\:oracle\:thin\:@localhost\:1521\:XEspring.datasource.username=bootspring.datasource.password=boot# 利用 Hibernate 自动维护数据库表结构的功能spring.jpa.hibernate.ddl-auto=update# 设置 Hibernate 操作数据库的时候在控制台显示真实的 spl 语句spring.jpa.show-sql=true# 让控制器输出 json 字符串格式更美观spring.jackson.serialization.indent-output=truelogging.file=log.loglogging.level.org.springframework.web=DEBUG
package com.pyc.springjpa.domain;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.NamedQuery;@Entity //指明这是一个和数据库表映射的实体类@NamedQuery(name = "Person.withNameAndAddressNamedQuery", query = "select p from Person p where p.name=?1 and p.address=?2")public class Person { @Id // 指明这个属性映射为数据库的主键 @GeneratedValue //指明主键的生成方式为自增 private Long id; private String name; private Integer age; private String address; public Person() { super(); } public Person(Long id, String name, Integer age, String address){ super(); this.address=address; this.name=name; this.age=age; this.id=id; } public void setId(Long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; } public void setAddress(String address) { this.address = address; } public Long getId() { return id; } public String getName() { return name; } public Integer getAge() { return age; } public String getAddress() { return address; }}
package com.pyc.springjpa.dao;import com.pyc.springjpa.domain.Person;import org.springframework.data.repository.query.Param;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.Query;import java.util.List;public interface PersonRepository extends JpaRepository{ // 根据地址查询,返回值为列表 List findByAddress(String address); // 根据姓名和地址查询,返回值为单个对象 Person findByNameAndAddress(String name, String address); // 使用 @Query 查询,参数按照名称绑定 @Query("select p from Person p where p.name= :name and p.address= :address") Person withNameAndAddressQuery(@Param("name")String name,@Param("address")String address); //使用 @NamedQuery 查询,在实体类中已注解 Person withNameAndAddressNamedQuery(String name, String address);}
package com.pyc.springjpa.web;import com.pyc.springjpa.dao.PersonRepository;import com.pyc.springjpa.domain.Person;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.Page;import org.springframework.data.domain.PageRequest;import org.springframework.data.domain.Sort;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestControllerpublic class DataController { // Spring Data JPA 已自动注册bean,因此可以自动注入 @Autowired PersonRepository personRepository; /* * 保存 * save 支持批量保存:Iterablesave(Iterableentities); * 删除 * 支持使用 id 删除对象、批量删除以及删除全部 * void delete(ID id) * void delete(T entity) * void delete(Iterable entities); * void deleteAll(); */ @RequestMapping("/save") public Person save(String name,String address,Integer age){ Person p; p = personRepository.save(new Person(null, name,age,address)); return p; } /* * 测试 findByAddress */ @RequestMapping("/q1") public Listq1(String address){ List people; people = personRepository.findByAddress(address); return people; } // 测试 findByNameAndAddress @RequestMapping("/q2") public Person q2(String name, String address){ Person person; person = personRepository.findByNameAndAddress(name,address); return person; } //测试 withNameAndAddressQuery @RequestMapping("/q3") public Person q3(String name, String address){ Person p; p = personRepository.withNameAndAddressQuery(name, address); return p; } //测试 withNameAndAddressNamedQuery @RequestMapping("/q4") public Person q4(String name, String address){ Person p; p = personRepository.withNameAndAddressNamedQuery(name, address); return p; } //排序 @RequestMapping("/sort") public List sort(){ List people; people = personRepository.findAll(new Sort(Sort.Direction.ASC, "age")); return people; } // 测试分页 @RequestMapping("/page") public Page page(){ Page pagePeople; pagePeople = personRepository.findAll(new PageRequest(1,2)); return pagePeople; }}
转载地址:http://goqgn.baihongyu.com/