java學習之spring data jpa

來源:互聯網
上載者:User

標籤:等等   length   ddl   pat   sys   where   count   mysql   dag   

架構目的是簡化操作,提高代碼利用率,jdbc方式還有很多欠缺,因此不是架構所需要的,於是springjpa挺身而出,它不僅有springjdbc的整合性,而且具有簡化sql,實現分頁等等比較牛逼的功能。

其實作類別似於spring jdbc,下面粘出其設定檔

<?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.xsdhttp://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">    <!--1 配置資料來源-->    <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=""/>        <property name="url" value="jdbc:mysql:///db_name"/>    </bean>    <!--2 配置EntityManagerFactory-->    <bean id="entityManagerFactory" 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.imooc"/>        <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.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"/>    </bean>    <!--4 配置支援註解的事務-->    <tx:annotation-driven transaction-manager="transactionManager"/>    <!--5 配置spring data-->    <jpa:repositories base-package="com.repository" entity-manager-factory-ref="entityManagerFactory"/>    <context:component-scan base-package="com.beans"/></beans>

此時需要特殊注意的是注釋1以及注釋5:   自動掃描找到repositories;掃描bean類

會自動掃描到@Entity(doamin)和@RepositoryDefinition()註解

描到@Entity: 這個實體類會對應資料庫一個表(此表沒有回自動建立,spring jpa的獨特功能),作為bean使用

@Entitypublic class Student{    private Integer id;    private String name;    private Integer age;    @GeneratedValue    @Id    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    @Column(length = 20)    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }}

 

描到@RepositoryDefinition(如果不用RepositoryDefinition直接繼承Repository類也可以實現),使用這個註解可以實現StudentRepositor介面(介面名自己定義,一般取bean的名字),使用時只有繼承這個介面就可以。而且這個類還可以實現sql的封裝下面列出我寫的幾個實現

@RepositoryDefinition(domainClass = Student.class, idClass = Integer.class)public interface StudentRepository {    public Student findByName(String name);    // where name like ?% and age <?    public List<Student> findByNameStartingWithAndAgeLessThan(String name, Integer age);    // where name like %? and age <?    public List<Student> findByNameEndingWithAndAgeLessThan(String name, Integer age);    // where name in (?,?....) or age <?    public List<Student> findByNameInOrAgeLessThan(List<String> names, Integer age);    // where name in (?,?....) and age <?    public List<Student> findByNameInAndAgeLessThan(List<String> names, Integer age);    @Query("select o from Student o where id=(select max(id) from Student t1)")    public Student getEmployeeByMaxId();    @Query("select o from Student o where o.name=?1 and o.age=?2")    public List<Student> queryParams1(String name, Integer age);    @Query("select o from Student o where o.name=:name and o.age=:age")    public List<Student> queryParams2(@Param("name")String name, @Param("age")Integer age);    @Query("select o from Student o where o.name like %?1%")    public List<Student> queryLike1(String name);    @Query("select o from Student o where o.name like %:name%")    public List<Student> queryLike2(@Param("name")String name);    @Query(nativeQuery = true, value = "select count(1) from Student")    public long getCount();  //Modifying實現了事物    @Modifying    @Query("update Student o set o.age = :age where o.id = :id")    public void update(@Param("id")Integer id, @Param("age")Integer age);}

 repository查詢方法定義規則和使用

 

 

 接下來只要實現EmployeeRepository介面就可以愉快的curd了。

//根據上下文擷取
ctx = new ClassPathXmlApplicationContext("beans-new.xml");studentRepository = ctx.getBean(StudentRepository.class);
Student Student = studentRepository.findByName("zhangsan");System.out.println("id:" + Student.getId()+ " , name:" + Student.getName()+ " ,age:" + Student.getAge());}

 

那麼如何?分頁呢?很簡單,只要StudentRepository類繼承PagingAndSorting介面就行了

public interface StudentRepository extends PagingAndSortingRepository{}

 操作注意Pageable類需要引入jpa包中的Pageable類

//根據上下文擷取ctx = new ClassPathXmlApplicationContext("beans-new.xml");studentRepository = ctx.getBean(StudentRepository.class);Pageable pageable = new PageRequest( 0,5 );Student Student = studentRepository.findAll(pageable );

 

java學習之spring data jpa

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.