Spring boot的基础总结(四)-------MYSQL+hibernate+JPA

上回说完redis,应该都知道是用作于缓存容器的了。
那我是不是还说到了mybatis.
啊,那我们这次来说一说JPA+hibernate吧。
至于为什么不用mybatis.大概是我MYSQL语句确实写得不熟,还是喜欢面向对象多一点。
在这里插入图片描述
言归正传.

6.MYSQL+JPA+hibernate

6.1 基本概念
MYSQL是啥,用来干嘛的,跟redis的区别是啥。简单明了的就是MYSQL是磁盘存储,是存在硬盘上的,持久化的存储。redis也可以持久化存储,但是一般作缓存,存储在内存上。(如果磁盘和内存概念搞不清楚,先去看下计算机基础。)
那JPA呢?JPA是持久化标准,是作为一种规范,并未实现的接口协议。
hibernate就是对JPA的一种实现,emmm…硬要说你理解成抽象类和实现类我感觉也没有什么问题。
先来讲讲为什么用hibernate吧,首先,它用的基本概念是ORM,用对象的思考方式就能替代掉原本MYSQL的实体的概念。在使用和操作数据的时候你会感到很亲切。
然后,你也可以基本不用写MYSQL语句也能进行CRUD,当然它也可以用MYSQL语句来写自己的函数定义。反正我用起来非常舒服。

6.2配置MYSQL+JPA+hibernate
来来来,先去下载一个MYSQL,然后进行安装,开启服务。
按照教程下载就好了
和redis一样,Spring boot可不会帮你自动下载一个服务器 0 0.
然后再下一个Navicat,用来可视化数据库,这样你至少能知道自己到底有没有存储读写成功。
确认服务是否成功开启。
在这里插入图片描述
Navicat能不能连接成功
在这里插入图片描述
如果都OK了,说明前期准备就完成了。
在这里插入图片描述

2.配置spring boot
熟悉的味道,熟悉的感觉,开始配置spring boot.
有挺多参数我也不太清楚怎么回事,反正先弄了再说,不过要搞清楚数据库服务,和db的概念啊。

#数据库配置
#主要作用是:自动创建、更新、验证数据库表结构。
spring.jpa.hibernate.ddl-auto=update
#数据库连接
#localhost,为IP,3306为端口,test为数据库
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
#hibernate配置
#数据库类别
spring.jpa.database=mysql
#输出日志
spring.jpa.show-sql=true 
#数据库没有会新建,内容不会清空
hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.jdbc.batch_size=500
spring.jpa.properties.hibernate.jdbc.batch_versioned_data=true
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates =true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

好了,这样你就连接上MYSQL服务了!!!!
是不是很神奇!!!!怎么做到的!!!!
我也不知道!!!!反正就是spring boot全家桶的强大之处,当然你能弄懂,希望能帮我科普科普(文盲博主)。
好了,灵魂注入完毕了。

3.IDE连接上你的数据库(可做可不做)
一张图表示完,不然之后的@Entity,@Table会有警告,而且看数据的时候也方便很多
在这里插入图片描述

4.基本案例
新建一个类,做我们的数据库的表.
加上@Entity注解,还有一些神奇的注解自行百度吧。
运行一下


@Entity
public class Student   {
    @Id//这个是主键
    @GeneratedValue(strategy = GenerationType.AUTO)//自增长
    private Integer id;
    private Integer old;
    private String Name;

    public Integer getId() {
        return id;
    }

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

    public Integer getOld() {
        return old;
    }

    public void setOld(Integer old) {
        this.old = old;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }
}

去Navicat看一下,这样就建好了一个表
在这里插入图片描述
好了,之后就到了我们的CRUD操作时间。
新建一个接口类,继承CrudRepository<Student, Integer>

@Component
public interface StudentRepository extends CrudRepository<Student, Integer> {

    //在批量删除更新的时候,不适合用Hibernate,用Mysql
    //分页查询直接用mysql
    @Query(value = "select * from Student where old>?20",nativeQuery = true)
    List<Student> findByOldRegex();

    @Query(value = "select * from Student where old>?1",nativeQuery = true)
    List<Student> findByOldRegex(int old);

    @Query(value = "select * from Student where old>?1 and old <?2",nativeQuery = true)
    List<Student> findByOldRegex(int oldless,int oldmore);

    @Query(value = "select s from Student s where s.old>?1 and s.old <?2")
    List<Student> findByOldRegex2(int oldless,int oldmore);

    @Query(value = "select * from Student where old >?1 ORDER BY ?#{#pageable}", nativeQuery = true)
    List<Student> PageSearch( int old, Pageable pageable);

    List<Student> findByOldLessThan(int old);


}

这里我们仔细聊一聊,@Query,这样就可以使用自己MYSQL语句,并且加上自己的参数进去,是没有什么问题的。
然后,它本身有自带的save方法,find方法。然而我们应该要带很多的参数去进行条件查询,hibernate强大就在于,你可以不用带注解@Query自己去写了,你可以去定义方法,findByOldLessThat,这就意味着,寻找Old,并且old少于某个值的意思。 这样你就相当于完成了Mysql语句了,只用定义,不用实现,猛不猛?猛啊!
我们来测试一下。

  @Autowired
    StudentRepository gStudentRepository;

public Object DBRedisUpdateKey(String key,int db){
        Object ReturnObject = null;
        Student text = new Student();
        text.setOld(18);
        text.setName("fff");
        Object l = gStudentRepository.save(text);//返回存储的本体..

        //先写入数据库,得判断是否成功
        System.out.println("写入数据库成功");
        ReturnObject = l;
      
        return ReturnObject;
    }

自己去Navicat去看一下,有没有惊喜?~

5.结尾
emmm,好了,我这里只做一些简单的案例做介绍,其实我们还需要继续加油去完善自己的一些类表,虽然hibernate写起来,你要定义的方法比较多,一个表就要定义很多方法了。而且在加入数据库的时候因为是一条一条加入的,但是你可以不用写SQL啊,而且写代码的时候,不像Mybits一样要去用数据库思维去思考。我们还有很多问题没有解决。我们还有很多的提升空间,下面留着一些东西给大佬们留下评论给我科普科普。
①hibernate批量加入
②hibernate连表查询
③hibernate能否将所有定义的接口放在一个文件,而不用一个表就要加一个接口类,这样会使得工程文件中有很多类文件。然后我发现这个问题的本质在于,我定义的是接口类,而且也没有实现类。一个public里面定义的接口类,自动注入也没办法找到实例。所以…我很迷0 0不知道咋做…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值