mybatis扩展之类型处理器(枚举类型处理)

Employee.java(省略getter和setter方法)

    private Integer id;
    private String lastName;
    private String gender;
    private String email;
    private EmpStatus empStatus=EmpStatus.LOGOUT;    private Department dept;

EmpStatus.java

package com.gong.mybatis.bean;

public enum EmpStatus {
    LOGIN,LOGOUT,REMOVE
}

EmployeeMapper.java

    public void addEmp(Employee employee);

EmployeeMapper.xml

    <insert id="addEmp" parameterType="com.gong.mybatis.bean.Employee"
    useGeneratedKeys="true" keyProperty="id">
        insert into tbl_employee(last_name,gender,email,empStatus)
        values(#{lastName},#{gender},#{email},#{empStatus})
    </insert>

测试:

package com.gong.mybatis.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.gong.mybatis.bean.Department;
import com.gong.mybatis.bean.Employee;
import com.gong.mybatis.dao.EmployeeMapper;
import com.gong.mybatis.mapper.EmployeeMapperDynamicSql;

public class TestMybatis5 {

    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream is = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(is);
    }

    @Test
    public void test() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();

        try {
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
            //第一个参数为当前页码,第二个参数是每页的记录数
            Page<Object> page = PageHelper.startPage(1,2);
            List<Employee> emps = mapper.getAllEmp();
            //第一个参数为传入的数据,第二个参数为连续显示多少页
            PageInfo<Employee> pageInfo = new PageInfo<>(emps,3);
            for(Employee emp:emps) {
                System.out.println(emp);
            }
//            System.out.println("当前页码:"+page.getPageNum());
//            System.out.println("总记录数:"+page.getTotal());
//            System.out.println("每页几条记录:"+page.getPageSize());
//            System.out.println("总页码数:"+page.getPages());
            System.out.println("当前页码:"+pageInfo.getPageNum());
            System.out.println("总记录数:"+pageInfo.getTotal());
            System.out.println("每页几条记录:"+pageInfo.getPageSize());
            System.out.println("总页码数:"+pageInfo.getPages());
            System.out.println("是否第一页:"+pageInfo.isIsFirstPage());
            System.out.println("是否最后一页:"+pageInfo.isIsLastPage());
            System.out.println("连续显示的页码:");
            int[] navigatepageNums = pageInfo.getNavigatepageNums();
            for (int i = 0; i < navigatepageNums.length; i++) {
                System.out.println(navigatepageNums[i]);
            }
        } finally {
            // TODO: handle finally clause
            openSession.close();
        }
    }

    @Test
    public void testEnum() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();

        try {
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
            Employee employee = new Employee();
            employee.setLastName("mike");
            employee.setGender("1");
            employee.setEmail("[email protected]");
            mapper.addEmp(employee);
            System.out.println("保存成功:"+employee.getId());
            openSession.commit();
        } finally {
            // TODO: handle finally clause
            openSession.close();
        }
    }
}

输出:

DEBUG 01-23 15:27:43,329 ==>  Preparing: insert into tbl_employee(last_name,gender,email,empStatus) values(?,?,?,?)   (BaseJdbcLogger.java:145)
DEBUG 01-23 15:27:43,396 ==> Parameters: mike(String), 1(String), [email protected](String), LOGOUT(String)  (BaseJdbcLogger.java:145)
DEBUG 01-23 15:27:43,472 <==    Updates: 1  (BaseJdbcLogger.java:145)
保存成功:9

数据库中:

插入的是枚举类型的值。

我们也可以在mybatis全局配置文件中处理枚举类型的Handler:

    <typeHandlers>
        <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler"
        javaType="com.gong.mybatis.bean.EmpStatus"/>
    </typeHandlers>

再进行测试,输出结果为:

DEBUG 01-23 15:46:12,577 ==>  Preparing: insert into tbl_employee(last_name,gender,email,empStatus) values(?,?,?,?)   (BaseJdbcLogger.java:145)
DEBUG 01-23 15:46:12,629 ==> Parameters: bob(String), 1(String), [email protected](String), 1(Integer)  (BaseJdbcLogger.java:145)
DEBUG 01-23 15:46:12,705 <==    Updates: 1  (BaseJdbcLogger.java:145)
保存成功:10

数据库中:

存储的就是索引了。

原文地址:https://www.cnblogs.com/xiximayou/p/12230732.html

时间: 2024-07-30 19:34:30

mybatis扩展之类型处理器(枚举类型处理)的相关文章

Entity FreamWork 无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型错误解决

Entity FreamWork 无法创建“System.Object”类型的常量值.此上下文仅支持基元类型或枚举类型错误解决: 最近在开发中把我原来抄的架构里面的主键由固定的Guid改成了可以泛型指定的类型,结果,发现执行EF在查询的时候,不能支持equal,只能用==,理由很简单,因为equal是object的方法,虽然所有的类都是object的子类,但是ef不支持复杂类型的直接检索,只能用简单类型,比如常用的string,int,guid,这些,都可以做==,也可以用来检索.但是比如Per

标C编程笔记day05 函数声明、文件读写、联合类型、枚举类型

函数声明: 1.隐式声明:在没有声明的情况下,系统可根据参数类型判断去调用函数(有可能出错) 2.显式声明:声明在被调用之前,如:double add(double,double);  函数声明参数可只写类型,不需要写函数体. 文件操作: fopen  --打开文件,FILE *pFile=fopen("a.txt","w"); fopen的打开模式: r:只能读,要求文件存在 r+:可读可写,要求文件存在 w:只能写,创建文件,如果文件存在则先删除旧文件 w+:可

网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型、浮点类型、枚举类型

C语言程序设计进阶_第一周:数据类型:整数类型.浮点类型.枚举类型 1.0数据类型 1.1整数类型 1.2浮点类型 1.3逻辑类型 1.4类型转换和条件运算 1.0数据类型 1 整数 char(%c), short, int(%d), long(%ld), long long(C99) 2 浮点数 float(%f), double(%lf), long double(C99) 3 逻辑 bool(C99) 4 指针 5 自定义类型 所表达的数的范围:char<short<int<flo

无法创建类型的常量值。此上下文仅支持基元类型或枚举类型。

源代码 错误:无法创建类型的常量值.此上下文仅支持基元类型或枚举类型. 报错原因就是因为下面标红的那一行 //hourApplys 的类型是IQueryable var hourApplys = hourApplyList.OrderBy(h => h.Id).Skip((pageIndex - 1) * pageSize).Take(pageSize); var list = from h in hourApplys select new HourApplyVM { Id = h.Id, Us

无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型

Entity FreamWork 无法创建“System.Object”类型的常量值.此上下文仅支持基元类型或枚举类型错误解决: 最近在开发中把我原来抄的架构里面的主键由固定的Guid改成了可以泛型指定的类型,结果,发现执行EF在查询的时候,不能支持equal,只能用==,理由很简单,因为equal是object的方法,虽然所有的类都是object的子类,但是ef不支持复杂类型的直接检索,只能用简单类型,比如常用的string,int,guid,这些,都可以做==,也可以用来检索.但是比如Per

函数返回值类型为枚举类型

枚举是个好东西,它和结构体一样,都可以定义一种数据类型,但是枚举有一个更优点,就是它可以默认指定定义的初始值. 有一个项目,涉及到CPU卡,卡片有错误.上电.DF01目录等状态,如果单独定义这些变量,要使用很多变量,这里有一个规律,即:CPU卡不能同时为这几种状态中的几个,只能为其中的一个,这样,我们可以定义一个枚举类型变量,例如: //标识ic的几种状态typedef enum{     ICC_ERROR,       ICC_NO_EXIST,       ICC_EXIST,      

无法创建“匿名类型”类型的常量值。此上下文仅支持基元类型或枚举类型。

// 获取类别表数据 var typeIDList = new List<int> { 2, 3, 4, 5, 6, 7 }; var typeList = db.T_Dictionary .Where(d => typeIDList.Contains(d.TypeID)) .Select(d => new { d.TypeID, d.DKey, d.DValue }).ToList(); //获取植物的数据 var data = db.T_Plants2.Where(d =>

浩哥解析MyBatis源码(九)——Type类型模块之类型处理器注册器(TypeHandlerRegistry)

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6709157.html 1.回顾 上一篇研究的是类型别名注册器TypeAliasRegister,它主要用于将基本类型和用户自定义的类型进行别名注册,将别名及其对应类类型保存在一个HashMap中,方便存取,是映射器映射功能实现的基础,本篇所研究的类型处理器注册器TypeHandlerReister是用来统筹管理类型处理器的,类型处理器是真正用于进行java类型与数据库类型映射的工具. 这

笔记:MyBatis XML配置-typeHandlers 默认类型处理器

类型处理器 Java 类型 JDBC 类型 BooleanTypeHandler java.lang.Boolean, boolean 数据库兼容的 BOOLEAN ByteTypeHandler java.lang.Byte, byte 数据库兼容的 NUMERIC 或 BYTE ShortTypeHandler java.lang.Short, short 数据库兼容的 NUMERIC 或 SHORT INTEGER IntegerTypeHandler java.lang.Integer,