本章讲的是简单的搭建SpringDataJPA项目,通过操作对象,然后对应的去操作数据库中的表。
环境搭建过程
1.创建maven工程
2.配置jpa文件
3.创建实体类
4.配置实体类和表,类中属性和表中字段的的映射关系
5.操作增删改查
首先搭建一个mave工程
然后在Resource下面创建一个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="jpa1" transaction-type="RESOURCE_LOCAL">
<!-- jpa的实现方式 -->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<!-- 配置属性信息 -->
<property name="javax.persistence.jdbc.user" value="root"></property>
<property name="javax.persistence.jdbc.password" value="123456"></property>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"></property>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql:///springdata"></property>
<!-- 是否显示sql语句 -->
<property name="hibernate.show_sql" value="true"></property>
<!-- 自动创建数据库表
create 每次都新创建一个表
update 没表就创建,有表就不创建了
none 不对数据库表信息进行操作
-->
<property name="hibernate.hbm2ddl.auto" value="update"></property>
</properties>
</persistence-unit>
</persistence>
编写实体类
package com.w.entity;
import javax.persistence.*;
@Entity
@Table(name="cst_customer")
public class Customer {
//主键
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="cust_id")
private Long cId;
//客户名称
@Column(name="cust_name")
private String cName;
//客户来源
@Column(name="cust_source")
private String cSource;
//所属行业
@Column(name="cust_industry")
private String cIndustry;
//等级
@Column(name="cust_level")
private String cLevel;
//地址
@Column(name="cust_address")
private String cAddr;
//电话
@Column(name="cust_phone")
private String cPhone;
public Long getcId() {
return cId;
}
public void setcId(Long cId) {
this.cId = cId;
}
public String getcName() {
return cName;
}
public void setcName(String cName) {
this.cName = cName;
}
public String getcSource() {
return cSource;
}
public void setcSource(String cSource) {
this.cSource = cSource;
}
public String getcIndustry() {
return cIndustry;
}
public void setcIndustry(String cIndustry) {
this.cIndustry = cIndustry;
}
public String getcLevel() {
return cLevel;
}
public void setcLevel(String cLevel) {
this.cLevel = cLevel;
}
public String getcAddr() {
return cAddr;
}
public void setcAddr(String cAddr) {
this.cAddr = cAddr;
}
public String getcPhone() {
return cPhone;
}
public void setcPhone(String cPhone) {
this.cPhone = cPhone;
}
@Override
public String toString() {
return "Customer{" +
"cId=" + cId +
", cName='" + cName + '\'' +
", cSource='" + cSource + '\'' +
", cIndustry='" + cIndustry + '\'' +
", cLevel='" + cLevel + '\'' +
", cAddr='" + cAddr + '\'' +
", cPhone='" + cPhone + '\'' +
'}';
}
}
创建数据库表
/*创建客户表*/
CREATE TABLE cst_customer (
cust_id bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
cust_name varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
cust_source varchar(32) DEFAULT NULL COMMENT '客户信息来源',
cust_industry varchar(32) DEFAULT NULL COMMENT '客户所属行业',
cust_level varchar(32) DEFAULT NULL COMMENT '客户级别',
cust_address varchar(128) DEFAULT NULL COMMENT '客户联系地址',
cust_phone varchar(64) DEFAULT NULL COMMENT '客户联系电话',
PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
然后写一个测试类
@Test
public void testSave(){
//1.加载配置文件创建工厂(实体类工厂)对象
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa1");
//2.通过实体类管理工厂获取实体类管理器
EntityManager entityManager = factory.createEntityManager();
//3.获取事务对象,开启事务
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
//4.操作数据,增删改查
Customer customer = new Customer();
customer.setcName("张三");
entityManager.persist(customer);
//5.提交事务
transaction.commit();
//6.释放资源
entityManager.close();
factory.close();
}
新增方法是persist
删除方法是remove
更新操作是merge
查询是find/getReference
其中find是立即加载,getReference是延迟加载。