Springboot整合Hibernate(原生非JPA)

链接:https://pan.baidu.com/s/1ZdKFZyx1wMYUsiO4wbnhrQ
提取码:b6bw

0.数据库

在这里插入图片描述

一:目录

在这里插入图片描述

一:配置Pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>mu</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.6.RELEASE</version>        <!-- 1.5.1-->
    </parent>

    <dependencies>
        <!--hibernate的核心-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.5.3.Final</version>
        </dependency>
        <!--用于hibernate整合spring的支持-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>5.2.12.RELEASE</version>
        </dependency>
        <!--使用阿里的连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>
        <!--用于ID生成-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-core</artifactId>
            <version>5.7.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>
</project>

二:application.properties

# ????
spring.application.name=springboot-hibernate
# ??????
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# ?????
spring.datasource.name=defaultDataSource
# ???????
spring.datasource.url=jdbc:mysql://localhost:3306/hibernates?serverTimezone=UTC
# ??????&???
spring.datasource.username=root
spring.datasource.password=root
# ???? WEB ????
server.port=8080

三:配置文件

DataSourceConfig

package bj.sh.gy.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

/**
 * @author LXY
 * @desc
 * @time 2022-10-16  0:55
 */
@Configurable
public class DataSourceConfig {


    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource() {
        DruidDataSource source = new DruidDataSource();
        //source.setDriverClassName("com.mysql.cj.jdbc.Driver");
        source.setName("test");
        source.setInitialSize(1);
        //最大活动
        source.setMaxActive(10);
        source.setMaxWait(60000);
        //配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        source.setTimeBetweenEvictionRunsMillis(60000);
        //配置一个连接在池中最小生存的时间,单位是毫秒
        source.setMinEvictableIdleTimeMillis(300000);
        //每分钟打印一次连接状态日志
        //source.setTimeBetweenLogStatsMillis(60000);
        return source;
    }
}

HibernateToConfig

package bj.sh.gy.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.sql.DataSource;
import java.util.Properties;


/**
 * @author LXY
 * @desc
 * @time 2022-10-16  0:57
 */
@Component
public class HibernateToConfig {
    @Resource
    private DataSource dataSource;
    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean bean = new LocalSessionFactoryBean();
        bean.setDataSource(dataSource);
        // 扫描实体类
        bean.setPackagesToScan("bj.sh.gy.enity");
        Properties properties = new Properties();
        properties.setProperty("current_session_context_class", "thread");
        DruidDataSource druidDataSource = (DruidDataSource) dataSource;
        properties.setProperty("connection.pool_size", String.valueOf(druidDataSource.getMaxActive()));
        // 配置方言 mysql 5.7.34
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL57Dialect");
        //        <!-- 控制台打印SQL -->
        properties.setProperty("hibernate.show_sql", "true");
        // 制台打印SQL格式化
        //properties.setProperty("hibernate.format_sql", "true");
        /**
         * create:表示启动的时候先drop,再create
         * create-drop: 也表示创建,只不过再系统关闭前执行一下drop
         * update: 这个操作启动的时候会去检查schema是否一致,如果不一致会做scheme更新
         * validate: 启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新
         */
        // 首次启动使用 create 让bean自动生成表,之后使用 update模式即可
       // properties.setProperty("hibernate.hbm2ddl.auto", "create");

        bean.setHibernateProperties(properties);
        return bean;
    }
}

四:实体类

package bj.sh.gy.enity;

import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.Date;

/**
 * @author LXY
 * @desc
 * @time 2022-10-16  0:59
 */
@Table(name = "user")
@Entity
public class User {

    @Id
    @Column(name = "id")
    private int id;

    @Column(name = "name")
    private String name;
    @Column(name = "age")
    private int age;
    @Column(name = "t_version")
    private int t_version;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getT_version() {
        return t_version;
    }

    public void setT_version(int t_version) {
        this.t_version = t_version;
    }

    public int getId() {
        return id;
    }

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

五:Dao

dao

	package bj.sh.gy.Dao;

import bj.sh.gy.enity.User;

import java.util.List;

/**
 * @author LXY
 * @desc
 * @time 2022-10-16  10:06
 */
public interface UserDao {

    List<User>queyrall();

    int savauser(User user);
}

daoImple

package bj.sh.gy.Dao;

import bj.sh.gy.enity.User;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author LXY
 * @desc
 * @time 2022-10-16  10:07
 */
@Repository
public class DaoImple implements  UserDao{

    @Autowired
    private SessionFactory sessionFactory;


    @Override
    public List<User> queyrall() {
        return sessionFactory.getCurrentSession().createQuery("from User ").list();
    }

    @Override
    public int savauser(User user) {
        return (int) sessionFactory.getCurrentSession().save(user);
    }
}

六 Service

service

package bj.sh.gy.Service;

import bj.sh.gy.enity.User;

import java.util.List;

/**
 * @author LXY
 * @desc
 * @time 2022-10-16  10:11
 */

public interface UserService {

    List<User>queryUser();

    int savauser(User user);
}

ServiceImple

package bj.sh.gy.Service;

import bj.sh.gy.Dao.UserDao;
import bj.sh.gy.enity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author LXY
 * @desc
 * @time 2022-10-16  10:12
 */
@Service
public class UserServiceImple implements  UserService{

    @Autowired
    UserDao userDao;

    @Override
    @Transactional
    public List<User> queryUser() {
        return userDao.queyrall();
    }

    @Override@Transactional
    public int savauser(User user) {
        return userDao.savauser(user);
    }
}

七:connction

package bj.sh.gy.connction;

import bj.sh.gy.Service.UserService;
import bj.sh.gy.enity.User;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.UUID;

/**
 * @author LXY
 * @desc
 * @time 2022-10-16  1:02
 */
@RestController
public class connction {

    @Autowired
    UserService service;


    @GetMapping("/getqueryuser")
    private List<User> qeryUser(){
        return service.queryUser();
    }

    @GetMapping("/savauser")
    private int savauser(){
        User user=new User();
        user.setId(2);
        user.setName("李四");
        user.setAge(16);
        user.setT_version(1);
        return service.savauser(user);
    }


}

八:启动类

package bj.sh.gy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author LXY
 * @desc
 * @time 2022-10-16  1:04
 */
@SpringBootApplication
public class App {

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

九:效果展示

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值