spring data jpa 查询部分属性

来源:互联网 发布:小众 知乎 编辑:程序博客网 时间:2024/06/16 06:13

两个方法:1、使用自定义的sql查询;2、封装一个类用于输出。

Dao:

@Servicepublic class OperatorServiceImpl implements OperatorService {    @Autowired    OperatorRepository operatorRepository;    public OperatorRepository getOperatorRepository() {        return operatorRepository;    }    private EntityManagerFactory emf;    @PersistenceUnit    public void setEntityManagerFactory(EntityManagerFactory emf) {        this.emf = emf;    }//方法1    @Override    public List<Operator> list() throws Exception {        EntityManager em = emf.createEntityManager();        Query query = em.createNamedQuery("getUsers");        List<Object[]> list = (List<Object[]>) query.getResultList();        List<Operator> operatorList = CastEntity.castEntity(list, Operator.class);        em.close();        return operatorList;//        Sort s = new Sort(Sort.Direction.DESC,"id");//        return operatorRepository.findAll();    }//方法2:    @Override    public List<SimpleOperator> listOperator() {        EntityManager em = emf.createEntityManager();        Query query = em.createQuery("select new com.jiapeng.xfw.server.normalClass.SimpleOperator(p.userId,p.name,p.userType) from Operator p order by p.userId desc");        List result = query.getResultList();        return result;    }}

方法一的对应的Entity的写法:

@NamedNativeQueries({        @NamedNativeQuery(name = "getUsers",        query = "select id,username,usertype from t_xfw_operator order by id desc",        resultSetMapping = "usersMap")})@SqlResultSetMappings({        @SqlResultSetMapping(name = "usersMap",        entities = {},        columns = {                @ColumnResult(name = "id"),                @ColumnResult(name="username"),                @ColumnResult(name="usertype")        })})@Entity@Table(name = "operator")public class Operator {    @Id    @GeneratedValue    @Column(name = "id")    private int userId;    @Column( name = "userName", unique = true,nullable = false)    private  String name;    @Column(name = "passWord")    private  String passWord;    @Column(name = "userType")    @Enumerated(value = EnumType.ORDINAL)    private EnumOperatorType userType;    @ManyToMany(            fetch = FetchType.LAZY,            targetEntity = com.jiapeng.xfw.server.entity.Rights.class)    @JoinTable(name = "operator_rights",        joinColumns = {@JoinColumn(name = "user_id",referencedColumnName = "id")},            inverseJoinColumns = {@JoinColumn(name = "right_id",referencedColumnName = "id")}    )    @OrderBy("id")    private List<Rights> rightses;    public List<Rights> getRightses() {        return rightses;    }    public void setRightses(List<Rights> rightses) {        this.rightses = rightses;    }    public EnumOperatorType getUserType() {        return userType;    }    public void setUserType(EnumOperatorType userType) {        this.userType = userType;    }    public int getUserId() {        return userId;    }    public void setUserId(int userId) {        this.userId = userId;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassWord() {        return passWord;    }    public void setPassWord(String passWord) {        this.passWord = passWord;    }    public Operator(){        super();    }    public Operator(Integer id,String username){        super();        this.userId=id;        this.name= username;    }//这个构造函授必须    public Operator(Integer id,String username,Integer userType){        super();        this.userId=id;        this.name= username;        this.userType = EnumOperatorType.valueOf( userType);    }}

方法二中的对应输出类:

public class SimpleOperator {    private Integer userId;    private  String name;    private  EnumOperatorType userType;    public EnumOperatorType getUserType() {        return userType;    }    public void setUserType(EnumOperatorType userType) {        this.userType = userType;    }    public Integer getUserId() {        return userId;    }    public void setUserId(Integer userId) {        this.userId = userId;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }//这个构造函授必须,注意userType的类型为Object    public SimpleOperator(int userId,String name,Object userType){        super();        this.userId = userId;        this.name = name;        this.userType = (EnumOperatorType)userType;    }}
1 0
原创粉丝点击