SSM框架下的图表设计

1. 由于在自动生成的Mapper.xml文件里使用自定义结果集(即统计函数只取了其中的几个字段,但是其他的字段在转为json数据后还是会有字段,只是值为null,但对数据的选取造成难度。)效果不理想。

所以自己定义一个Mapper.xml文件和Mapper.java文件,如下:

GenMapper.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dz.mapper.GenMapper">

	<select id="select" resultType="map" parameterType="java.lang.String">
		${_parameter}
	</select>
</mapper>

  GenMapper.java:

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Component;
@Component
public interface GenMapper {
	List<Map<String,Object>> select(String sql);
}

  2. 然后呢,设计Dao接口和Dao的实现类,在Daoimp中写sql语句,当然还可以封装sql语句。

DaoI.java:

public interface AdminuserDao {
	
    //饼图查询
    List<Map<String,Object>> select();
}

  在实现类中,还需要自动装配GenMapper -- DaoImp.java:

package dz.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import dz.daoI.AdminuserDao;
import dz.entity.Adminuser;
import dz.entity.User;
import dz.mapper.AdminuserMapper;
import dz.mapper.GenMapper;

@Repository("adminuserDao")
public class AdminuserDaoImp implements AdminuserDao{
	@Autowired
	private AdminuserMapper adminuserMapper;
	@Autowired
	private GenMapper genMapper;
	

	public GenMapper getGenMapper() {
		return genMapper;
	}

	public void setGenMapper(GenMapper genMapper) {
		this.genMapper = genMapper;
	}

	public AdminuserMapper getAdminuserMapper() {
		return adminuserMapper;
	}

	public void setAdminuserMapper(AdminuserMapper adminuserMapper) {
		this.adminuserMapper = adminuserMapper;
	}
	
	
	//饼图查询
	@Override
	public List<Map<String, Object>> select() {
		// TODO Auto-generated method stub
		String sql = "SELECT COUNT(asex) AS value,asex as name FROM adminuser GROUP BY asex";
		return genMapper.select(sql);
	}
	
}

  3. 接着就是serviceI和serviceImp层(很简单的一层):

ServiceI.java:

public interface AdminuserService {
	
    //饼图查询
    List<Map<String, Object>> select();
}

  ServiceImp.java:

@Service("adminuserService")
public class AdminuserServiceImp implements AdminuserService{
	@Autowired
	private AdminuserDaoImp adminuserDao;

	public AdminuserDaoImp getAdminuserDao() {
		return adminuserDao;
	}

	public void setAdminuserDao(AdminuserDaoImp adminuserDao) {
		this.adminuserDao = adminuserDao;
	}
	
	
	//饼图查询
	@Override
	public List<Map<String, Object>> select() {
		// TODO Auto-generated method stub
		return adminuserDao.select();
	}
	
}

  4.最后是Controller层,将数据以json格式传给jsp页面

@RestController
@RequestMapping(value="/adminuser")
public class AdminuserController extends BaseController{
	@Autowired
	private AdminuserService adminuserService;

	public AdminuserService getAdminuserService() {
		return adminuserService;
	}

	public void setAdminuserService(AdminuserService adminuserService) {
		this.adminuserService = adminuserService;
	}
	
	
	//饼图查询男女人数
	@RequestMapping(value="/pie")
	@ResponseBody
    public List<Map<String, Object>> select(){
		return adminuserService.select();
	}
}

  5. 最后jsp页面用ajax得到数据就可以制作图表了

<div id="container" style="height: 500%"></div>
<script type="text/javascript">
$(function(){
	$.ajax({
		url:"adminuser/pie",
		type:"post",
		data:{},
		dataType:"json",
		success:function(datas){
			//var value = new Array();
			//var name = new Array();
			//$(objs).each(function(i,obj){
				
			//	name.push(obj[0]);
			//	value.push(obj[1]);
			//});
            
			console.log(datas);
			
			var dom = document.getElementById("container");
			var myChart = echarts.init(dom);
			var app = {};
			option = null;
			option = {
			    backgroundColor: '#fff',

			    title: {
			        text: '管理员男女比例饼图',
			        left: 'center',
			        top: 20,
			        textStyle: {
			            color: 'green'
			        }
			    },

			    tooltip : {
			        trigger: 'item',
			        formatter: "{a} <br/>{b} : {c} ({d}%)"
			    },

			    visualMap: {
			        show: false,
			        min: 80,
			        max: 600,
			        inRange: {
			            colorLightness: [0, 1]
			        }
			    },
			    series : [
			        {
			            name:'管理员',
			            type:'pie',
			            radius : '55%',
			            center: ['50%', '50%'],
			            data://[
			                //{value:335, name:'直接访问'},
			                //{value:310, name:'邮件营销'},
			                //{value:274, name:'联盟广告'},
			                //{value:235, name:'视频广告'},
			                //{value:400, name:'搜索引擎'}
			            //]
			        datas.sort(function (a, b) { return a.value - b.value; }),
			            roseType: 'radius',
			            label: {
			                normal: {
			                    textStyle: {
			                        color: 'red'
			                    }
			                }
			            },
			            labelLine: {
			                normal: {
			                    lineStyle: {
			                        color: 'blue'
			                    },
			                    smooth: 0.2,
			                    length: 10,
			                    length2: 20
			                }
			            },
			            itemStyle: {
			                normal: {
			                    color: '#c23531',
			                    shadowBlur: 200,
			                    shadowColor: 'rgba(65, 142, 172, 0.5)'
			                }
			            },

			            animationType: 'scale',
			            animationEasing: 'elasticOut',
			            animationDelay: function (idx) {
			                return Math.random() * 200;
			            }
			        }
			    ]
			};;
			if (option && typeof option === "object") {
			    myChart.setOption(option, true);
			}
		}
	});
});
       </script>

  PS:当然,肯定要引用js,我用的是:http://echarts.baidu.com/里面下载的echarts.js。

放张效果图(比较简陋,复杂的肯定需要复杂的sql,哈哈):

猜你喜欢

转载自www.cnblogs.com/clack/p/9959841.html
今日推荐