(二)Mybatis类型转换器,接口传参类型,

Mybatis类型转换器

首先明白什么时候用到它,当数据库的字段类型和java字段类型无法默认匹配时候进行转换,比如现在数据库类型是INTEGER,而java当中类型是Boolean,true表示1,false表示0,这时候你在执行sql语句插入或者查询获取结果集时,类型就会出现不匹配的情况,这时候我们只需要书写一个类型转换器,并进行配置,之后java遇到INTEGER---Boolean两个类型的时候,就会帮我们自动转换,相当于你插入数据库的值传的是true,他就会转换成1然后插入,数据库返回的结果为1,就会转换成true然后返回给你。具体如下:

BooleanAndIntConvert.java

package convert;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

//类型转换器
public class BooleanAndIntConvert extends BaseTypeHandler<Boolean> {
    public  void setNonNullParameter(PreparedStatement var1, int var2, Boolean var3, JdbcType var4) throws SQLException{
        if(var3){ //boolean转成int,true则插入到数据库时插入1,反之插入0
            var1.setInt(var2,1);
        }else{
            var1.setInt(var2,0);
        }
    }
    //根据列名获取值
    public  Boolean getNullableResult(ResultSet var1, String var2) throws SQLException{
        int sexNum = var1.getInt(var2);
        if(sexNum == 1)    //从数据库当中获取的值为1时,返回true,反之为false
            return true;
        return false;
    }
    //根据下标获取值
    public Boolean getNullableResult(ResultSet var1, int var2)throws SQLException{
        int sexNum = var1.getInt(var2);
        if(sexNum == 1)
            return true;
        return false;
    }
    //通过存储过程获取
    public Boolean getNullableResult(CallableStatement var1, int var2)throws SQLException{
        int sexNum = var1.getInt(var2);
        if(sexNum == 1)
            return true;
        return false;
    }
}

具体逻辑还是比较容易理解的,get,set方法就是当类型不匹配时进行调用,自己书写代码进行匹配

之后再config.xml文件之中进行配置,javaType表示java当中类型,jdbcType表示jdbc之中的,注意下类型名不要写错了,jdbcType枚举类型查一下都有哪些用的时候

<typeHandlers>
<!--        类型转换器的配置-->
        <typeHandler handler="convert.BooleanAndIntConvert" javaType="Boolean" jdbcType="INTEGER"/>
    </typeHandlers>

至此,就完成了,然后书写代码查询名字为  哈哈  的person,

List<Person> persons = personMapping.selectPersonByName("哈哈哈");

输出如下,可以看到虽然数据库存的是0,但是我们获取到的却是false,这就类型转换器帮我们自动转换了。

"C:\Program Files\Java\jdk-11.0.1\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\lib\idea_rt.jar=56514:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\learn\java\mybatis\out\production\mybatis;C:\迅雷下载\mybatis-3.5.2\mybatis-3.5.2\mybatis-3.5.2.jar;C:\迅雷下载\mysql-connector-java-8.0.16.jar entity.test
id:6
姓名:哈哈哈
爱好:跳舞
性别:false
id:7
姓名:哈哈哈
爱好:跳舞
性别:false

Process finished with exit code 0

接口方法传参类型:

首先区分两种传参的方法:

#{name} :如果传入字符串,会自动加上单引号;可防止sql注入

${name}:传入字符串不加单引号,多用于排序查询,或者一些需要拼接的参数,

在书写mapper文件之中的sql语句时,传参可以传入一个变量,一个对象,一个HashMap对象,前两种没什么说的,看下第三种

mapper文件当中,看到paramType="HashMap",之后sql语句里面直接写变量名就行

<!--    map传值-->
    <select id="selectPersonByNameAndSex" parameterType="HashMap" resultType="person">
        select * from person where `name` = #{name} or `sex` =#{sex}
    </select>

接口文件之中方法声明:

List<Person> selectPersonByNameAndSex(Map<String,Object> map);

具体使用时候,初始一个map对象,然后调用映射方法并传入,注意变量名要一致:

Map<String, Object> personMap = new HashMap<>();
personMap.put("name","温鸿飞");   //设置变量的值和名字
personMap.put("sex", "false");
List<Person> persons = personMapping.selectPersonByNameAndSex(personMap);

原文地址:https://www.cnblogs.com/eenio/p/11317687.html

时间: 2024-10-09 23:23:46

(二)Mybatis类型转换器,接口传参类型,的相关文章

mybatis入门系列三之类型转换器

mybatis入门系列三之类型转换器 类型转换器介绍 mybatis作为一个ORM框架,要求java中的对象与数据库中的表记录应该对应 因此java类名-数据库表名,java类属性名-数据库表字段名,java类属性类型-数据库字段类型 前面两个都容易设置,但是第三点要求经常会出现java类型和数据库的存储类型不一样, 例如java类型是String,数据库中存储的是char.varchar.text 对于一般常见的类型对应,mybatis已经内部包含了类型转换器,使String类型的java属性

JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置

Action接受请求参数 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装 Struts2和MVC定义关系 StrutsPrepareAndExecuteFilter:控制器 在Struts2中action是什么?(Struts2是一个MVC框架) V:jsp M:action C:action StrutsPrepareAndExecuteFilter Struts2提供了三种数据封装

Struts2类型转换(二)-自定义类型转换器

一.自定义类型转换器 1). 为什么需要自定义的类型转换器 ? 因为Struts不能自动完成字符串到引用类型的转换. 2). 如何定义类型转换器? I. 开发类型转换器的类: 扩展 StrutsTypeConverter 类: II. 配置类型转换器. 有两种配置方式 ①. 基于字段的配置: > 在字段所在的 Model(可能是 Action,也可能是一个JavaBean) 的包下, 新建一个 ModelClassName-conversion.properties 文件 > 在该文件中输入键

04.MyBatis别名的设置和类型转换器

别名的设置:(别名不区分大小写): 设置单个别名: <configuration> <properties resource="db.properties" /> <typeAliases> <!-- 设置单个别名 --> <typeAlias type="com.offcn.entity.Person" alias="person"/> <typeAlias type="

Struts 2 类型转换器 输入校验 拦截器

Struts 2中内建了字符串类型和常见类型之间相互转换的转换器,能满足大多数转换需求,但不能完成字符串和User对象之间的转换. OGNL项目中有一个TypeConvert接口,这个接口是自定义类型转换器必须要实现的接口,OGNL还提供了一个实现类: DefaultTypeConverter,自定义类型转换器(UserConverter类)须重写DefaultTypeConverter类的convertValue()方法.该方法可以实现字符串和对象之前相互转换 注册局部类型转换器:注册局部类型

springmvc:自定义类型转换器代码编写

字符串转换日期: 1.自定义一个类 1 /** 2 * 字符串转换日期 3 */ 4 public class StringToDateConverter implements Converter<String, Date> { 5 6 /** 7 * String source 传入进来字符串 8 * @param source 9 * @return 10 */ 11 @Override 12 public Date convert(String source) { 13 //判断 14

14.SpringMVC核心技术-类型转换器

类型转换器 在前面的程序中,表单提交的无论是 int 还是 double 类型的请求参数,用于处理该请求 的处理器方法的形参, 均可直接接收到相应类型的相应数据,而非接收到 String 再手工转换. 那是因为在 SpringMVC 框架中,有默认的类型转换器. 这些默认的类型转换器,可以将 String 类型的数据,自动转换为相应类型的数据 但默认类型转换器并不是可以将用户提交的 String,转换为所有用户需要的类型.此时,就需要自定义类型转换器了. 例如,在 SpringMVC 的默认类型

自定义struts2类型转换器

一.自定义类型转换器 1.编写一个类,继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter 2.覆盖掉其中的public Object convertValue(Map<String, Object> context, Object value,Class toType) context:OGNL表达式的上下文 value:实际的值.用户输入的都是字符串,但他是一个String数组. toType:目标类型 public 

自定义日期类型转换器

(1)首先看一下项目的布局结构: (2)要准备的两个jar包,在lib目录下的,commons-beanutils-1.8.3.jar   commons-logging-1.1.1.jar这两个是必须的  要提前引入,以免不必要的麻烦! 并且下边要注意包的引入 :是在org.apache下的 不是在com.sum.org.apache下的  错误的话 不会成功! (3)全部代码如下:(有注释 这里不再解释) 1.User.java package com.lc.commons; public