Spring Data Jpa +Hibernate 入门实例

来源:互联网 发布:易语言彩票源码下载 编辑:程序博客网 时间:2024/06/05 20:32

项目结构:

这里写图片描述

pom.xml

<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>com.ncsi</groupId>  <artifactId>SpringData</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>jar</packaging>  <name>SpringData</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>     <spring-framework.version>4.0.2.RELEASE</spring-framework.version>    <!-- Logging -->    <logback.version>1.0.13</logback.version>    <slf4j.version>1.7.5</slf4j.version>  </properties>  <dependencies>    <!-- Spring and Transactions -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context</artifactId>      <version>${spring-framework.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-tx</artifactId>      <version>${spring-framework.version}</version>    </dependency>    <!-- Spring JDBC Support -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-jdbc</artifactId>      <version>${spring-framework.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-test</artifactId>      <version>${spring-framework.version}</version>    </dependency>  <!-- Apache DBCP-->      <dependency>          <groupId>commons-dbcp</groupId>          <artifactId>commons-dbcp</artifactId>          <version>1.4</version>      </dependency>      <!-- MySQL Driver -->    <dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>      <version>5.0.5</version>    </dependency>    <!-- Logging with SLF4J & LogBack -->    <dependency>      <groupId>log4j</groupId>      <artifactId>log4j</artifactId>      <version>1.2.17</version>    </dependency>    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-api</artifactId>      <version>${slf4j.version}</version>      <scope>compile</scope>    </dependency>    <dependency>      <groupId>ch.qos.logback</groupId>      <artifactId>logback-classic</artifactId>      <version>${logback.version}</version>      <scope>runtime</scope>    </dependency> <!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.0-api --><dependency>    <groupId>org.hibernate.javax.persistence</groupId>    <artifactId>hibernate-jpa-2.0-api</artifactId>    <version>1.0.1.Final</version></dependency> <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa --><dependency>    <groupId>org.springframework.data</groupId>    <artifactId>spring-data-jpa</artifactId>    <version>1.3.3.RELEASE</version></dependency> <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager --><!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager --><dependency>    <groupId>org.hibernate</groupId>    <artifactId>hibernate-entitymanager</artifactId>    <version>4.2.21.Final</version></dependency>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.10</version>    </dependency>  </dependencies>  <build>   <plugins>          <plugin>             <groupId>org.apache.maven.plugins</groupId>             <artifactId>maven-compiler-plugin</artifactId>           <version>3.1</version>           <configuration>              <target>1.8</target>           <source>1.8</source>           </configuration>          </plugin>    </plugins>  </build></project>

数据库配置文件

database.name=springdatadatabase.host=localhostdatabase.port=3306database.username=rootdatabase.password=123456liudatabase.driverClass=com.mysql.jdbc.Driverdatabase.url=jdbc:mysql://${database.host}:${database.port}/${database.name}?characterEncoding=UTF-8&amp;characterSetResults=UTF-8

表结构:

CREATE TABLE `jpa_person` (  `id` smallint(6) NOT NULL AUTO_INCREMENT,  `last_Name` varchar(20) DEFAULT NULL,  `email` varchar(20) DEFAULT NULL,  `birth` varchar(20) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

注意:last_Name 中必须要有下划线 _ 不然当你在BylastName查询时 不能查询到Person 这也许是一个命名规则吧

实体类:

package com.ncsi.SpringData.Entity;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;@Table(name="jpa_person")@Entitypublic class Person {   private Integer id;   private String lastName;   private String email;   private String birth;   @GeneratedValue   @Idpublic Integer getId() {    return id;}public void setId(Integer id) {    this.id = id;}public String getLastName() {    return lastName;}public void setLastName(String lastName) {    this.lastName = lastName;}public String getEmail() {    return email;}public void setEmail(String email) {    this.email = email;}public String getBirth() {    return birth;}public void setBirth(String birth) {    this.birth = birth;}@Overridepublic String toString() {    return "Person [id=" + id + ", lastName=" + lastName + ", email=" + email            + ", birth=" + birth + "]";}}

其中 @Table 表示对应数据库的哪一张表
@Entity 表示 该实体类映射@Table对应的表
@GeneratedValue 表示 注解的那个字段为自增(AUTO)
@Id 表示注解的该字段为主键

xml配置文件:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"    xmlns:tx="http://www.springframework.org/schema/tx"    xmlns:jee="http://www.springframework.org/schema/jee"    xmlns:jdbc="http://www.springframework.org/schema/jdbc"    xmlns:jpa="http://www.springframework.org/schema/data/jpa"    xmlns:batch="http://www.springframework.org/schema/batch"    xmlns:mvc="http://www.springframework.org/schema/mvc"    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd        http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.7.xsd">        <context:property-placeholder location="classpath:database-source.properties"/>   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"          destroy-method="close">          <property name="driverClassName" value="${database.driverClass}"></property>          <property name="url" value="${database.url}"></property>          <property name="username" value="${database.username}"></property>          <property name="password" value="${database.password}"></property> </bean>    <!-- 2、配置 JPA 的 EntityManagerFactory --><bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">    <property name="dataSource" ref="dataSource"></property>    <property name="jpaVendorAdapter">        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>    </property>    <!-- 实体类所在的包名 -->    <property name="packagesToScan" value="com.ncsi.SpringData.Entity"></property>    <property name="jpaProperties">        <props>        <!-- 二级缓存相关 -->            <!--              <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>            <prop key="net.sf.ehcache.configurationResourceName">ehcache-hibernate.xml</prop>            -->            <!-- 生成的数据表的列的映射策略 -->            <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>            <!-- hibernate 基本属性 -->            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>            <prop key="hibernate.show_sql">true</prop>            <prop key="hibernate.format_sql">true</prop>            <prop key="hibernate.hbm2ddl.auto">update</prop>        </props>    </property></bean>         <!-- 3、配置事务管理器 --><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">    <property name="entityManagerFactory" ref="entityManagerFactory"></property></bean><!-- 4、配置支持注解的事务 --><tx:annotation-driven transaction-manager="transactionManager"/>        <!-- 5、配置 SpringData --><!-- 加入 jpa 的命名空间 --><jpa:repositories base-package="com.ncsi.SpringData.Repository" entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>        </beans>

PersonRepository.java

package com.ncsi.SpringData.Repository;import org.springframework.data.repository.Repository;import com.ncsi.SpringData.Entity.Person;//Repository<Person,Integer> :person为实体类   Integer为主键的类型/** * 重要说明:这里我们不能使用别的方法名字。必须以 get 开头,by 是固定写法(拼接成方法名的时候首字母大写),表示一个连接词, * lastName 是 Person 类的一个属性(拼接成方法名的时候首字母大写)。 * @author P1311529 * */public interface PersonRepository extends Repository<Person,Integer>{  //根据lastName来获取对应的Person    Person getById(Integer id);    Person getByLastName(String lastName);}

测试类

package com.ncsi.SpringData;import javax.sql.DataSource;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.ncsi.SpringData.Entity.Person;import com.ncsi.SpringData.Repository.PersonRepository;public class DataSourceTest {     private ApplicationContext ctx;        private PersonRepository personRepository;        {            ctx = new ClassPathXmlApplicationContext("springdata.xml");            personRepository = ctx.getBean(PersonRepository.class);        }        @Test        public void testDataSource(){            DataSource dataSource = (DataSource) ctx.getBean("dataSource");            System.out.println(dataSource);        }        @Test        public void testJPA(){        }        @Test        public void testHelloWorldSpringData() {            System.out.println(personRepository.getClass().getName());            Person person = personRepository.getById(1);            System.out.println(person);             Person person2=personRepository.getByLastName("liu");             System.out.println("----华丽的分割线");             System.out.println(person2);        }    }

测试结果:

16:42:11.152 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'com.sun.proxy.$Proxy1916:42:11.168 [main] DEBUG o.s.o.j.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler - Creating new EntityManager for shared EntityManager invocationHibernate:     select        person0_.id as id1_0_,        person0_.birth as birth2_0_,        person0_.email as email3_0_,        person0_.last_name as last_nam4_0_     from        jpa_person person0_     where        person0_.id=?16:42:11.357 [main] DEBUG o.s.o.jpa.EntityManagerFactoryUtils - Closing JPA EntityManagerPerson [id=1, lastName=liu, email=@qq.com, birth=0912]16:42:11.357 [main] DEBUG o.s.o.j.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler - Creating new EntityManager for shared EntityManager invocationHibernate:     select        person0_.id as id1_0_,        person0_.birth as birth2_0_,        person0_.email as email3_0_,        person0_.last_name as last_nam4_0_     from        jpa_person person0_     where        person0_.last_name=?16:42:11.372 [main] DEBUG o.s.o.jpa.EntityManagerFactoryUtils - Closing JPA EntityManager----华丽的分割线Person [id=1, lastName=liu, email=@qq.com, birth=0912]
原创粉丝点击