springboot-jpa

工程配置,添加maven的依赖,jpa的依赖有如下,简单的就是一个jpa和mysql:

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


在application.properties中添加数据库的链接信息

spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

其中,

useSSL=false 表示跳过ssl的验证,不需要关心

还可以添加一个属性:

spring.jpa.properties.hibernate.hbm2ddl.auto=create

spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置属性,其主要作用是:自动创建、更新、验证数据库表结构。该参数的几种配置如下:

  • create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
  • create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。就是说当你使用完之后 你在数据库中是看不到这张表的
  • update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
  • validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值

引入配置完成之后,开始构建代码侧

实体类:

/**
 * Created by sunzhitao on 2018/4/2.
 */
@Entity
public class User {

    @Id
    @GeneratedValue
    private  Long id;

    @Column(nullable = false)
    private  String name;

    @Column(nullable = false)
    private  Integer age;
//省略getter setter  构造函数
}

创建数据访问接口

下面针对User实体创建对应的Repository接口实现对该实体的数据访问,如下代码:

public interface UserRepository extends JpaRepository<User,Long> {

    User findByName(String name);

    User findByNameAndAge(String name,Integer age);

    @Query("from User u where u.name=:name")
    User findUser(@Param("name") String name);
}

使用了Spring-data-jpa,只需要编写类似上面这样的接口就可实现数据访问。不需要再自己编写接口实现类。


UserRepository接口继承自JpaRepository
,通过查看JpaRepository接口的API文档,可以看到该接口本身已经实现了创建(save)、更新(save)、删除(delete)、查询(findAll、findOne)等基本操作的函数,因此对于这些基础操作的数据访问就不需要开发者再自己定义。

开发中,JpaRepository接口定义的接口还不够,有些需要自定义的查询或者删除修改等操作。Jpa还给我们增加了一种通过约定方法名称达到效果的功能。比如:

User findByNameAndAge(String name,Integer age);

通过名字和年龄查询用户信息。还有一种通过JPQL语句查询,

   @Query("from User u where u.name=:name")
    User findUser(@Param("name") String name);

通过使用@Query 注解来创建查询,类似 :name 映射@param 指定的参数


单元测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootJpaApplicationTests {

    @Autowired
    private UserRepository userRepository;
    @Test
    public void contextLoads() {
        userRepository.save(new User("sunny",18));
        userRepository.save(new User("susan",12));
        userRepository.save(new User("sunshine",20));
        User u = userRepository.findByName("susan");
       System.out.println("u:"+u.toString());
    }
}

另外,当springboot启动完成之后 如果运行完就结束了 可以添加一个 System.in.read(); 比如:

@SpringBootApplication
public class SpringbootJpaApplication {

    public static void main(String[] args) throws IOException {
        SpringApplication.run(SpringbootJpaApplication.class, args);
        System.in.read();
    }
}


















猜你喜欢

转载自blog.csdn.net/sunzhitao1990/article/details/79868829
今日推荐