java - 如何使用 Hibernate 从 Sql 数据库中更新、删除对象?
问题描述
描述
我只是想使用 Hibernate 和 mysql 实现 ORM,但唯一有效的方法是将单个对象添加到数据库,返回对象列表,通过关键字返回对象列表但删除对象和更新对象不是运作!有什么建议吗?
该表是在数据库中创建的,没有问题:)
实体
package dao;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Produit implements Serializable{
private static final long serialVersionUID = 8314029847799979249L;
@Id
private int ref;
private String desig;
private double prix;
private int quant;
public Produit() {}
public int getId() {
return ref;
}
public void setId(int ref) {
this.ref = ref;
}
public String getDesig() {
return desig;
}
public void setDesig(String desig) {
this.desig = desig;
}
public double getPrix() {
return prix;
}
public void setPrix(double prix) {
this.prix = prix;
}
public int getQuant() {
return quant;
}
public void setQuant(int quant) {
this.quant = quant;
}
}
界面
package dao;
import java.util.List;
public interface InterfaceProduit {
public void addProduit(Produit produit);
public Produit getProduit(int id);
public List<Produit> getListProduit();
public List<Produit> getListProduitbykw(String mc);
public void updateProduit(Produit p);
public void deleteProduit(int id);
}
实施
package dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.transaction.Transactional;
@Transactional
public class ImplInterfProduit implements InterfaceProduit{
EntityManager manager;
public ImplInterfProduit() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("sample");
manager = factory.createEntityManager();
}
public void addProduit(Produit produit) {
EntityTransaction transaction = manager.getTransaction();
transaction.begin();
try {
manager.persist(produit);
transaction.commit();
}catch(Exception ex) {
transaction.rollback();
ex.printStackTrace();
}
}
public Produit getProduit(int id) {
Produit p = manager.find(Produit.class, id);
return p;
}
public List<Produit> getListProduit() {
Query query = manager.createQuery("SELECT p FROM Produit p");
return query.getResultList();
}
public List<Produit> getListProduitbykw(String mc) {
Query query = manager.createQuery("SELECT p FROM Produit p where
p.desig LIKE :x");
query.setParameter("x", "%"+mc+"%");
return query.getResultList();
}
public void updateProduit(Produit p) {
manager.merge(p);
}
public void deleteProduit(int id) {
Produit p = manager.find(Produit.class, id);
manager.remove(p);
}
}
持久性.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="sample">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/product"/>
<property name="hibernate.connection.username" value="product"/>
<property name="hibernate.connection.password" value="product"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
</properties>
</persistence-unit>
</persistence>
主要的
package dao;
public class MainApp {
public static void main(String[] args) {
Produit p = new Produit();
p.setId(9114);
p.setDesig("telecom");
p.setPrix(654.77);
p.setQuant(40);
ImplInterfProduit implProd = new ImplInterfProduit();
implProd.addProduit(p);
implProd.updateProduit(p);
implProd.deleteProduit(8760);
}
}
聚甲醛
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yusfi</groupId>
<artifactId>jpa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.10.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
</dependencies>
</project>
输出
Hibernate: 插入 Produit (design, prix, quant, ref) 值 (?, ?, ?, ?) Hibernate: 选择 produit0_.ref 作为 ref1_0_0_, produit0_.desig 作为 desig2_0_0_, produit0_.prix 作为 prix3_0_0_, produit0_.quant 作为 quant4_0_0_从产品 produit0_ where produit0_.ref=?
解决方案
public List<Produit> getListProduit() {
Query query = manager.createQuery("FROM Produit", Produit.class);
return query.getResultList();
}
public List<Produit> getListProduitbykw(String mc) {
Query query = manager.createQuery("FROM Produit P WHERE P.desig LIKE :x", Produit.class);
query.setParameter("x", "%"+mc+"%");
return query.getResultList();
}
推荐阅读
- javascript - 出现错误 TS2304:在 Angular 7 中使用拖放事件发射器时找不到名称“T”
- php - preg_match 使用多个通配符在 php 中不起作用
- python - 如何在给定无效数据的情况下测试函数而不将其作为输入传递给函数?
- html - 文本后的行
- c - Flex 无法创建 lex.yy.c
- ajax - 我正在尝试通过 Ajax 填充选择框
- python - python有没有办法从视频配乐中创建一个变量
- sql - MS SQL Server - 匹配表及其不相关的记录
- machine-learning - TypeError: super(type, obj): obj 必须是类型的实例或子类型
- vmware-clarity - 使用 clr-control-error 输入 type="number" 倍数验证错误消息