SpringData(1)

2019-04-06  本文已影响0人  dwwl

Demo

利用create 生成表时,不设置l属性ength 生成表中的长度为255

单例:
1 构造方法私有

主键生成策略:strategy 设置为IDENITY 自增,//底层数据库必须支持自动增长

​ SEQUENCE:序列 //底层数据库必须支持序列

​ TABLE:jpa提供的一种机制,//由于数据库优化,不产生多于表 所以基本不用

​ AUTO:程序自动帮助我们选择主键生成策略

不设置 默认就是AUTO 但是AUTO默认就是TABLE

EntityManagerFactory是一个线程安全的对象

因为实体管理器工厂内部维护了很多的内容,所以创建比较耗时,所以要设置为 \为单例

单例对象 线程的安全的话,不要设置成员变量 //controller在spring就是单例的

Spring依赖注入Bean实例默认就是单例的

EntityManager:实体类管理器 CRUD 事务

查询方法:find方法:

​ 查询对象就是用户本身

​ 调用find方法的时候就会发送sql查询

getReference方法:

​ 查询结果是一个动态代理对象

​ 当使用查询对象时才查询 //延迟加载

依赖:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.hibernate.version>5.0.7.Final</project.hibernate.version>
    </properties>

    <dependencies>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- hibernate对jpa的支持包 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${project.hibernate.version}</version>
        </dependency>

        <!-- c3p0 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${project.hibernate.version}</version>
        </dependency>

        <!-- log日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!-- Mysql and MariaDB -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
    </dependencies>

persistence.xml(必须实在resources下的WEB-INF目录下,且配置文件名称不能更改)

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <!--需要配置persistence-unit节点
        持久化单元:
            name:持久化单元名称
            transaction-type:事务管理的方式
                    JTA:分布式事务管理
                    RESOURCE_LOCAL:本地事务管理


    -->
    <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
        <!--jpa的实现方式 -->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <!--可选配置:配置jpa实现方的配置信息-->
        <properties>
            <!-- 数据库信息
                用户名,javax.persistence.jdbc.user
                密码,  javax.persistence.jdbc.password
                驱动,  javax.persistence.jdbc.driver
                数据库地址   javax.persistence.jdbc.url
            -->
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="root"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpadb"/>

            <!--配置jpa实现方(hibernate)的配置信息
                显示sql           :   false|true
                自动创建数据库表    :  hibernate.hbm2ddl.auto
                        create      : 程序运行时创建数据库表(如果有表,先删除表再创建)
                                    所以不要设置为create,某种意义上就是删库
                        update      :程序运行时创建表(如果有表,不会创建表)
                        none        :不会创建表

            -->
            <property name="hibernate.show_sql" value="true" />
            
            <property name="hibernate.hbm2ddl.auto" value="update" />

            <property name="hibernate.format_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>

Tests.class

import com.domain.Custom;

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

public class Test {

    @org.junit.Test
    public void test1(){
        EntityManagerFactory managerFactory = Persistence.createEntityManagerFactory("myJpa");

        EntityManager manager = managerFactory.createEntityManager();

        EntityTransaction tx = manager.getTransaction();

        tx.begin();

        Custom custom = new Custom();

        custom.setCustName("huangSir");

        manager.persist(custom);

        tx.commit();

        manager.close();

        managerFactory.close();
    }
}

上一篇 下一篇

猜你喜欢

热点阅读