1.createQuery
使用的类似hql语句的JPQL语句进行查询
基本使用
@Test
public void test(){
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
String sql = "from Customer where id = ?0 ";
Query query = entityManager.createQuery(sql);
query.setParameter(0 ,1);
Customer customer = (Customer) query.getSingleResult();
System.out.println(customer);
entityManager.getTransaction().commit();
entityManager.close();
entityManagerFactory.close();
}
2.查询部分值填充到类中
Test
public void test1(){
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
//可在查询语句中放入类的构造函数
String sql = "select new Customer (c.id, c.name) from Customer c where id > ?1 ";
Query query = entityManager.createQuery(sql);
query.setParameter(1 ,1);
List<Customer> customers = query.getResultList();
for(Customer customer:customers){
System.out.println(customer);
}
entityManager.getTransaction().commit();
entityManager.close();
entityManagerFactory.close();
}
默认情况下,若只查询部分属性,则将返回Object[]类型的结果
2.createNamedQuery
query语句写在类的@NamedQuery注解内(提前写好,不需要在运行时编写,可以重复调用更方便)
@NamedQuery(name = "namedQuery",query = "from Customer where id > ?1")
@Entity
@Table(name="CUSTOMER")
public class Customer {
private Integer id;
private String name;
private String tele;
private Set<Order> orders;
public Customer() {
}
public Customer(Integer id,String name) {
this.id = id;
this.name = name;
}
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="tele",length = 13)
public String getTele() {
return tele;
}
public void setTele(String tele) {
this.tele = tele;
}
/* @JoinColumn(name = "cus_id")*/
@OneToMany(mappedBy = "customer")
public Set<Order> getOrders() {
return orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
@Override
public String toString() {
return "Customer{" +
"id=" + id +
", name='" + name + '\'' +
", tele='" + tele + '\'' +
'}';
}
}
测试方法
@Test
public void test2(){
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
Query query = entityManager.createNamedQuery("namedQuery");
query.setParameter(1 ,1);
List<Customer> customers = query.getResultList();
for(Customer customer:customers){
System.out.println(customer);
}
entityManager.getTransaction().commit();
entityManager.close();
entityManagerFactory.close();
}
3.createNativeQuery
使用sql语句查询数据
@Test
public void test3(){
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
String sql = "select name from customer where id = ?1";
Query query = entityManager.createNativeQuery(sql);
query.setParameter(1 ,1);
Object object = query.getSingleResult();
System.out.println(object);
entityManager.getTransaction().commit();
entityManager.close();
entityManagerFactory.close();
}