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