jpa初体验

    近期在做项目的时候,项目框架已定,底层都是手写的mapper,哪怕是最最简单的单表增删改,而且在接手这个项目的时候发现,前人在写这个项目的时候没有注意项目的封装性,真是想到哪里写到哪里,没有抽出公共的。于是乎这块但凡加个新的功能,就需要重新写sql,比较的麻烦,维护的时候感觉也很糟糕。

    于是想到了之前在前一家公司的时候采取的做法,都是直接用的公共的,有直接使用generator直接生成的,也有用jpa规范的。生成的这个之前自己做过一个小的demo,所以这次索性试试新的方法用jpa规范。公司项目框架用的spring cloud ,docker这一套,查阅文档,spring实现了jpa规范就在spring data模块中。

    接下来就是对jpa的尝试。

    备注:

spring.jpa.hibernate.ddl-auto=create的时候重启都会删除之前的数据,重新建表。

    在application.properties总写好数据库配置:

spring.datasource.url=jdbc:mysql://localhost/base-org-permission
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#update属性可以保证非每次重启重新建表
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.data.jpa.repositories.enabled=true
引入相关的jar
<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!-- JPA Data (We are going to use Repositories, Entities, Hibernate, etc...) -->

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

		<!-- Use MySQL Connector-J -->

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>



	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

接下来就是自己写几个简单的实体类:

@Entity

public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String firstName;
    private String lastName;

    private Integer age;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }
}
@Entity
public class Organization {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String orgName;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getOrgName() {
        return orgName;
    }

    public void setOrgName(String orgName) {
        this.orgName = orgName;
    }
}

接下来写两个接口并且实现CrudRepostory

public interface OrganizationRepository extends CrudRepository<Organization,Long> {
}
public interface PersonRepository extends CrudRepository<Person, Long> {
    List<Person> findByLastName(@Param("name") String name);

}

最后就是写相关的Controller进行测试

@RestController
@RequestMapping("/org")
public class OrganizationController {
    @Resource
    private OrganizationRepository organizationRepository;
    @RequestMapping("add")
    public Integer add (){
        Organization organization= new Organization();
        organization.setOrgName("蜂网北京");
        organizationRepository.save(organization);
        return organization.getId();
    }

    @RequestMapping("findAll")
    public Iterable<Organization> findAll(){
        Iterable<Organization> all = organizationRepository.findAll();
        return all;
    }
}
@RestController
@RequestMapping("/person")
public class PersonController {
    @Autowired
    private PersonRepository personRepository;

    @RequestMapping("add")
    public Long add(){
        Person person = new Person();
        person.setFirstName("xiao");
        person.setLastName("ming");
        person.setAge(5);

        Person people = new Person();
        people.setFirstName("xiao");
        people.setLastName("hua");
        people.setAge(4);
        personRepository.save(person);
        personRepository.save(people);
        System.out.println(person.getId());
        return person.getId();
    }

    @RequestMapping("findAll")
    public Iterable<Person> findAll(){
        Iterable<Person> all = personRepository.findAll();
        return all;
    }

    @RequestMapping("findByCondition")
    public List<Person> findByCondition(){
        Iterable<Person> all = findAll();
        List<Person> list = new ArrayList<>();
        for (Person person :all) {
            list.add(person);
        }
        list.forEach(System.out::println);
        return list;
    }
}
感受:使用jpa的时候遇到了不少的坑,但是总体上是非常方便使用的。只需实现一个接口就可实现对单表的增删改的操作。而且他可以实现自动建表,表里头的字段是随着属性的变化而变化的。很智能。

猜你喜欢

转载自blog.csdn.net/u013043518/article/details/80067119