springdata+maven配置和简单的操作

先上代码,后面再仔细分析spring-data

pom.xml

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>4.3.0.Release</version>
</dependency>

<!-- spring data -->
  <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-jpa</artifactId>
      <version>1.8.0.RELEASE</version>
  </dependency>

  <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>4.3.1.Final</version>
  </dependency>

  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.36</version>
  </dependency>

spring.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:tx="http://www.springframework.org/schema/tx"
        xmlns:jpa="http://www.springframework.org/schema/data/jpa"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.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-4.0.xsd">

    <!--配置数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        <property name="url" value="jdbc:mysql:///spring_data"/>

    </bean>
    <bean id="entityManager" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>
        <property name="packagesToScan" value="com.demo"/>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>
    <!-- 配置事务 -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManager"/>
    </bean>

    <!-- 事务注解 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!-- jpa -->
    <jpa:repositories base-package="com.demo" entity-manager-factory-ref="entityManager"/>

    <context:component-scan base-package="com.demo"/>

</beans>

编写完配置文件后就可以开发spring-data程序了。

首先需要创建一个实体,根据业务来定义。

实体创建完不需要创建数据库表,spring-data会自动创建表的。

这儿以学生类Student为例。

@Entity
public class Student{
    @Id
    @GeneratedValue
    private Integer id;
    private String name;
    private Integer age;
    
    //get set 这儿省略...
}

创建好实体后就可以编写spring-data程序了。

包名类名根据自己需求创建。

这儿建一个com.demo.dao和StudentDao接口,需要继承SpringData的Repository接口

package com.demo.dao;

import com.demo.entity.Student;
import org.springframework.data.repository.Repository;

import java.util.List;

public interface StudentDao extends Repository<Student,Integer> {

    public Student findByName(String name);

    public List<Student> findByAge(Integer age);

}

这儿的命名是有一定的规范的,如果查询某一个字段,需要前面加findBy+字段名,如果些错是查不到数据的。

如果不想继承Repository接口还可以用注解RepositoryDefinition也可以达到同样的效果。

package com.demo.dao;

import com.demo.Student;
import org.springframework.data.repository.RepositoryDefinition;

@RepositoryDefinition(domainClass = Student.class,idClass = Integer.class)
public interface StudentDao {

    public Student findByName(String name);

}

前面两种都是可以直接查询到数据的,但是前面两种方式的函数名必须要规范写入,要不然是查找不到数据的,这个一定要注意。

SpringData还有个子接口CrudRepository,里面包含了增删改查的函数,大家可以去看下源码。

直接在接口集成CrudRepository就可以了。例如

package com.demo.dao;

import com.demo.entity.Student;
import org.springframework.data.repository.CrudRepository;

public interface StudentDao extends CrudRepository<Student,Integer> {
}

继承这个接口后就可以直接调用该函数的增删改查。

以上几种方式的函数名是有一定的规范的,这样导致的可能性是函数名有肯能过长、复杂业务逻辑实现比较麻烦等等。以下有一种更灵活的方式,需要继承JpaRepository接口

直接使用注解@Query

package com.demo.dao;

import com.demo.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface StudentDao extends JpaRepository<Student,Integer> {

    @Query("select o from Student o where o.name=?1")
    public Employee getStudent(String name);

    @Query("select o from Student o where o.name=:name")
    public Employee getStudent1(@Param("name")String name);
}

上面的函数名是可以随便写的,@query里面直接写入对应的sql语句,注意:@Query里面的表名其实是类名,并不是数据库表名,如果想用本地话查询,需要在@Query修改里面的nativeQuery为true,默认为false。

例如

package com.demo.dao;

import com.demo.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface StudentDao extends JpaRepository<Student,Integer> {

    @Query(value="select o from student o where o.name=?1",nativeQuery=true)
    public Employee getStudent(String name);

}

这样就可以本地化查询了。

@Query做的不仅仅只有查询,增删改查都可以

只要在@Query里面写入对应的sql语句就可以了。

但是增删改的时候需要配合另一个注解@Modifying来使用,service层开启事务,才可以修改成功。

时间: 2024-12-14 18:50:41

springdata+maven配置和简单的操作的相关文章

使用Maven开发一个简单的SpringData

1:创建Maven项目 2:添加依赖(修改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/maven-v4_

[转]Idea2016 使用Maven配置简单Web项目(受益比较多的一篇)

最近被同事一直吵着用Idea写Java,于是偷偷的去试用了一下Idea.确实不错,无论界面还是智能提醒都是蛮符合我的使用习惯,但是刚从Eclipse出来,使用Idea还是不太习惯的.所以这里写出来,供大家参考. 特别注意,我使用的是Idea 2016.3 版.因为Idea版本不一致差别还蛮大的. 下面开始进入正题. Maven下载和安装: 1.apache官网去下载maven, 2.解压到本地,然后配置环境变量(省略)PS:百度一大堆. 3.修改settings.xml,配置本地仓库: WEB配

maven配置hibernate

本文为原创,转载请注明 来至: http://blog.csdn.net/j903829182/article/details/38147659 1.进入cmd创建一个web项目并导入myeclipse中修改好目录结构和配置好项目的属性,详细的我这里就不说了,具体请参照我的博客:http://blog.csdn.net/j903829182/article/details/38128777里面有具体的创建配置的方法和步骤,这这里我主要讲解下怎么使用maven来配置管理hibernate 我这里主

Maven学习总结(一副本)——Maven配置和搭建

环境准备: JDK 1.6 Maven 3.0.4 myeclipse 8.6.1 安装 Maven 之前要求先确定你的 JDK 已经安装配置完成.Maven是 Apache 下的一个项目,目前最新版本是 3.0.4,我用的也是这个. 首先去官网下载 Maven:http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-3.0.4-bin.tar.gz 下载完成之后将其解压,我将解压后的文件夹重命名成 maven,并将它放在

通过Maven配置测试环境和开发环境连接不同的数据库

通过Maven配置测试环境和开发环境连接不同的数据库 作者及来源: 通灵宝玉 - 博客园    收藏到→_→: 此文来自: 马开东博客 网址:http://www.makaidong.com 摘要: 通过Maven配置测试环境和开发环境连接不同的数据库 "通过Maven配置测试环境和开发环境连接不同的数据库":关键词:通过 maven 配置 测试 环境 开发 环境 连接 不同 其他数据库 通过maven配置测试环境和开发环境连接不同的其他数据库 操作上分3个步骤 1.在数据持久层的po

myeclipse2014 安装maven3.3.9和maven配置本地仓库 及错误修改

结合网上的知识梳理以及自己安装的经验 myeclipse2014 安装maven3.3.9和maven配置本地仓库  及犯的错误修改  成功搞定maven 1,安装 Maven 之前要求先确定你的 JDK 已经安装配置完成.jdk最好是1.6以上的,Maven是 Apache 下的一个项目,我用的是 3.3.9. 下载地址:http://maven.apache.org/download.html 2,把下载好的maven安装包,解压到D:\maven 3, 配置maven环境变量 系统变量:M

SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置

一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不能用,log也不知道能不能用,`(*∩_∩*)′哈哈,有点不负责任...... 直接上代码: 使用的eclipse和eclipse自带的maven,参考了网上的资料,有些代码是拷贝的,不过都自己测试过了.嗯,可以跑起来... 先上项目结构: 新建maven项目,选择web,然后配置pom: <pro

Maven配置笔记

android-m2e插件与maven 自定义用户配置路径 不管插件还是maven,默认的用户配置路径是统一的:${user.home}/.m2/settings.xml 但是插件可以通过eclipse设置用户配置的路径(配置方法参考<ADT+Android-m2e环境搭建>):而maven不能永久指定,只能在每次使用mvn命令时加上"-s 新路径"参数. 依赖 如果使用android-m2d,在eclipse中写好依赖配置(<dependency>),保存之后

SequoiaDB 系列之二 :SequoiaDB的简单CRUD操作

上一篇通过一系列的操作,终于把SequoiaDB的集群部署到单台机器上了. 建议去安装体验一下吧. 在整个环境的部署的体验来看,并没有MongoDB的部署简单,但是比MongoDB的部署要清晰.MongoDB启动进程,后面跟着一大串配置,有点云里雾里的感觉,这个对初学者不太友好.而SequoiaDB的部署,着眼整个集群环境,能在脑中轻松构建一副设计图,协调节点的服务端口是11810,catalog节点的服务端口是11820,11830,11840,而数据节点的服务端口是11850,11860,1