hibernate及SpringBoot集成Jpa实现对数据库操作

这篇具有很好参考价值的文章主要介绍了hibernate及SpringBoot集成Jpa实现对数据库操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先使用Maven工程和junit完成hibernate对数据库的简单操作,完成之后在使用SpringBoot集成Jap完成hibernate对数据库的操作。本文仅供新手学习查看,具体线上使用需要对代码继续进行相关优化。

1、先创建一个Maven工程,导入相关依赖。

 <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--hibernate-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.6.14.Final</version>
        </dependency>

2、在resources目录下创建hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!--数据库配置-->
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/user-mode</property>
        <property name="connection.username">root</property>
        <property name="connection.password">1234qwer</property>
        <!-- Hibernate 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 打印 SQL 语句-->
        <property name="show_sql">true</property>
        <!-- 格式化 SQL 语句-->
        <property name="format_sql">true</property>
        <!-- 映射文件所在位置 -->
        <mapping resource="/mapper/User.hbm.xml" />
    </session-factory>
</hibernate-configuration>

3、创建一个实体类

@Datapublic class User {private Long id;
    private String name;
    private String password;
    private String account;
    private String email;private String secondName;
}

4、在resources目录下创建一个mapper目录,在mapper目录下面创建User实体类的映射文件User.hbm.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- name 属性:持久化类的全路径 -->
    <!-- table 属性:表的名称 -->
    <class name="com.itmy.entity.User" table="tb_user">
        <id name="id" column="id" type="java.lang.Long">
            <!--主键生成策略-->
            <generator class="native"></generator>
        </id>
        <property name="name" column="name" type="java.lang.String" not-null="false" length="50"></property>
        <property name="account" column="account" type="java.lang.String"></property>
        <property name="email" column="email" type="java.lang.String"></property>
        <property name="password" column="password" type="java.lang.String"></property>
        <property name="secondName" column="second_name" type="java.lang.String"></property>
    </class>
</hibernate-mapping>

配置完上述配置之后,接下来我们就可以使用junit进行测试了,先在test目录下面创建一个测试类UserTest。

5、使用junit添加一个User用户

 @org.junit.Test
    public void TestSave(){
        //读取 hibernate.cfg.xml配置文件, 创建会话工厂 SessionFactory
        Configuration configuration = new Configuration().configure();
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 获取 Session 对象
        Session openSession = sessionFactory.openSession();
        //开启事务
        openSession.beginTransaction();
        User user = new User();
        user.setAccount("hibernateTest01");
        user.setName("hibernateTest01");
        user.setPassword("ASWDEWSA");
        user.setEmail("hibernate02@hbm.com");
        user.setSecondName("hibernateTest01");
        openSession.save(user);
        //提交事务
        openSession.getTransaction().commit();
    }

执行之后,控制台没有报红,说明添加成功了。可以给上述代码做下优化,帮助我们更方便的完成其他操作。

    private Session openSession;
    @Before
    public void before(){
        //读取 hibernate.cfg.xml配置文件, 创建会话工厂 SessionFactory
        Configuration configuration = new Configuration().configure();
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 获取 Session 对象
        openSession = sessionFactory.openSession();
    }

    @org.junit.Test
    public void TestSave(){
//        //读取 hibernate.cfg.xml配置文件, 创建会话工厂 SessionFactory
  //      Configuration configuration = new Configuration().configure();
 //       SessionFactory sessionFactory = configuration.buildSessionFactory();
//        // 获取 Session 对象
 //       Session openSession = sessionFactory.openSession();
        //开启事务
        openSession.beginTransaction();
        User user = new User();
        user.setAccount("hibernateTest01");
        user.setName("hibernateTest01");
        user.setPassword("ASWDEWSA");
        user.setEmail("hibernate02@hbm.com");
        user.setSecondName("hibernateTest01");
        openSession.save(user);
        //提交事务
        openSession.getTransaction().commit();
    }
   @After
public void after(){
if (openSession != null){
openSession.close();
}
}

实现更新、删除、查询,查询有许多种方法,后面可以进行深入学习。

 @org.junit.Test
    public void testUpdate(){
        //开启事务
        openSession.beginTransaction();
        User user = new User();
        user.setId(8L);
        user.setAccount("hibernateTest03");
        user.setName("hibernateTest03");
        user.setPassword("ASWDEWSAW");
        user.setEmail("hibernate03@hbm.com");
        user.setSecondName("hibernateTest03");
        openSession.update(user);
        //提交事务
        openSession.getTransaction().commit();
    }
    @org.junit.Test
    public void testDelete(){
        //开启事务
        openSession.beginTransaction();
        User user = new User();
        user.setId(8L);
        openSession.delete(user);
        //提交事务
        openSession.getTransaction().commit();
    }
    @org.junit.Test
    public void testFind(){
        User user = new User();
        user.setId(8L);
        //已过时
        Criteria criteria = openSession.createCriteria(User.class);
        List list = criteria.list();
        for (Object o : list) {
            System.out.println(o);
        }
        List fromUser = openSession.createQuery("from User").list();
        fromUser.forEach(System.out::println);
    }

到这里通过maven简单的使用hibernate的操作就完成了,后面我们使用SpringBoot集成Jpa。

6、首先调整我们的maven项目,添加springboot相关依赖以及jpa依赖。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.11.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.16</version>
        </dependency>
 <dependencies>

7、创建Springboot启动类

/**
 * @date: 2023-05-11 13:29
 */
@SpringBootApplication
public class HibernApplication {

    public static void main(String[] args) {
        SpringApplication.run(HibernApplication.class,args);
    }
}

8、在resources目录下创建yml文件

server:
  port: 8800
spring:
  application:
    name: hibernate
  profiles:
    active: prod
spring:
  jpa:
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQLDialect
        new_generator_mappings: false
        format_sql: true
        #show_sql: true
    database: mysql
    show-sql: true
    #当数据库表没有该属性字段,会根据实体类相关字段自动创建一个字段,如secondName在数据库创建的为second_name
    hibernate:
      ddl-auto: update
   # 生产环境设置成 none,避免程序运行时自动更新数据库结构
#ddl-auto: none
  datasource:
   driver-class-name: com.mysql.cj.jdbc.Driver
   type: com.alibaba.druid.pool.DruidDataSource
   url: jdbc:mysql://localhost:3306/user-mode?serverTimezone=Asia/Shanghai
   username: root
   password: 1234qwer

9、调整之前创建的实体类

@Data
@Entity
@Table(name = "tb_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id",nullable = false)
    private Long id;

    private String name;

    private String password;

    private String account;

    private String email;

    @Column(name = "second_name",nullable = false)
    private String secondName;

}

10、创建一个dao层接口继承jpa接口

public interface UserMapper extends JpaRepository<User,Long> {
   
}

后面就跟正常调用方法一样,通过注入UserMapp接口,进行调用。

@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> findAll() {
        List<User> userIterable = userMapper.findAll();
        return userIterable;
    }
    @Override
    public User save() {
        User user = new User();
        user.setAccount("hibernateJPa03");
        user.setName("hibernateJPa03");
        user.setPassword("ASWDEWSAW");
        user.setEmail("hibernateJPa03@hbm.com");
        user.setSecondName("hibernateJPa03");
        User save = userMapper.save(user);
        return save;
    }
    @Override
    public User update() {
        User user = new User();
        user.setId(5L);
        user.setAccount("hibernateJPa03");
        user.setName("hibernateJPa03");
        user.setPassword("ASWDEWSAW");
        user.setEmail("hibernateJPa03@hbm.com");
        user.setSecondName("hibernateJPa03");
        User save = userMapper.save(user);
        return save;
    }
    @Override
    public User delete() {
        User user = new User();
        user.setId(10L);
        userMapper.delete(user);
        return null;
    }
    @Override
    public User userById() {
       // Iterable<User> allById = userMapper.findAllById(Arrays.asList(1L));
        Optional<User> userOptional = userMapper.findById(4L);
        if (!userOptional.isPresent()){
            return null;
        }
        User user = userOptional.get();

        return user;
    }
}

创建controller类编写一个接口进行测试。

@RestController
@RequestMapping("/admin/user")
public class UserController {

    @Autowired
    private IUserService userService;

    @GetMapping
    public String crudUser(){
        List<User> userList = userService.findAll();
        userList.forEach(System.out::println);
        User user = userService.userById();
        System.out.println(user);
        return "操作执行成功!!!";
    }
}

调用接口执行过后,查看控制台输出。

hibernate及SpringBoot集成Jpa实现对数据库操作

数据查询成功。至此springboot集成JPA就完成了。里面有很多方法,时间充足可以试试不同的方法。

 补充:

通过JPA使用原生sql进行模糊查询,在Mapper接口增加一个接口方法,使用jpa的@query注解进行sql语句编写

public interface UserMapper extends JpaRepository<User,Long> , JpaSpecificationExecutor {
  #nativeQuery = true 说明启动mysql本身的sql语句进行查询 默认为false
    @Query(value = "select * from tb_user where name like concat('%',?1,'%')",nativeQuery = true)
    List<User> findOneByName(@Param("name") String name);
}

hibernate及SpringBoot集成Jpa实现对数据库操作

 文章来源地址https://www.toymoban.com/news/detail-438783.html

到了这里,关于hibernate及SpringBoot集成Jpa实现对数据库操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PostgreSQL数据库——Docker版本的postgres安装 & Navicat连接方式+导入向导使用 & SpringBoot结合Jpa使用PostgreSQL初步

    1.PostgreSQL数据库初始,开源; 2.Docker版本的postgres安装,以及挂载启动; 3.Navicat连接方式+导入向导使用,导入csv文件; 4.SpringBoot结合Jpa使用PostgreSQL初步; PostgreSQL是一种开源的关系型数据库管理系统(RDBMS),它是一种高度可扩展的、可靠的、功能丰富的数据库系统。以下是

    2024年02月04日
    浏览(58)
  • SpringBoot3数据库集成

    标签:Jdbc.Druid.Mybatis.Plus; 项目工程中,集成数据库实现对数据的增晒改查管理,是最基础的能力,而对于这个功能的实现,其组件选型也非常丰富; 通过如下几个组件来实现数据库的整合; Druid连接池 :阿里开源的数据库连接池,并且提供 SQL 执行的监控能力; MybatisPlu

    2024年02月13日
    浏览(33)
  • springboot集成Logback 日志写入数据库

    引入maven依赖 注意:springboot内部是有Logback的包,但是本人使用的时候缺少部分类文件,因此单独映入了一次 建表 logback有三张表logging_event、logging_event_exception、logging_event_property,不需要自己创建,只需要在如下位置找到自己保存的库表生成sql复制运行即可. 添加配置文件(logback-sp

    2024年02月07日
    浏览(38)
  • Springboot集成轻量级内存数据库H2

    最近做一个小项目,需要存储的数据不多,用mysql太重了,用其他的Redis之类的也不太方便,然后就想到了H2,他就是一个jar包,可以和项目一起打包发布,非常适合数据量不多的微小系统,下面大概介绍下H2的基本知识和Springboot的集成 H2是一个用Java开发的嵌入式数据库,它本

    2024年02月07日
    浏览(36)
  • SpringBoot 如何使用 EmbeddedDatabaseBuilder 进行数据库集成测试

    在开发 SpringBoot 应用程序时,我们通常需要与数据库进行交互。为了确保我们的应用程序在生产环境中可以正常工作,我们需要进行数据库集成测试,以测试我们的应用程序是否能够正确地与数据库交互。在本文中,我们将介绍如何使用 SpringBoot 中的 EmbeddedDatabaseBuilder 来进行

    2024年02月16日
    浏览(46)
  • Hibernate适配DM数据库主键自增配置

    hibernate有多种生成主键策略,例如assigned、increment、hilo、seqhilo、sequence、identity、native、uuid、guid等方法,其中native由hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式,灵活性很强。如果能支持identity则使用identity,如果支持sequence则使用

    2023年04月24日
    浏览(36)
  • 【SpringBoot笔记28】SpringBoot集成ES数据库之操作doc文档(创建、更新、删除、查询)

    这篇文章,主要介绍SpringBoot集成ES数据库之操作doc文档(创建、更新、删除、查询)。 目录 一、SpringBoot操作ES文档数据 1.1、创建文档 1.2、更新文档 1.3、删除文档

    2024年02月08日
    浏览(38)
  • SpringBoot集成Jpa对数据进行排序、分页、条件查询和过滤

    之前介绍了SpringBoot集成Jpa的简单使用,接下来介绍一下使用Jpa连接数据库对数据进行排序、分页、条件查询和过滤操作。首先创建Springboot工程并已经继承JPA依赖,如果不知道可以查看我的另一篇文进行学习,这里不做介绍。文章地址(https://www.cnblogs.com/eternality/p/17391141.htm

    2024年02月04日
    浏览(32)
  • Spring Data JPA之自动创建数据库表

    由于在项目中使用到了Spring Data JPA(Java Persistent API)进行项目开发,并且自己对JPA比较感兴趣想进行学习和了解。首先学习和了解的是JPA自动创建数据库表,通过JPA能够让软件工程师们不用再去手动创建数据表,能够减轻软件工程师们的工作量。 通过本篇博客可以实现使用

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包