美文网首页Spring Boot快速入门
Spring Boot快速入门(四):使用jpa进行数据库操作

Spring Boot快速入门(四):使用jpa进行数据库操作

作者: LieRabbit | 来源:发表于2018-01-16 22:32 被阅读0次

    添加依赖

    新建项目选择web,JPA,MySQL三个依赖

    对于已存在的项目可以在bulid.gradle加入,spring boot将会帮你自动配置好

    compile('org.springframework.boot:spring-boot-starter-data-jpa')

    compile('org.springframework.boot:spring-boot-starter-web')

    runtime('mysql:mysql-connector-java')

    配置基本信息

    然后在src/main/resources/application.properties下添加基本配置

    #数据库连接地址

    spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=false

    #数据库账号

    spring.datasource.username=root

    #数据库密码

    spring.datasource.password=123456zxc

    #数据库驱动

    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

    #jpa设置

    spring.jpa.hibernate.ddl-auto=create

    #是否在控制台显示数据库语句

    spring.jpa.show-sql=true

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

    create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。

    create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。

    update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。

    validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

    none:什么都不做

    至此基本配置完成

    创建实体

    创建一个User实体,包含id(主键)、name(姓名)、age(年龄)属性,通过ORM框架其会被映射到数据库表中,由于配置了hibernate.hbm2ddl.auto,在应用启动的时候框架会自动去数据库中创建对应的表。

    import javax.persistence.Column;

    import javax.persistence.Entity;

    import javax.persistence.GeneratedValue;

    import javax.persistence.Id;

    @Entity//这是一个和数据库表相关联的类

    public class User

    {

        @Id//主键

        @GeneratedValue//自增长

        private Long id;//id

        @Column(length = 30)//长度30

        private String name;//名称

        @Column(nullable = false)//不可空

        private Integer age;//年龄

        public User()

        {

        }

        public User(String name, Integer age)

        {

            this.name = name;

            this.age = age;

        }

        public Long getId()

        {

            return id;

        }

        public void setId(Long id)

        {

            this.id = id;

        }

        public String getName()

        {

            return name;

        }

        public void setName(String name)

        {

            this.name = name;

        }

        public Integer getAge()

        {

            return age;

        }

        public void setAge(Integer age)

        {

            this.age = age;

        }

    }

    创建数据访问接口

    创建一个userRepository接口,进行数据库操作

    import org.springframework.data.jpa.repository.JpaRepository;

    import org.springframework.data.jpa.repository.Query;

    import org.springframework.data.repository.query.Param;

    import java.util.List;

    public interface UserRepository extends JpaRepository//JpaRepository<实体类型,主键类型>

    {

        // 通过名称找到用户

        User findByName(String name);

        // 通过名称和年龄找到用户

        User findByNameAndAge(String name, Integer age);

        // 通过名称模糊查询

        List findByNameLike(String name);

        // 使用hql查询

        @Query("from User u where u.name=:name")//:name对应@Param里的name

        User findByHQL(@Param("name") String name);

        // 使用sql查询

        @Query(value = "select * from user where name = ?1 and age = ?2", nativeQuery = true)//?1表示第一个参数,?2表示第二个参数

        User findBySQL(String name, Integer age);

    }

    单元测试

    在src/test/java/你的包名/你的项目名ApplicationTests编写对应的单元测试来验证编写的内容是否正确

    import org.junit.Assert;

    import org.junit.Test;

    import org.junit.runner.RunWith;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.boot.test.context.SpringBootTest;

    import org.springframework.test.context.junit4.SpringRunner;

    @RunWith(SpringRunner.class)

    @SpringBootTest

    public class JpaLearnApplicationTests

    {

        // 注入userRepository

        @Autowired

        private UserRepository userRepository;

        @Test

        public void contextLoads()

        {

            // 添加10个测试用例

            userRepository.save(new User("QQQ",1));

            userRepository.save(new User("WWW",2));

            userRepository.save(new User("EEE",3));

            userRepository.save(new User("AAA",4));

            userRepository.save(new User("SSS",5));

            userRepository.save(new User("DDD",6));

            userRepository.save(new User("ZZZ",7));

            userRepository.save(new User("XXX",8));

            userRepository.save(new User("CCC",9));

            userRepository.save(new User("QQQ2",10));

            // 测试findAll, 查询所有记录

            Assert.assertEquals(10, userRepository.findAll().size());

            // 测试findByName, 查询姓名为AAA的User

            Assert.assertEquals(4, userRepository.findByName("AAA").getAge().longValue());

            // 测试findByHQL, 查询姓名为AAA的User

            Assert.assertEquals(4, userRepository.findByHQL("AAA").getAge().longValue());

            // 测试findByNameAndAge, 查询姓名为SSS并且年龄为5的User

            Assert.assertEquals("SSS", userRepository.findByNameAndAge("SSS", 5).getName());

            // 测试findBySQL, 查询姓名为SSS并且年龄为5的User

            Assert.assertEquals("SSS", userRepository.findBySQL("SSS", 5).getName());

            // 测试删除姓名为AAA的User

            userRepository.delete(userRepository.findByName("AAA"));

            // 测试findAll, 查询所有记录, 验证上面的删除是否成功

            Assert.assertEquals(9, userRepository.findAll().size());

            // 测试findAll, 查询名字有Q的有几个

            Assert.assertEquals(2,userRepository.findByNameLike("%Q%").size());

        }

    }

    点击运行测试用例

    源码地址:https://github.com/LieRabbit/SpringBoot-jpa-learn

    原文地址:https://lierabbit.cn/2018/01/15/SpringBoot%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A84-%E4%BD%BF%E7%94%A8jpa%E8%BF%9B%E8%A1%8C%E6%95%B0%E6%8D%AE%E5%BA%93%E6%93%8D%E4%BD%9C/

    相关文章

      网友评论

        本文标题:Spring Boot快速入门(四):使用jpa进行数据库操作

        本文链接:https://www.haomeiwen.com/subject/aygeoxtx.html