网页设计中优秀的网站,wordpress机械主题,网站怎么验证用户是否登陆,网站建设报价 下载在本教程中#xff0c;我们将展示如何创建一个Spring Boot应用程序#xff0c;该应用程序通过Hibernate与Oracle数据源进行通信。 先决条件#xff1a; Eclipse IDE#xff08;最新版本#xff09; Maven的4 Java 1.8 1-创建Maven项目 打开eclipse#xff0c;然后创… 在本教程中我们将展示如何创建一个Spring Boot应用程序该应用程序通过Hibernate与Oracle数据源进行通信。 先决条件 Eclipse IDE最新版本 Maven的4 Java 1.8 1-创建Maven项目 打开eclipse然后创建一个新的Maven项目并将其命名为SpringBootHibernate 。 在本教程的最后我们将获得以下项目结构 2-pom.xml 通过添加以下父依赖项在pom.xml中配置Spring Boot parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion1.5.10.RELEASE/version
/parent 然后添加spring-boot-starter依赖性以将我们的应用程序作为独立的jar应用程序运行 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId
/dependency 现在为了利用Spring数据jpa和休眠状态我们只需添加spring-boot-starter-data-jpa作为依赖项 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId
/dependency 一旦在项目中包含Spring Boot Starter JPA 我们就会从各种各样的依赖项中获得以下功能 自动配置内存中嵌入式数据库使您无需设置数据库即可运行应用程序。 自动导入JPA API和Hibernate添加此依赖项将自动导入JPA API并使用Hibernate作为默认实现。 从application.properties自动读取数据源和休眠配置。 自动创建表实体并自动执行import.sql。 这是整个pom.xml供参考 project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.programmer.gate/groupIdartifactIdSpringBootHibernate/artifactIdpackagingjar/packagingversion0.0.1-SNAPSHOT/versionnameSpringBootHibernate/namepropertiesmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion1.5.10.RELEASE/version/parentdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project3-将Oracle驱动程序添加到类路径 在本教程中我们将覆盖Spring Boot提供的默认内存数据库并使用我们自己的oracle数据库。 为此我们在WEB-INF / lib下添加“ oracle-ojdbc6-11.2.0.3.jar” 并在类路径中对其进行定义。 4- application.properties 配置oracle数据源并在application.properties中休眠 # create and drop tables and sequences, loads import.sql
spring.jpa.hibernate.ddl-autocreate-drop# Oracle settings
spring.datasource.urljdbc:oracle:thin:localhost:1522:orcl
spring.datasource.usernameHIBERNATE_TEST
spring.datasource.passwordHIBERNATE_TEST
spring.datasource.driver.classoracle.jdbc.driver.OracleDriver# logging
logging.pattern.console%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
logging.level.org.hibernate.SQLdebug5个实体 我们的实体代表一个球员和一个具有一对多关系的球队每个球队可以有很多球员而一个球员一次只能与一个球队比赛。 因此我们在com.programmer.gate.model包下创建实体 播放器 package com.programmer.gate.model;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;Entity
public class Player {IdGeneratedValue(strategyGenerationType.SEQUENCE, generator player_Sequence)SequenceGenerator(name player_Sequence, sequenceName PLAYER_SEQ)private Long id;Column(name name)private String name;Column(name num)private int num;Column(name position)private String position;ManyToOne(fetch FetchType.LAZY)JoinColumn(name team_id, nullable false)private Team team;public Player() {}// getters/setters
} Team.java package com.programmer.gate.model;import java.util.List;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;Entity
public class Team {IdGeneratedValue(strategyGenerationType.SEQUENCE, generator team_Sequence)SequenceGenerator(name team_Sequence, sequenceName TEAM_SEQ)private Long id;Column(name name)private String name;OneToMany(cascade CascadeType.ALL,fetch FetchType.EAGER,mappedBy team)private ListPlayer players;public Team() {}// getters/setters
} 由于我们在application.properties中设置了spring.jpa.hibernate.ddl-auto create-drop 因此我们的应用程序将在数据库中自动创建Player和Team实体以及它们的顺序和约束。 我们的应用程序还将在类路径中查找import.sql并执行如果找到。 在我们的示例中我们在src / main / resources下定义import.sql 以便用静态数据填充表 insert into Team (id,name) values(1,Barcelona);insert into Player (id, team_id, name, num, position) values(1,1,Lionel Messi, 10, Forward);
insert into Player (id, team_id, name, num, position) values(2,1,Andreas Inniesta, 8, Midfielder);
insert into Player (id, team_id, name, num, position) values(3,1,Pique, 3, Defender);6-存储库 我们在com.programmer.gate.repository下定义我们的存储库接口。 每个存储库都扩展了Spring CrudRepository 它为基本的findsave和delete方法提供了默认实现因此我们不必为它们定义实现类。 播放器存储库 package com.programmer.gate.repository;import java.util.List;import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;import com.programmer.gate.model.Player;Repository
public interface PlayerRepository extends CrudRepositoryPlayer, Long {ListPlayer findByTeamId(long teamId);
} 团队资料库 package com.programmer.gate.repository;import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;import com.programmer.gate.model.Team;Repository
public interface TeamRepository extends CrudRepositoryTeam, Long {Team findByPlayers(long playerId);
}7-服务 现在我们定义服务类来保存应用程序的业务逻辑我们的服务公开两种方法 getAllTeamPlayers和addBarcelonaPlayer 如果您不喜欢Barcelona D 只需将其重命名为您喜欢的俱乐部 我们的服务层直接与存储库层通信。 SoccerService.java package com.programmer.gate.service;import java.util.List;public interface SoccerService {public ListString getAllTeamPlayers(long teamId);public void addBarcelonaPlayer(String name, String position, int number);
} 足球服务Impl package com.programmer.gate.service;import java.util.ArrayList;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.programmer.gate.model.Player;
import com.programmer.gate.model.Team;
import com.programmer.gate.repository.PlayerRepository;
import com.programmer.gate.repository.TeamRepository;Service
public class SoccerServiceImpl implements SoccerService {Autowiredprivate PlayerRepository playerRepository;Autowiredprivate TeamRepository teamRepository;public ListString getAllTeamPlayers(long teamId) {ListString result new ArrayListString();ListPlayer players playerRepository.findByTeamId(teamId);for (Player player : players) {result.add(player.getName());}return result;}public void addBarcelonaPlayer(String name, String position, int number) {Team barcelona teamRepository.findOne(1l);Player newPlayer new Player();newPlayer.setName(name);newPlayer.setPosition(position);newPlayer.setNum(number);newPlayer.setTeam(barcelona);playerRepository.save(newPlayer);}
}8- Application.java 最后一步是创建Spring Boot初始化程序这是我们应用程序的入口。 我们在com.programmer.gate下定义Application.java 。 package com.programmer.gate;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;import com.programmer.gate.service.SoccerService;SpringBootApplication
public class Application implements CommandLineRunner{AutowiredSoccerService soccerService;public static void main(String[] args) {SpringApplication.run(Application.class, args);}Overridepublic void run(String... arg0) throws Exception {soccerService.addBarcelonaPlayer(Xavi Hernandez, Midfielder, 6);ListString players soccerService.getAllTeamPlayers(1);for(String player : players){System.out.println(Introducing Barca player player);}}
} PS值得一提的是Spring Boot应用程序会自动读取并创建相对于初始化程序类所在位置的相同或子包中定义的实体存储库和服务因此如果我们在不同的包下定义Application.java我们需要明确指定模型存储库和服务的包。 输出 当将应用程序作为标准Java应用程序运行时我们将在控制台中获得以下输出。 2018-04-13 14:54:47 DEBUG org.hibernate.SQL - create sequence player_seq start with 1 increment by 1
2018-04-13 14:54:47 DEBUG org.hibernate.SQL - create sequence team_seq start with 1 increment by 1
2018-04-13 14:54:47 DEBUG org.hibernate.SQL - create table player (id number(19,0) not null, name varchar2(255 char), num number(10,0), position varchar2(255 char), team_id number(19,0) not null, primary key (id))
2018-04-13 14:54:47 DEBUG org.hibernate.SQL - create table team (id number(19,0) not null, name varchar2(255 char), primary key (id))
2018-04-13 14:54:47 DEBUG org.hibernate.SQL - alter table player add constraint FKdvd6ljes11r44igawmpm1mc5s foreign key (team_id) references team
2018-04-13 14:54:47 INFO o.h.tool.hbm2ddl.SchemaExport - HHH000476: Executing import script /import.sql
2018-04-13 14:54:47 INFO o.h.tool.hbm2ddl.SchemaExport - HHH000230: Schema export complete
2018-04-13 14:54:47 INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit default
2018-04-13 14:54:48 INFO o.s.j.e.a.AnnotationMBeanExporter - Registering beans for JMX exposure on startup
2018-04-13 14:54:48 DEBUG org.hibernate.SQL - select team0_.id as id1_1_0_, team0_.name as name2_1_0_, players1_.team_id as team_id5_0_1_, players1_.id as id1_0_1_, players1_.id as id1_0_2_, players1_.name as name2_0_2_, players1_.num as num3_0_2_, players1_.position as position4_0_2_, players1_.team_id as team_id5_0_2_ from team team0_, player players1_ where team0_.idplayers1_.team_id() and team0_.id?
2018-04-13 14:54:48 DEBUG org.hibernate.SQL - select player_seq.nextval from dual
2018-04-13 14:54:48 DEBUG org.hibernate.SQL - insert into player (name, num, position, team_id, id) values (?, ?, ?, ?, ?)
2018-04-13 14:54:48 INFO o.h.h.i.QueryTranslatorFactoryInitiator - HHH000397: Using ASTQueryTranslatorFactory
2018-04-13 14:54:48 DEBUG org.hibernate.SQL - select player0_.id as id1_0_, player0_.name as name2_0_, player0_.num as num3_0_, player0_.position as position4_0_, player0_.team_id as team_id5_0_ from player player0_, team team1_ where player0_.team_idteam1_.id() and team1_.id?Introducing Barca player Lionel Messi
Introducing Barca player Andreas Inniesta
Introducing Barca player Pique
Introducing Barca player Xavi Hernandez2018-04-13 14:54:49 INFO com.programmer.gate.Application - Started Application in 4.213 seconds (JVM running for 4.555)9-源代码 您可以从此存储库下载源代码 spring-boot-jpa-hibernate 翻译自: https://www.javacodegeeks.com/2018/04/spring-boot-jpa-hibernate-oracle.html