SpringDataJpa

SpringDataJpa_day01

1.pom.xml

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.3.7.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>5.3.7.Final</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
</dependencies>

2.META-INF/persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <!--    持久化单元
            name: 持久化单元名称
            transaction-type:事务管理方式
            JPA:分布式事务管理
            RESOURCE_LOCAL:本地事务管理
-->
    <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
        <!--        JPA的实现方式-->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <!--        数据库信息
               用户名:javax.persistence.jdbc.user
               密码:javax.persistence.jdbc.password
               驱动:javax.persistence.jdbc.driver
               数据库地址:javax.persistence.jdbc.url
                -->
        <properties>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="123"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa"/>


            <!--        可选配置:配置JPA实现方(hibernate)的配置信息
               hibernate.show_sql:是否显示sql
               hibernate.hbm2ddl.auto:自动创建数据库表
               create:程序运行时创建数据库表(如果有表先删除表,在创建表)
               update:程序运行时创建表(如果有表,不会创建表)
               none:不会创建表
-->
            <property name="hibernate.show_sql"  value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>



    </persistence-unit>
</persistence>

3.实体类对象

package cn.liuweiwei.domain;

import javax.persistence.*;

/**
 * 配置实体类和表的映射关系
 * //@Entity:声明一个类是实体类
 * //@Table(name='数据库中的表名'):配置实体类和表的映射关系
 *
 * 配置实体类和表中字段的映射关系
 */

@Entity
@Table(name = "customer")
public class Customer {
    /**
     * 声明主键的配置
     * //@GeneratedValue:配置主键的生成策略IDENTITY(主键自增)
     * //@Column():配置实体对象和表中字段的映射关系
     *  GenerationType.SEQUENCE:序列化
     *  GenerationType.AUTO:由程序自动选择生成策略
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;
    @Column(name = "username")
    private String name;
    @Column(name = "age")
    private Integer age;
    @Column(name = "phone")
    private String phone;
    @Column(name = "address")
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Customer{" +
            "id=" + id +
            ", name='" + name + '\'' +
            ", age=" + age +
            ", phone='" + phone + '\'' +
            ", address='" + address + '\'' +
            '}';
    }
}

4.入门案列(保存一个实体类)

import cn.liuweiwei.domain.Customer;
import cn.liuweiwei.utils.JpaUtils;
import org.junit.Test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

public class AppTest {

    @Test
    public void before(){
        //加载配置文件,创建实体管理器工厂
        EntityManagerFactory managerFactory = Persistence.createEntityManagerFactory("myJpa");
        //通过实体管理器工厂获取实体管理器对象
        EntityManager entityManager = managerFactory.createEntityManager();
        //获取事务对象
        EntityTransaction transaction = entityManager.getTransaction();
        //开启事务
        transaction.begin();
        Customer customer = new Customer();
        customer.setId(null);
        customer.setName("vivi");
        customer.setAge(19);
        customer.setPhone("13233039519");
        customer.setAddress("china");
        //保存实体
        entityManager.persist(customer);
        //提交事务
        transaction.commit();
        //释放资源
        entityManager.close();
        managerFactory.close();
    }

    @Test
    public void testFind(){
        EntityManager entityManager = JpaUtils.getEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        Customer customer = entityManager.find(Customer.class, 1);
        System.out.println("customer = " + customer);
        entityManager.remove(customer);
        System.out.println(customer);
        transaction.commit();
        entityManager.close();
    }

}

5.EntityManager的相关方法

import cn.liuweiwei.utils.JpaUtils;
import org.junit.Test;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import java.util.List;

public class JpqlTest {

    @Test
    public void testFindAll(){
        /**
         * 查询所有
         */
        EntityManager entityManager = JpaUtils.getEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        List resultList = entityManager.createQuery("from cn.liuweiwei.domain.Customer").getResultList();
        for (Object o : resultList) {
            System.out.println(o);
        }
        transaction.commit();
        entityManager.close();
    }

    @Test
    public void testOrder(){
        /**
         * 查询数据库中的记录数
         */
        EntityManager entityManager = JpaUtils.getEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        Object result = entityManager.createQuery("select count(id) from Customer ").getSingleResult();
        System.out.println("result = " + result);
        transaction.commit();
        entityManager.close();
    }

    @Test
    public void testPage(){
        /**
         * 分页查询
         */
        EntityManager entityManager = JpaUtils.getEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        Query query = entityManager.createQuery("from Customer ");
        //从索引0开始查询3条数据,(不包含0)
        query.setFirstResult(0);
        query.setMaxResults(3);
        List list = query.getResultList();
        for (Object o : list) {
            System.out.println("o = " + o);
        }
        transaction.commit();
        entityManager.close();
    }

    @Test
    public void testSelect(){
        /**
         * 条件查询(模糊查询)
         */
        EntityManager entityManager = JpaUtils.getEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        Query query = entityManager.createQuery("from Customer where name like ?");
        query.setParameter(1,"vi%");
        List resultList = query.getResultList();
        for (Object o : resultList) {
            System.out.println("o = " + o);
        }
        transaction.commit();
        entityManager.close();
    }

}

6.获取实体管理器工厂的工具类

package cn.liuweiwei.utils;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class JpaUtils {

    private static EntityManagerFactory EntityManagerFactory;
    static {
        EntityManagerFactory = Persistence.createEntityManagerFactory("myJpa");
    }

    public static EntityManager getEntityManager(){
        return EntityManagerFactory.createEntityManager();
    }

}

SpringDataJpa_02

1.pom.xml

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>2.1.7.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.el/javax.el-api -->
    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>2.2.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.glassfish.web/javax.el -->
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>javax.el</artifactId>
        <version>2.2.4</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.3.7.Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.1.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.22</version>
    </dependency>
</dependencies>

2.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
                           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
                           ">

    <!--    配置包扫描-->
    <context:component-scan base-package="cn.liuweiwei"/>

    <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/jpa"/>
        <property name="username" value="root"/>
        <property name="password" value="123"/>
    </bean>

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--        配置实体类所在的包-->
        <property name="packagesToScan" value="cn.liuweiwei.domain"/>
        <!--        JPA的实现厂家-->
        <property name="persistenceProvider">
            <bean class="org.hibernate.jpa.HibernatePersistenceProvider"/>
        </property>
        <!--JPA的供应商适配器-->
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <!--                是否自动创建数据库表-->
                <property name="generateDdl" value="false"/>
                <!--                指定数据库类型-->
                <property name="database" value="MYSQL"/>
                <!--                数据库方言,支持特有语法-->
                <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"/>
                <!--                是否显示sql查询语句-->
                <property name="showSql" value="true"/>
            </bean>
        </property>

        <!--        配置JPA方言:高级特性-->
        <property name="jpaDialect" >
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
        </property>
    </bean>
    <!--配置springData JPA-->
    <jpa:repositories base-package="cn.liuweiwei.mapper" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory">

    </jpa:repositories>

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

    <!--    声明式事务-->

</beans>

3.实体类(Customer.java)

package cn.liuweiwei.domain;

import javax.persistence.*;

/**
 * 实体类和表的映射关系
 * 类中属性和表的映射关系
 */

@Entity
@Table(name="customer")
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;
    @Column(name = "username")
    private String name;
    @Column(name = "age")
    private Integer age;
    @Column(name = "phone")
    private String phone;
    @Column(name = "address")
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Customer{" +
            "id=" + id +
            ", name='" + name + '\'' +
            ", age=" + age +
            ", phone='" + phone + '\'' +
            ", address='" + address + '\'' +
            '}';
    }
}

4.接口(CustomerMapper.java)

package cn.liuweiwei.mapper;

import cn.liuweiwei.domain.Customer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public interface CustomerMapper extends JpaRepository<Customer,Integer>, JpaSpecificationExecutor<Customer> {
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值