Mybatis中使用Java枚举类型

返回枚举集合JSON

定义枚举

package com.test.model;

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

public enum StyleEnum {
	
	A2("AA"),A3("AAA"),A4("AAAA"),A5("AAAAA");

	private String name = null;
	
	StyleEnum(String name)
	{
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public static Map enum2Json(StyleEnum se)
	{
		Map map = new HashMap();
		map.put("id",se.toString());//A2,A3,A4,A5
		map.put("name",se.getName());
		return map;
	}
}

Controller返回枚举JSON

	@RequestMapping("/loadstyle")
	@ResponseBody
	public List<Map> getStyle()
	{
		List<Map> rtn = new ArrayList<Map>();
		rtn.add(StyleEnum.enum2Json(StyleEnum.A2));
		rtn.add(StyleEnum.enum2Json(StyleEnum.A3));
		rtn.add(StyleEnum.enum2Json(StyleEnum.A4));
		rtn.add(StyleEnum.enum2Json(StyleEnum.A5));
		return rtn;
	}

枚举参与Mybatis操作

定义实体类

package com.test.model;

import java.sql.Timestamp;

import com.fasterxml.jackson.annotation.JsonFormat;

import java.io.Serializable;
import java.sql.Date;

public class StudentInfo implements Serializable{
	private Integer id = null;
	private String name = null;
	private Integer age = null;
	private String province = null;
	private String city = null;
	private String county = null;
	@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
	private Date dt = null;
	@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
	private Timestamp ts = null;
	private String provinceName = null;
	private String cityName = null;
	private String countyName = null;
	private String[] cids = null;
	private StyleEnum style = null;
	private String styleString = null;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getProvince() {
		return province;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public String getCounty() {
		return county;
	}
	public void setCounty(String county) {
		this.county = county;
	}	
	public Date getDt() {
		return dt;
	}
	public void setDt(Date dt) {
		this.dt = dt;
	}
	public Timestamp getTs() {
		return ts;
	}
	public void setTs(Timestamp ts) {
		this.ts = ts;
	}
	public String getProvinceName() {
		return provinceName;
	}
	public void setProvinceName(String provinceName) {
		this.provinceName = provinceName;
	}
	public String getCityName() {
		return cityName;
	}
	public void setCityName(String cityName) {
		this.cityName = cityName;
	}
	public String getCountyName() {
		return countyName;
	}
	public void setCountyName(String countyName) {
		this.countyName = countyName;
	}
	public String[] getCids() {
		return cids;
	}
	public void setCids(String[] cids) {
		this.cids = cids;
	}
	public StyleEnum getStyle() {
		return style;
	}
	public void setStyle(StyleEnum style) {
		this.style = style;
	}
	public String getStyleString() {
		return styleString;
	}
	public void setStyleString(String styleString) {
		this.styleString = styleString;
	}
	public String toString()
	{
		return "StudentInfo[name="+name+",age="+age+",province="+province+",city="+city+",county="+county+",style="+style+",styleString="+styleString+"]";
	}
}

定义枚举转化器

package com.test.model;

import java.sql.CallableStatement; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
  
  
import org.apache.ibatis.type.BaseTypeHandler; 
import org.apache.ibatis.type.JdbcType; 
  
public class StyleHandler extends BaseTypeHandler<StyleEnum>{ 
	private Class<StyleEnum> type; 
	  
	private StyleEnum[] enums; 
	  
	/** 
	* 设置配置文件设置的转换类以及枚举类内容,供其他方法更便捷高效的实现 
	* @param type 配置文件中设置的转换类 
	*/
	public StyleHandler(Class<StyleEnum> type) { 
		if (type == null) 
			throw new IllegalArgumentException("Type argument cannot be null"); 
		this.type = type; 
		this.enums = type.getEnumConstants(); 
		if (this.enums == null) 
			throw new IllegalArgumentException(type.getSimpleName() 
			+ " does not represent an enum type."); 
	} 
	  
	@Override
	public StyleEnum getNullableResult(ResultSet rs, String columnName) throws SQLException { 
		// 根据数据库存储类型决定获取类型,本例子中数据库中存放String类型 
		String str = rs.getString(columnName); 
		if (rs.wasNull()) { 
			return null; 
		} else { 
			// 根据数据库中的value值,定位PersonType子类 
			return StyleEnum.valueOf(str); 
		} 
	} 
	  
	@Override
	public StyleEnum getNullableResult(ResultSet rs, int columnIndex) throws SQLException { 
		// 根据数据库存储类型决定获取类型,本例子中数据库中存放String类型 
		String str = rs.getString(columnIndex); 
		if (rs.wasNull()) { 
			return null; 
		} else { 
			// 根据数据库中的value值,定位PersonType子类 
			return StyleEnum.valueOf(str); 
		} 
	} 
	  
	@Override
	public StyleEnum getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { 
		// 根据数据库存储类型决定获取类型,本例子中数据库中存放String类型 
		String str = cs.getString(columnIndex); 
		if (cs.wasNull()) { 
			return null; 
		} else { 
			// 根据数据库中的value值,定位PersonType子类 
			return StyleEnum.valueOf(str); 
		} 
	} 
	  
	@Override
	public void setNonNullParameter(PreparedStatement ps, int i, StyleEnum parameter, JdbcType jdbcType) 
	throws SQLException { 
		// baseTypeHandler已经帮我们做了parameter的null判断 
		ps.setString(i, parameter.toString()); 
	}
}

通过Mybatis全局配置文件设置转化器

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE configuration 
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration> 
	<typeHandlers> 
		<typeHandler handler="com.test.model.StyleHandler"
	 		javaType="com.test.model.StyleEnum" jdbcType="CHAR"/> 
	</typeHandlers> 

</configuration>

SpringBoot配置文件设置Mybatis全局配置文件

mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.config-locations=classpath:mybatis-cfg.xml

ElementUI VUE前端网页设计

  <el-form-item label="景区风格">
    <el-select v-model="student.style" placeholder="景区风格" style="width: 100%;">
      <el-option v-for="c in stylelist" :label="c.name" :value="c.id">
      </el-option>
    </el-select>
  </el-form-item>

<script>
  import axios from 'axios'

  export default {
    data() {
      return {
        courseList:[],//所有课程
        provincelist:[],//所有省份集合
        citylist:[],//选中省份之后对应地区集合
        countylist:[],//选中地区之后对应县市集合
        stylelist:[],//选中地区之后对应县市集合
        student:{//添加或修改时用到的学生对象
          id:'',//学生ID
          name:'',//学生姓名
          age:'12',//学生年龄
          province:'',//省份代码
          city:'',//地区代码
          county:'',//县市代码
          dt:'',//日期
          ts:'',//时间,
          cids:[1,2], //选中的课程,
          style:''
        }
      }
    },
    mounted() {
        var id = this.$route.params.id;
        this.openbyid(id);
        this.doloadaddress();
        this.loadcourse();
        this.loadstyle();
    },
    methods: {
      onSubmit() {
        console.log('submit!');
        this.dosave();
      },
       //加载课程
        loadcourse:function()
        {
            var _this = this;
            axios.get('http://localhost:6060/loadcourse')
            .then(function(result){
              //alert(result.data);
                _this.courseList=result.data;
            })
        },
       //加载景区风格
        loadstyle:function()
        {
            var _this = this;
            axios.get('http://localhost:6060/loadstyle')
            .then(function(result){
              //alert(result.data);
                _this.stylelist=result.data;
            })
        },
        //通过学生ID,获取学生对象
        openbyid:function(id)
        {
            var _this = this;
            axios.get('http://localhost:6060/findstudbyid?id='+id)
            .then(function(result){
                _this.student=result.data;
                //调用VUE方法,初始化三级联动地址
                _this.doloadaddress(_this.student.province,_this.student.city,
                        _this.student.county);
            })
        },
        dosave:function()
        {
            console.log('dosave...');
            var _this = this;
            //将VUE对象student提交到后台
            axios.post('http://localhost:6060/savestudent',_this.student)
                .then(function(result){
                    if(result.data)
                    {
                        alert('Successfully');
                        _this.$router.push('/list');
                    }
                    else
                        alert('Failure');
                })
        },
        selectprovince:function()//省份下列框选择事件
        {
            //选择地区,只输入省份Code
            this.doloadaddress(this.student.province);
        },
        selectcity:function()//地区下列框选择事件
        {
            //选择县市,输入省份Code,地区Code
            this.doloadaddress(this.student.province,this.student.city);
        },
        //初始化三级联动地址下列框
        //province 省份代码  可空
        //city 地区代码  可空
        //county 县市代码 可空
        doloadaddress:function(province,city,county)
        {
            console.log('doloadaddress...');
            //定义_this记录VUE实例,应用axios中this代表
            var _this = this;
            //加载省份列表
            axios.get('http://localhost:6060/getprovice')
                .then(function(result){
                    _this.provincelist = result.data;
                    if(province != '' && province != null)
                    {
                        console.log('province...'+province);
                        _this.student.province = province;
                    }
                    else
                    {
                        //如果没有省份初始值,选择第一省份作为初始值
                        _this.student.province = result.data[0].code;
                    }
                    //根据省份Code,加载地区列表,发起请求,在下面语句中捕捉返回数据
                    return axios.get('http://localhost:6060/getcity?code='+_this.student.province);
                })
                .then(function(cityResult){
                    //捕捉地区列表数据
                    _this.citylist = cityResult.data;
                    if(city != '' && city != null)
                    {
                        console.log('city...'+city);
                        _this.student.city = city;
                    }
                    else
                    {
                        //如果没有地区初始值,选择第一地区作为初始值
                        _this.student.city = cityResult.data[0].code;
                    }
                    //根据地区Code,加载县市列表,发起请求,在下面语句中捕捉返回数据
                    return axios.get('http://localhost:6060/getcounty?code='+_this.student.city);
                })
                .then(function(countyResult){
                    //捕捉县市列表数据
                    _this.countylist = countyResult.data;
                    console.log('county...'+countyResult.data);
                    if(county != '' && county != null)
                    {
                        console.log('county...'+county);
                        _this.student.county = county;
                    }
                    else
                    {
                        //如果没有县市初始值,选择第一县市作为初始值
                        _this.student.county = countyResult.data[0].code;
                    }
                })
        }
    }
  }
</script>
发布了189 篇原创文章 · 获赞 34 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qixiang_chen/article/details/100079994
今日推荐