JPA中JPQL函数

4 篇文章 0 订阅

JPA中JPQL函数

示例:
1.Employee实体类:
@Entity
public class Employee{
	private Integer empId;
	private String empAddress;
	private Integer empAge;
	private String empGender;
	private String empName;
	private Double empSalary;
	private Date empStartDate;
	private Integer empStatus;
//	private String deptId; 
	private Department dept;
	
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	public Integer getEmpId() {
		return empId;
	}
	public void setEmpId(Integer empId) {
		this.empId = empId;
	}
	public String getEmpAddress() {
		return empAddress;
	}
	public void setEmpAddress(String empAddress) {
		this.empAddress = empAddress;
	}
	public Integer getEmpAge() {
		return empAge;
	}
	public void setEmpAge(Integer empAge) {
		this.empAge = empAge;
	}
	public String getEmpGender() {
		return empGender;
	}
	public void setEmpGender(String empGender) {
		this.empGender = empGender;
	}
	public String getEmpName() {
		return empName;
	}
	public void setEmpName(String empName) {
		this.empName = empName;
	}
	public Double getEmpSalary() {
		return empSalary;
	}
	public void setEmpSalary(Double empSalary) {
		this.empSalary = empSalary;
	}
	public Date getEmpStartDate() {
		return empStartDate;
	}
	public void setEmpStartDate(Date empStartDate) {
		this.empStartDate = empStartDate;
	}
	public Integer getEmpStatus() {
		return empStatus;
	}
	public void setEmpStatus(Integer empStatus) {
		this.empStatus = empStatus;
	}
	@ManyToOne
	@JoinColumn(name="deptId")
	public Department getDept() {
		return dept;
	}
	public void setDept(Department dept) {
		this.dept = dept;
	}
	@Override
	public String toString() {
		return "Employee [empId=" + empId + ", empAddress=" + empAddress + ", empAge=" + empAge + ", empGender="
				+ empGender + ", empName=" + empName + ", empSalary=" + empSalary + ", empStartDate=" + empStartDate
				+ ", empStatus=" + empStatus + "]";
	}
	public Employee(Integer empId, String empAddress, Integer empAge, String empGender, String empName,
			Double empSalary, Date empStartDate, Integer empStatus) {
		super();
		this.empId = empId;
		this.empAddress = empAddress;
		this.empAge = empAge;
		this.empGender = empGender;
		this.empName = empName;
		this.empSalary = empSalary;
		this.empStartDate = empStartDate;
		this.empStatus = empStatus;
	}
	public Employee() {
	}
	public Employee(Integer empId, String empName, Double empSalary) {
		
		super();
//		System.out.println("调用了三个参数的有参构造方法");
		this.empId = empId;
		this.empName = empName;
		this.empSalary = empSalary;
	}
}
2.Department实体类:
@Entity
public class Department {
	private Integer deptId;
	private String deptName;
	private String deptManager;
	private Set<Employee> emps = new HashSet();
	@OneToMany(mappedBy="dept",fetch=FetchType.LAZY)
//	@JoinColumn(name="deptId")
	public Set<Employee> getEmps() {
		return emps;
	}

	public void setEmps(Set<Employee> emps) {
		this.emps = emps;
	}

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	public Integer getDeptId() {
		return deptId;
	}

	public void setDeptId(Integer deptId) {
		this.deptId = deptId;
	}

	public String getDeptName() {
		return deptName;
	}

	public void setDeptName(String deptName) {
		this.deptName = deptName;
	}

	public String getDeptManager() {
		return deptManager;
	}

	public void setDeptManager(String deptManager) {
		this.deptManager = deptManager;
	}

	@Override
	public String toString() {
		return "Department [deptId=" + deptId + ", deptName=" + deptName + ", deptManager=" + deptManager +  "]";
	}

	public Department(Integer deptId, String deptName, String deptManager) {
		super();
		this.deptId = deptId;
		this.deptName = deptName;
		this.deptManager = deptManager;
	}

	public Department() {
		super();
	}
}
3. 测试类:
public class SubQueryTest {
	EntityManagerFactory emf;
	EntityManager em;
	EntityTransaction transaction;
	
	@Test
	public void testFun(){
//		concat(String s1, String s2):字符串合并/连接函数。
//		substring(String s, int start, int length):取字串函数。
//		trim([leading|trailing|both,] [char c,] String s):从字符串中去掉首/尾指定的字符或空格。
//		lower(String s):将字符串转换成小写形式。
//		upper(String s):将字符串转换成大写形式。
//		length(String s):求字符串的长度。
//		locate(String s1, String s2[, int start]):从第一个字符串中查找第二个字符串(子串)出现的位置。若未找到则返回0。
		
//		String jpql ="select concat(e.empId,e.empName) from Employee e";
//		String jpql ="select substring(e.empName,1,1) from Employee e";
//		String jpql ="select concat(trim(e.empName),length(e.empName)) from Employee e where e.empId <10";
		String jpql = "select locate(e.empName,'一') from Employee e where e.empId = 8";
		Query query = em.createQuery(jpql);
		List resultList = query.getResultList();
		for (Object object : resultList) {
			System.out.println(object);
			
		}
	}

	@Before
	public void before() {
		// 1、获取EntityMangerFactory
		emf = Persistence.createEntityManagerFactory("jpa-03");
		// 2、获取EntityManger
		// 重点对象,所有增删改查操作,都是通过它的方法进行的
		em = emf.createEntityManager();
		transaction = em.getTransaction();
		transaction.begin();
	}

	@After
	public void after() {
		transaction.commit();
		em.close();

	}
}

4.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
<!-- RESOURCE_LOCAL:开启本地事务的支持 -->
	<persistence-unit name="jpa-03" transaction-type="RESOURCE_LOCAL" >
	<!--  添加底层实现的支持 ,如,配置HIbernate对于JPA的支持-->
	<provider>org.hibernate.ejb.HibernatePersistence</provider>
	<!-- 映射的实体类 -->
	<class>
		com.kmu.entity.Employee
	</class>
	<class>
		com.kmu.entity.Department
	</class>
	
	<properties>
		<!-- 配置数据库连接信息 -->
		<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
		<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa" />
		<property name="javax.persistence.jdbc.user" value="root" />
		<property name="javax.persistence.jdbc.password" value="123123" />
		<!-- 配置Hibernate框架需要的部分数据 -->
		<!-- 
			hibernate.format_sql:格式化sql,将来,程序运行时,会将运行的一些
			信息,打印在控制台,如执行的sql语句打印在控制台。
			hibernate.show_sql:在日志中,显示执行的mysql语句
			hibernate.hbm2ddl.auto:自动见表、更新表结构的操作。
				update:通过该配置选项,可以自动根据实体类,生成mysql中的数据表。
				none:则不会自动生成表,而是需要你手动亲自在mysql中创建一个与java类映射的表。
		 -->
		<property name="hibernate.format_sql" value="true" />
		<property name="hibernate.show_sql" value="true" />
		<property name="hibernate.hbm2ddl.auto" value="update" />
	</properties>
	</persistence-unit>
</persistence>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值