SpringDataJPA中的JPQL

SpringDataJPA中的JPQL

示例:

注: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;
	
//	private String deptDeptId;
	
//	public String getDeptDeptId() {
//		return deptDeptId;
//	}
//	public void setDeptDeptId(String deptDeptId) {
//		this.deptDeptId = deptDeptId;
//	}
	@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.EmployeeDao接口层:
public interface EmployeeDao extends Repository<Employee, Integer>{
	
	/**
	 * 按照id修改用户的名字和年龄
	 */
	@Modifying
	@Query("update Employee e set e.empName = ?1,e.empAge=?2 where e.empId=?3")
	public Integer updateNameAndAgeById(String empName,Integer empAge,Integer id);
	
	/**
	 * 什么时候,使用JPQL?
	 * 	方法命名规范很好用,不一定能胜任任何场景,编写JPQL与方法映射。
	 */
	/**
	 * 按照性别查询员工信息,要求使用jpql
	 */
//	@Query("select e from Employee e where e.empGender = ?1")
	@Query(value="select * from employee where empGender = ?1",nativeQuery=true)
	public List<Employee> abcdefg(String gender);

}

4.EmployeeService服务层:
public interface EmployeeService {
	public Integer updateNameAndAgeById(String empName,Integer empAge,Integer empId);
}
5.EmployeeServiceImpl实现类:
@Service
@Transactional
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeDao employeeDao;
	
	@Override
	public Integer updateNameAndAgeById(String empName, Integer empAge, Integer empId) {
		Integer updateNameAndAgeById = employeeDao.updateNameAndAgeById(empName,empAge,empId);
		return updateNameAndAgeById;
	}
}

6.测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring-beans.xml")
public class EmployeeServiceTest {
@Autowired
EmployeeService service;
	@Test
	public void testUpdateNameAndAgeById() {
		Integer updateNameAndAgeById = service.updateNameAndAgeById("钱媛", 18, 9);
		System.out.println(updateNameAndAgeById);
	}
	@Test
	public void testAbcdef(){
		List<Employee> abcdefg = employeeDao.abcdefg("男");
		for (Employee employee : abcdefg) {
			System.out.println(employee.getEmpName()+":"+employee.getEmpAge()+":"+employee.getEmpGender());
		}
	}
}

7.spring-beans.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx" 
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans.xsd		
	http://www.springframework.org/schema/data/jpa 
	http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd		
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx-4.3.xsd		
	http://www.springframework.org/schema/context 
	http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<!-- 数据源 数据库连接池 -->
	<context:property-placeholder location="classpath:jdbc.properties"/>
	
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClass}"></property>
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
		<property name="user" value="${jdbc.user}"></property>
		<property name="password" value="${jdbc.password}"></property>
	</bean>

	<!-- Spring整合Jpa -->
	<bean id="entityManagerFactory"
		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="jpaVendorAdapter">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
		</property>
		<!-- 配置与数据映射的实体类所在的包,对应之前的class标签 -->
		<property name="packagesToScan" value="com.kmu.entity"></property>
		<property name="jpaProperties">
			<props>
				<!-- 数据表的列的映射策略 可选的 <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop> -->

				<!-- 底层实现框架,hibernate 基本属性 -->
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">true</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
			</props>
		</property>
	</bean>

	<!-- 事务支持的 注解驱动的事务管理方式 -->
	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory"></property>
	</bean>
	<tx:annotation-driven transaction-manager="transactionManager" />

	<!-- Spring扫描组件的配置
		针对service层
		针对持久层dao、Repository,持久层是接口,是Spring根据配置,来动态生成的,并且注入到Spring容器。
			无需针对持久层,进行注解配置。只需要扫描这些持久层接口。		
		针对web :Controller
	 -->
	<jpa:repositories base-package="com.kmu.repository"></jpa:repositories>
	<context:component-scan base-package="com.kmu.service"></context:component-scan>
</beans>


8.jdbc.properties配置文件:
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/jpa
jdbc.user=root
jdbc.password=123123

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值