springboot2.X集成hibernate5(非springJPA)配置sessionFactory工厂实现数据库操作
一、引入相关依赖<?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.o
·
一、引入相关依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jx</groupId>
<artifactId>hibernate_shiro</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hibernate_shiro</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
</properties>
<dependencies>
<!-- 添加JPA依赖,官网描述支持spring data JPA 和hibernate-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--导入连接MySQL的依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 添加web依赖,使用内置tomcat容器-->
<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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.7.RELEASE</version>
<configuration>
<mainClass>com.jx.hibernate_shiro.HibernateShiroApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
导入hibernate、MySQL、web依赖
二、设置数据库信息及hibernate配置
# 应用服务 WEB 访问端口
server.port=8080
#mysql
spring.datasource.url=jdbc:mysql://localhost:3306/shiro?serverTimezone=Asia/Shanghai&useunicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.max-idle=10
#spring.datasource.max-wait=10000
#spring.datasource.min-idle=5
#spring.datasource.initial-size=5
# 指定数据库类型
spring.jpa.database = MYSQL
# 是否展示SQL
spring.jpa.show-sql = true
# hibernate自动建表
spring.jpa.hibernate.ddl-auto = update
#命名策略
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
注意新版本中驱动已更改,设置spring.datasource.driver-class-name=com.mysql.jdbc.Driver启动会警告。
另外高版本MySQL里的需要配置确定时区问题,否则会报错,在URL路径下追加 serverTimezone=UTC&
没有红框内容会报错
需要在JDBC或者MySQL服务里配置统一时区,建议设置
serverTimezone=Asia/Shanghai
三、编写hibernate配置类,自定义sessionfactory。
package com.jx.hibernate_shiro.hibernate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import java.util.Properties;
@Configuration
public class HibernateConfig {
@Autowired
private Environment environment;
/*
* 配置SessionFactory会话工厂注入到spring容器
* */
@Bean
LocalSessionFactoryBean sessionFactory(){
LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
localSessionFactoryBean.setDataSource(getDataSource());
localSessionFactoryBean.setPackagesToScan("com.jx.hibernate_shiro");
localSessionFactoryBean.setHibernateProperties(hibernateProperties());
return localSessionFactoryBean;
}
/*
* 配置数据源
* */
private DriverManagerDataSource getDataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getProperty("spring.datasource.driver-class-name"));
dataSource.setUsername(environment.getProperty("spring.datasource.username"));
dataSource.setPassword(environment.getProperty("spring.datasource.password"));
dataSource.setUrl(environment.getProperty("spring.datasource.url"));
return dataSource;
}
/*
*设置hibernate配置属性
* */
private Properties hibernateProperties(){
Properties properties = new Properties();
properties.setProperty("hibernate.naming-strategy",environment.getProperty("spring.jpa.hibernate.naming-strategy"));
properties.setProperty("hibernate.dialect",environment.getProperty("spring.jpa.properties.hibernate.dialect"));
properties.setProperty("hibernate.current_session_context_class",environment.getProperty("spring.jpa.properties.hibernate.current_session_context_class"));
properties.setProperty("hibernate.show_sql",environment.getProperty("spring.jpa.show-sql"));
properties.setProperty("hibernate.hbm2ddl.auto",environment.getProperty("spring.jpa.hibernate.ddl-auto"));
return properties;
}
}
编写hibernate工具类
package com.jx.hibernate_shiro.hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/*
* hibernate工具类
* */
@Component
public class HibernateUtils {
@Autowired
private SessionFactory sessionFactory;
//开启一个会话,提交后会自动关闭会话
public Session getSession(){
return sessionFactory.getCurrentSession();
}
//开启一个会话,提交后需要手动关闭会话
public Session openSession(){
return sessionFactory.openSession();
}
//关闭会话
public void closeSession(Session session){
if (session!=null&session.isOpen()){
try {
session.close();
}catch (Exception e){
e.getStackTrace();
}
}
}
}
四、编写实体类、DAO、controller
实体类与数据库表的映射关系
package com.jx.hibernate_shiro.beans;
import org.springframework.stereotype.Component;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name= "t_user")//指定数据库表名
@Component
public class User implements Serializable {
@Id//指定实体类属性为表ID字段
@GeneratedValue(strategy = GenerationType.IDENTITY)//指定ID生成策略为自增长
private Integer userID;
@Column(name = "userName")//指定属性与表字段名对应关系
private String userName;
@Column(name="passWord")
private String passWord;
public Integer getUserID() {
return userID;
}
public String getUserName() {
return userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setUserID(Integer userID) {
this.userID = userID;
}
}
DAO类
package com.jx.hibernate_shiro.Daos;
import com.jx.hibernate_shiro.beans.User;
import com.jx.hibernate_shiro.hibernate.HibernateUtils;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class UserDao {
@Autowired
private HibernateUtils hibernateUtils;
//根据用户ID查询用户
public User getUser(Integer userID){
Session session = null;
User user = null;
try{
session = hibernateUtils.openSession();
user = session.get(User.class,userID);
}catch (Exception e){
e.getStackTrace();
}finally {
hibernateUtils.closeSession(session);
}
return user;
}
//添加用户
public void addUser(User user){
Session session = null ;
try{
session = hibernateUtils.openSession();
session.save(user);
}catch (Exception e){
e.getStackTrace();
}finally {
hibernateUtils.closeSession(session);
}
}
}
controller类
package com.jx.hibernate_shiro.controllers;
import com.jx.hibernate_shiro.Daos.UserDao;
import com.jx.hibernate_shiro.beans.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserDao userDao;
@Autowired
private User user;
/*
* 根据ID查询用户
* */
@RequestMapping("/getUserInfo/{userID}")
public User getUserInfo(@PathVariable Integer userID){
User user = userDao.getUser(userID);
return user;
}
/*
* 添加一个用户
* */
@RequestMapping("/add/{userName}/{passWord}")
public void addUser(@PathVariable String userName,@PathVariable String passWord){
user.setUserName(userName);
user.setPassWord(passWord);
userDao.addUser(user);
}
}
编写springboot启动类
package com.jx.hibernate_shiro;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
@SpringBootApplication(exclude = {//排除相关自动配置
DataSourceAutoConfiguration.class,
JpaRepositoriesAutoConfiguration.class,
HibernateJpaAutoConfiguration.class })
public class HibernateShiroApplication {
public static void main(String[] args) {
SpringApplication.run(HibernateShiroApplication.class, args);
}
}
注意在@SpringbootApplication()注解中排除相关依赖的自动配置(JPA、hibernate、DataSource)
文件目录结构
五、测试添加数据和查询数据
添加两个用户
添加成功
更多推荐
已为社区贡献1条内容
所有评论(0)