Spring Data jpa 的几种方法
2018-06-20 16:00 那么像你 阅读(70) 评论(0) 收藏 举报1.直接继承JpaRepository或JPA定义的其他接口,可以直接调用其接口中定义的方法,只需要我们继承接口不需要我们实现接口中的方法,jpa在注入时会自动实现 EmpRepository
package com.exmple.Repository; import com.exmple.Entity.Emp; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface EmpRepository extends JpaRepository<Emp,Long> { }
2.根据Jpa 的规则在 EmpRepository,增加符合规则名字的方法
@Repository public interface EmpRepository extends JpaRepository<Emp,Long> { /* 根据名字查询。 findEmpByName find为固定 By为查询条件的固定符,其后跟条件 Name为Emp中的一个属性 返回值为一个Emp的数组集合 */ List<Emp> findEmpByName(String name); /* 根据年龄查询 同Name的写法好条件 返回值为单个对象,如果查出多条则异常 */ Emp findEmpByAge(Integer gae); /** * 根据Name and Age查询.查出同时符合条件的返回值 * @param Name * @param age * @return 如果查出多条则异常 */ Emp findByNameAndAge(String Name,Integer age); }
对于规则
3.使用 @Query ,即自定义sql语句
/** *用HQL去查询,?1表示第一个参数.可以有其他的参数。 Emp为实体类名 * @param id * @return */ @Query(value = "select e from Emp e where e.id=?1") Emp EMPhql( long id); /** * 用HQL去查询,用@Param注解参数名,在 语句中 “:参数名”用于使用参数值 * @param id * @param age * @return */ @Query(value = "select e from Emp e where e.id= :id and age=:age") Emp empGhsql(@Param("id") long id, @Param("age") int age); /** * 用纯sql语句去查询,参数使用同HQL. * @param id * @return */ @Query(value = "select * from emp where employee_id=?1",nativeQuery = true) Emp EMPsql( long id);
4. EntityManager,可实现复杂的自写sql语句
package com.exmple.Repository; import com.exmple.Entity.Emp; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.persistence.EntityManager; import javax.persistence.Query; import java.util.List; @Service public class EmpRepositoryEntityManager { @Autowired private EntityManager entityManager; public List<Emp> allemps(){ String sql= "select * from emp"; Query query= entityManager.createNativeQuery(sql,Emp.class); return query.getResultList(); } }
5.JdbcTemplate,可实现复杂查询
package com.exmple.Repository; import com.exmple.Entity.Emp; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.support.JdbcDaoSupport; import org.springframework.stereotype.Service; import javax.sql.DataSource; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; /** * JdbcDaoSupport 中有JdbcTemplate的注入 */ @Service public class EmpRepositoryJdbc extends JdbcDaoSupport { @Autowired public EmpRepositoryJdbc(DataSource dataSource) { setDataSource(dataSource); } public List<Emp> myCustomBatchOperation() { String COMPLICATED_SQL="select * from emp"; return getJdbcTemplate().query(COMPLICATED_SQL, new UserRowMapper()); } private static class UserRowMapper implements RowMapper<Emp> { /* * (non-Javadoc) * @see org.springframework.jdbc.core.RowMapper#mapRow(java.sql.ResultSet, int) */ public Emp mapRow(ResultSet rs, int rowNum) throws SQLException { Emp user = new Emp(); user.setAge(rs.getInt("aga")); user.setId(rs.getLong("employee_id")); user.setName(rs.getString("employee_ename")); user.setStatus(rs.getString("employee_status")); user.setSex(rs.getString("sex")); return user; } } }
6.多表连查
从关系上分为OneToOne、OneToMany/ManyToOne、ManyToMany,从方向上分为 单向和双向。
在数据库设计上 OneToOne和OneToMany/ManyToOne可在Many的一方(OneToOne,可根据情况在任意一方)增加外键与One方相关联,也可增加第三表相关联。ManyToMany 只能通过第三表相关联
对于EntityManager和JdbcTemplate还未深入
连表还未学习
浙公网安备 33010602011771号