两个方法:1、使用自定义的sql查询;2、封装一个类用于输出。
Dao:
@Service
public 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;
}
}