springboot学习二之之定义typeHandler

项目工程沿用上一次springboot学习一的工程。添加新的测试方法。
Controller

 @PostMapping("/add")
    public String addUser(@RequestBody User user){
        String msg = testService.addUser(user);
        return msg;
    }

Service

  @Override
    public String addUser(User user) {

        int count = testDao.insertUser(user);
        if (count > 0) {
            return "success !";
        } else {
            return "fail !";
        }
    }

Dao


public interface ITestDao {
    int count();

    int insertUser(User user);
}

Mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.architecture.dao.ITestDao">

    <select id="count" resultType="int">
        select count(1) from user
    </select>

    <insert id="insertUser" parameterType="com.example.architecture.pojo.User">
        insert into user(name,password,remark)
             values  (#{name},
                      #{password},
                      #{remark}
                      )
    </insert>
</mapper>

测试插入一条数据:
在这里插入图片描述

查看数据库记录
在这里插入图片描述
现在我们自定义也TypeHandler,继承BaseTypeHandler,或者实现TypeHandler。对入库的remark字段做特殊修改。这里我们对remark加个‘吗?’后缀

@MappedJdbcTypes(JdbcType.VARCHAR)
public class ConverHandler extends BaseTypeHandler<String> {

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {
        preparedStatement.setString(i,s+"吗?");
    }

    @Override
    public String getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return null;
    }

    @Override
    public String getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return null;
    }

    @Override
    public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return null;
    }
}

在数据源上注册自定义的typeHandler,如果是spring自动化管理数据源,spring不会自动管理typeHandler的注册。
在这里插入图片描述
在需要处理的SQL的特定字段添加typeHandler,这里是remark字段。注意这里的全路径名不用加引号,如果typeHandler注册在resultMap中需要加引号

    <insert id="insertUser" parameterType="com.example.architecture.pojo.User">
        insert into user(name,password,remark)
             values  (#{name},
                      #{password},
                      #{remark,typeHandler=com.example.architecture.handler.ConverHandler}
                      )
    </insert>

再次测试,查看数据看记录,发现插入数据库的记录是我们处理后的记录了。
在这里插入图片描述
小结:
typehandler可以用于对数据入库、查询结果做一些特殊转换处理,如日期格式转化、枚举转化、数据类型、转化等。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一款开源的Java开发框架,可以简化Spring应用程序的开发过程。MyBatis Plus是在MyBatis框架基础上的增强版本,为开发者提供了更便捷的CRUD操作接口和其他实用功能。PostgreSQL是一种开源的关系型数据库管理系统。 在Spring Boot项目中使用MyBatis Plus框架,可以通过添加相应的依赖和配置,快速集成MyBatis Plus。对于PostgreSQL数据库的支持,可以通过引入PostgreSQL的JDBC驱动来实现。 在使用MyBatis Plus与PostgreSQL时,可能会遇到类型转换的问题。例如,某些特定的数据类型在Java和PostgreSQL之间存在差异,需要通过类型处理器(TypeHandler)进行转换。 TypeHandler在MyBatis Plus中是用于处理Java对象与数据库列之间的类型转换的组件。当在实体类中定义了需要特殊处理的属性时,可以通过自定义TypeHandler来实现转换逻辑。在处理与PostgreSQL相关的类型时,可以使用MyBatis Plus提供的内置TypeHandler或自定义TypeHandler。 自定义TypeHandler通常需要实现TypeHandler接口,并指定Java对象与数据库类型的映射关系。在转换过程中,可以使用PostgreSQL JDBC驱动提供的各种方法来处理特定类型的转换逻辑。 在Spring Boot中配置TypeHandler通常需要在MyBatis的配置文件或配置类中进行相关配置。通过指定要使用的TypeHandler和映射关系,可以实现Java对象与PostgreSQL类型的正确转换。 总之,使用Spring Boot、MyBatis Plus和PostgreSQL可以快速构建Java应用程序,并通过TypeHandler来处理类型转换问题,实现Java对象与PostgreSQL数据库之间的无缝集成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值