项目工程沿用上一次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可以用于对数据入库、查询结果做一些特殊转换处理,如日期格式转化、枚举转化、数据类型、转化等。