经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Hibernate » 查看文章
hibernate及SpringBoot集成Jpa实现对数据库操作
来源:cnblogs  作者:sowler  时间:2023/5/12 8:51:52  对本文有异议

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

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

  1. <!--lombok-->
  2. <dependency>
  3. <groupId>org.projectlombok</groupId>
  4. <artifactId>lombok</artifactId>
  5. <version>1.18.16</version>
  6. </dependency>
  7. <!--mysql驱动-->
  8. <dependency>
  9. <groupId>mysql</groupId>
  10. <artifactId>mysql-connector-java</artifactId>
  11. <version>8.0.26</version>
  12. </dependency>
  13. <!--单元测试-->
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>4.11</version>
  18. <scope>test</scope>
  19. </dependency>
  20. <!--hibernate-->
  21. <dependency>
  22. <groupId>org.hibernate</groupId>
  23. <artifactId>hibernate-core</artifactId>
  24. <version>5.6.14.Final</version>
  25. </dependency>

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

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

3、创建一个实体类

  1. @Datapublic class User {private Long id;
  2. private String name;
  3. private String password;
  4. private String account;
  5. private String email;private String secondName;
  6. }

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

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

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

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

  1. @org.junit.Test
  2. public void TestSave(){
  3. //读取 hibernate.cfg.xml配置文件, 创建会话工厂 SessionFactory
  4. Configuration configuration = new Configuration().configure();
  5. SessionFactory sessionFactory = configuration.buildSessionFactory();
  6. // 获取 Session 对象
  7. Session openSession = sessionFactory.openSession();
  8. //开启事务
  9. openSession.beginTransaction();
  10. User user = new User();
  11. user.setAccount("hibernateTest01");
  12. user.setName("hibernateTest01");
  13. user.setPassword("ASWDEWSA");
  14. user.setEmail("hibernate02@hbm.com");
  15. user.setSecondName("hibernateTest01");
  16. openSession.save(user);
  17. //提交事务
  18. openSession.getTransaction().commit();
  19. }

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

  1. private Session openSession;
  2. @Before
  3. public void before(){
  4. //读取 hibernate.cfg.xml配置文件, 创建会话工厂 SessionFactory
  5. Configuration configuration = new Configuration().configure();
  6. SessionFactory sessionFactory = configuration.buildSessionFactory();
  7. // 获取 Session 对象
  8. openSession = sessionFactory.openSession();
  9. }
  10. @org.junit.Test
  11. public void TestSave(){
  12. // //读取 hibernate.cfg.xml配置文件, 创建会话工厂 SessionFactory
  13. // Configuration configuration = new Configuration().configure();
  14. // SessionFactory sessionFactory = configuration.buildSessionFactory();
  15. // // 获取 Session 对象
  16. // Session openSession = sessionFactory.openSession();
  17. //开启事务
  18. openSession.beginTransaction();
  19. User user = new User();
  20. user.setAccount("hibernateTest01");
  21. user.setName("hibernateTest01");
  22. user.setPassword("ASWDEWSA");
  23. user.setEmail("hibernate02@hbm.com");
  24. user.setSecondName("hibernateTest01");
  25. openSession.save(user);
  26. //提交事务
  27. openSession.getTransaction().commit();
  28. }
  1. @After
    public void after(){
    if (openSession != null){
    openSession.close();
    }
    }

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

  1. @org.junit.Test
  2. public void testUpdate(){
  3. //开启事务
  4. openSession.beginTransaction();
  5. User user = new User();
  6. user.setId(8L);
  7. user.setAccount("hibernateTest03");
  8. user.setName("hibernateTest03");
  9. user.setPassword("ASWDEWSAW");
  10. user.setEmail("hibernate03@hbm.com");
  11. user.setSecondName("hibernateTest03");
  12. openSession.update(user);
  13. //提交事务
  14. openSession.getTransaction().commit();
  15. }
  16. @org.junit.Test
  17. public void testDelete(){
  18. //开启事务
  19. openSession.beginTransaction();
  20. User user = new User();
  21. user.setId(8L);
  22. openSession.delete(user);
  23. //提交事务
  24. openSession.getTransaction().commit();
  25. }
  26. @org.junit.Test
  27. public void testFind(){
  28. User user = new User();
  29. user.setId(8L);
  30. //已过时
  31. Criteria criteria = openSession.createCriteria(User.class);
  32. List list = criteria.list();
  33. for (Object o : list) {
  34. System.out.println(o);
  35. }
  36. List fromUser = openSession.createQuery("from User").list();
  37. fromUser.forEach(System.out::println);
  38. }

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

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

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.2.11.RELEASE</version>
  5. </parent>
  6.  
  7. <dependencies>
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-test</artifactId>
  15. <scope>test</scope>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-data-jpa</artifactId>
  20. </dependency>
  21. <!--数据库连接池-->
  22. <dependency>
  23. <groupId>com.alibaba</groupId>
  24. <artifactId>druid</artifactId>
  25. <version>1.2.16</version>
  26. </dependency>
  1. <dependencies>

7、创建Springboot启动类

  1. /**
  2. * @date: 2023-05-11 13:29
  3. */
  4. @SpringBootApplication
  5. public class HibernApplication {
  6. public static void main(String[] args) {
  7. SpringApplication.run(HibernApplication.class,args);
  8. }
  9. }

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

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

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

  1. @Data
  2. @Entity
  3. @Table(name = "tb_user")
  4. public class User {
  5. @Id
  6. @GeneratedValue(strategy = GenerationType.IDENTITY)
  7. @Column(name = "id",nullable = false)
  8. private Long id;
  9. private String name;
  10. private String password;
  11. private String account;
  12. private String email;
  13. @Column(name = "second_name",nullable = false)
  14. private String secondName;
  15. }

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

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

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

  1. @Service
  2. public class UserServiceImpl implements IUserService {
  3. @Autowired
  4. private UserMapper userMapper;
  5. @Override
  6. public List<User> findAll() {
  7. List<User> userIterable = userMapper.findAll();
  8. return userIterable;
  9. }
  10. @Override
  11. public User save() {
  12. User user = new User();
  13. user.setAccount("hibernateJPa03");
  14. user.setName("hibernateJPa03");
  15. user.setPassword("ASWDEWSAW");
  16. user.setEmail("hibernateJPa03@hbm.com");
  17. user.setSecondName("hibernateJPa03");
  18. User save = userMapper.save(user);
  19. return save;
  20. }
  21. @Override
  22. public User update() {
  23. User user = new User();
  24. user.setId(5L);
  25. user.setAccount("hibernateJPa03");
  26. user.setName("hibernateJPa03");
  27. user.setPassword("ASWDEWSAW");
  28. user.setEmail("hibernateJPa03@hbm.com");
  29. user.setSecondName("hibernateJPa03");
  30. User save = userMapper.save(user);
  31. return save;
  32. }
  33. @Override
  34. public User delete() {
  35. User user = new User();
  36. user.setId(10L);
  37. userMapper.delete(user);
  38. return null;
  39. }
  40. @Override
  41. public User userById() {
  42. // Iterable<User> allById = userMapper.findAllById(Arrays.asList(1L));
  43. Optional<User> userOptional = userMapper.findById(4L);
  44. if (!userOptional.isPresent()){
  45. return null;
  46. }
  47. User user = userOptional.get();
  48. return user;
  49. }
  50. }

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

  1. @RestController
  2. @RequestMapping("/admin/user")
  3. public class UserController {
  4. @Autowired
  5. private IUserService userService;
  6. @GetMapping
  7. public String crudUser(){
  8. List<User> userList = userService.findAll();
  9. userList.forEach(System.out::println);
  10. User user = userService.userById();
  11. System.out.println(user);
  12. return "操作执行成功!!!";
  13. }
  14. }

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

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

 补充:

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

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

 

原文链接:https://www.cnblogs.com/eternality/p/17391141.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号