标签:imp 有关 引入 name static ack size begin ali
sssdj:SpringMVC + Spring + SpringDataJpa-> 现在比较流行的一种设计(Spring全家桶)
要集成三大框架(Spring+SpringMVC+SpringDataJpa)
o(对象,java面向对象) r(关系,关系型数据库) m(映射)
基本项目搭建
大家也可以手动创建
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<!--
咱们这个配置是要连接数据库的(jpa支持咱们连接多个数据库)
persistence-unit:持久化单元(可能有多个,每一个对应一个数据库)
name:取个名称(随便取)
transaction(事务,同生共死)-type(类型)
RESOURCE_LOCAL:本地的事务
JTA: 分布式系统要使用的事务
基本的数据库连接配置(四大金刚)
properties:属性(所有属性都可以在下面的文件中找到)
resources\源码包\hibernate-release-4.3.8.Final\project\etc\hibernate.properties
-->
<persistence-unit name="cn.itsource.jpa" transaction-type="RESOURCE_LOCAL">
<properties>
<!--连接数据库的四个基本属性-->
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url" value="jdbc:mysql:///jpa" />
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.connection.password" value="root" />
<!-- 配置方言(数据库兼容):你要操作的是什么数据库,根据不同的方言拼接不同的SQL
InnoDB:支持事务,支持外键 MyISAM:不支持事务,不支持外键(属性高)
-->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<!--配置建表策略(自动化帮我们创建相应的表)-->
<property name="hibernate.hbm2ddl.auto" value="create" />
<!--可以看到SQL的展示-->
<property name="hibernate.show_sql" value="true" />
<!--可以看到SQL的展示(漂亮一点)-->
<!--<property name="hibernate.format_sql" value="true" />-->
</properties>
</persistence-unit>
</persistence>
//告诉JPA:这个类是要做实体化的
/**
* @Entity:我是一个实体类,JPA快来管我
* @Table(name = "t_employee"):我和哪些张是有关系的
* 如果不写,他就认为你有一个表叫:Employee
*/
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "t_employee")
public class Employee {
/**
* @Id:代表我是一个主键
* @GeneratedValue:我们认为主键是自增的
*/
@Id
@GeneratedValue
private Long id;
private String name;
private String password;
//getter,setter省略
}
/**
* 在JPA中,所以增删改都需要我们去提交事务
*/
//拿到EntityManagerFactory(传入持久化单元的名称)
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("cn.itsource.jpa");
//拿出到实体管理对象
EntityManager entityManager = entityManagerFactory.createEntityManager();
//拿出一个事务 EntityManager里面有一个事务(只能拿到一个事务)
//开始事务
entityManager.getTransaction().begin();
//persist:持久化(保存一条数据)
entityManager.persist(employee);
//提交事务
entityManager.getTransaction().commit();
//关闭资源
entityManager.close();
entityManagerFactory.close();
先完成了工具类
//帮咱们拿到一个EntityManager对象
public class JpaUtil {
private static EntityManagerFactory factory;
//加载时运行,且只运行一次
static {
try {
factory = Persistence.createEntityManagerFactory("cn.itsource.jpa");
} catch (Exception e) {
e.printStackTrace();
}
}
//直接拿到EntityManager对象
public static EntityManager getEntityManager(){
return factory.createEntityManager();
}
}
增删改需要添加事务
entityManager.persist(employee);
entityManager.merge(employee);
先查询,再判断,最后删除
Employee employee = entityManager.find(Employee.class, id);
if(employee!=null) {
//这里要求咱们传一个对象进去
entityManager.remove(employee);
}
传类型与id
entityManager.find(Employee.class,id);
query对象(entityManager创建) jpql:面向对象的查询语言
entityManager = JpaUtil.getEntityManager();
//使用查询对象,写JPQL:像SQL,但是更加简单(面向对象)
//1.准备JPQL 不要写* ,from后面是一个类
//String jpql = "select o from cn.itsource.jpa.domain.Employee o";
// String jpql = "select o from Employee o";
String jpql = "from Employee";
//2.根据JPQL拿到查询对象
Query query = entityManager.createQuery(jpql);
//3.返回所有数据
return query.getResultList();
先删除-> 再创建 -> 用完(EntityManagerFactory关闭)再删(测试)
先删除-> 再创建(测试)
验证功能(只验证domain中写好的属性)
标签:imp 有关 引入 name static ack size begin ali
原文地址:https://www.cnblogs.com/yh9264426/p/10620578.html