springBoot+easyui+chart.js进行图表数据展示的项目记录
1 .业务需求
需求一:分析哪一类商品为购买总量前十的商品和被购买总量
需求二:分析每年的哪个月份购买商品的量最多
需求三:分析国内哪个省份的消费者最有购买欲望
2.数据库表结构
Create Table
CREATE TABLE `user_action` (
`id` varchar(50) DEFAULT NULL,
`uid` varchar(50) DEFAULT NULL,
`item_id` varchar(50) DEFAULT NULL,
`behavior_type` varchar(10) DEFAULT NULL,
`item_category` varchar(50) DEFAULT NULL,
`visit_date` date DEFAULT NULL,
`province` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
3.实体类
@Table(name = "user_action")
@Entity
public class RawUser implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "uid")
private String uid;
@Column(name = "item_id")
private Double itemId;
@Column(name = "behavior_type")
private String behaviorType;
@Column(name = "item_category")
private String itemCategory;
@Column(name = "visit_date")
private String visitDate;
@Column(name = "province")
private String province;
//....省略getter/setter方法
}
4.数据访问层
因为返回的数据中包含产生的中间字段,刚开始想着给实体类添加同名字段来接收但是接受不了,封装实体类也不行,询问度娘了很久没有找到可行的方案,最后直接使用实体类型的数组进行接收
@Repository
public interface RawUserRep extends JpaRepository<RawUser, Integer> {
@Query(nativeQuery=true ,value = "SELECT a.item_category,COUNT(id) AS totalNumber FROM user_action a WHERE a.behavior_type='4' GROUP BY a.item_category ORDER BY COUNT(a.id) DESC LIMIT 0,10 ;")
List<Object[]> findToTen();
//每个字段产生的数据都封装在Object数组中,使用索引去获取
@Query(nativeQuery=true ,value =