SpringDateJpa的使用

使用spring,spring是帮助我们构造对象的。必须在bean中添加无参构造方法,不然会报错

无法init初始化的错误!

Spring Data介绍

Spring 的一个子项目。用于简化数据库访问,支持NoSQL和关系数据库存储。其主要目标是使数据库的访问变得方便快捷。

获取数据源 jdbc 

jpa实体管理工厂/数据源/适配器需要使用哪个全自动工具这里时Hibernatejap

设置jpa特有的属性/操作什么数据库

为jpa配置事务/只有事务才能提交数据库

spring date jpa配置dao层/输入要继承CrudRepository<shopBean,String>类的包的全路径

指定事务使用哪个注解管理器

 

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:cache="http://www.springframework.org/schema/cache"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       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-3.1.xsd
                    http://www.springframework.org/schema/tx
                    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
                    http://www.springframework.org/schema/aop
                    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context-3.1.xsd
                    http://www.springframework.org/schema/cache
                    http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
                    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
                    http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"
       default-lazy-init="true">
    <context:component-scan base-package="com.gesula.shop"></context:component-scan>
    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
    <!-- 获得数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <property name="url" value="${jdbc_url}"></property>
        <property name="username" value="${jdbc_user}"></property>
        <property name="driverClassName" value="${jdbc_driver}"></property>
        <property name="password" value="${jdbc_password}"></property>
    </bean>
    <!-- JPA实体管理器工厂 -->
    <bean id="manager" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="dataSource" ref="dataSource"></property>
        <property name="packagesToScan" value="com.gesula.shop.bean"></property>
        <!-- hibernate的适配器 -->
        <property name="jpaVendorAdapter" >
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.current_session_context_class">thread</prop>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop><!-- validate/update/create -->
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.format_sql">${format_sql}</prop>

                <!-- 建表的命名规则  DefaultNamingStrategy,ImprovedNamingStrategy,EJB3NamingStrategy-->
                <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.DefaultNamingStrategy</prop>

            </props>
        </property>
    </bean>
    <!-- 设置JPA实现厂商的特定属性 -->
    <bean id="hibernateJpaVendorAdapter"
          class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="databasePlatform" value="${hibernate.dialect}"/>
    </bean>

    <!-- Jpa 事务配置 -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="manager"/>
    </bean>

    <!-- Spring Data Jpa配置DAO层 -->
    <jpa:repositories base-package="com.gesula.shop.dao"   entity-manager-factory-ref="manager"/>

    <!-- 使用annotation定义事务 -->   <!---注解事务指定事务使用那个管理器 -->
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
</beans>

配置好以后我们需要在dao层接口类中书写Hql/sql语句/如果使用Hibernate自带方法书写,那么这个接口需要

extends CrudRepository<shopBean,String>类  第一个参数为需要操作的对象,第二个参数为,你Id的类型
//存在于import org.springframework.data.repository.CrudRepository;包下
public interface IShopDao extends CrudRepository<shopBean,String>{

    //按照类型查询所有商品/方法中的占位符是从1开始的,如果有多个按顺序依次递增?1/?2....
    @Query("from shopBean where genre=?1")
    public List<shopBean> findAllGenre(String genre);
   //查询所有未上架的商品 这里使用sql
   @Query(value = "SELECT * FROM t_shop where status=?1 ",nativeQuery = true)
   public List<shopBean> findAllOne(int i);
    //按照商品id修改未上架的商品的为上架,并且设定上架时间
    //修改时用于原声sql语句不然会出现找不到resultSet
    @Modifying(clearAutomatically = true)
    @Query(value="update t_shop  set  startDate=?1 , status=0  where  id=?2  and  status=1 ",nativeQuery =true)
   public int update(Date date,String name);
}

当然Hql和sql书写方式是不一样的,其中查询注解为@Query()是为Hql专用的/如果要在@Query()中写sql原生语句,那么就需要在@Query(value="sql语句",nativeQuery =true);nativeQuery =true声明为当前sql是条原生语句

添加的话直使用save()添加

删除和修改Hql方法中自带的有常规操作;都是以id来操作的。

如果要使用sql更改或删除操作那么必须在@Query(value="sql语句",nativeQuery =true)前加上注解

@Modifying(clearAutomatically = true)不然会报错,找不到 ResultSet/使用该注解是要告诉计算机这是条删除/修改语句

 

--------------------------------------------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值