java - Spring和MyBatis中语句的参数group_id没有找到TypeHandler

标签 java spring mybatis spring-mybatis

我正在使用 MyBatis 和 Spring,我有 2 个表:User 和 GroupMaster 表。我想通过 insert() 方法将数据插入数据库,如下所示:

用户类别:

public class User {     
    private Long user_id;   
    private GroupMaster group_id;
    private String login_name;
    private String password;
    private String full_name;
    private String full_name_kana;
    private String email;
    private String tel;
    private Date birthday;
    // getter and setter
}

群主类(class):

public class GroupMaster {  
   private Long group_id;
   private String group_name;
   // getter and setter
 }

UserMapper.java

public interface UserMapper {
@Insert("INSERT INTO users(group_id, login_name, password, full_name,"
        + "full_name_kana, birthday, email, tel, rule, salt) VALUES"
        + "(#{group_id}, #{login_name},#{password}, #{full_name}, #{full_name_kana},"
        + "#{birthday}, #{email}, #{tel}, #{rule}, #{salt})")
@Options(useGeneratedKeys=true, keyProperty="id", flushCache=true, keyColumn="id")
public void insertUser(User user);
}
...

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

   <mapper namespace="net.project.springmybatis.mappers.UserMapper">
   <resultMap id="userMap" type="User">
    <id property="user_id" column="user_id"/>
    <result property="login_name" column="login_name"/>
    <result property="full_name" column="full_name"/>
    <result property="full_name_kana" column="full_name_kana"/>     
    <result property="birthday" column="birthday"/>
    <result property="email" column="email"/>
    <result property="tel" column="tel"/>

    <association property="group_id" javaType="GroupMaster">
        <id property="group_id" column="group_id"/>
        <result property="group_name" column="group_name"/>
    </association>

    <association property="detail_user_japan_id" javaType="DetailUserJapan">
        <id property="detail_user_japan_id" column="detail_user_japan_id"/>
        <result property="user_id" column="user_id"/>
        <result property="code_level" column="code_level"/>
        <result property="start_date" column="start_date"/>
        <result property="end_date" column="end_date"/>
        <result property="total" column="total"/>
    </association>


    <association property="code_level" javaType="JapanMaster">
        <id property="code_level" column="code_level"/>
        <result property="name_level" column="name_level"/>
    </association>


</resultMap>

add_user.jsp:

<tr>
    <td>group name</td>
    <td>                    
        <select name="groupSelected">
        <c:forEach items="${groupMasterList}" var="groupMaster">
            <option value="${groupMaster.group_id}">${groupMaster.group_name}</option>
        </c:forEach>
        </select>
     </td>
 </tr>

当我部署时,发生以下问题和异常:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: There was no TypeHandler found for parameter group_id of statement net.project.springmybatis.mappers.UserMapper.insertUser
org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:365)
com.sun.proxy.$Proxy14.insert(Unknown Source)
org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:237)
org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:79)
org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:40)
com.sun.proxy.$Proxy20.insertUser(Unknown Source)
net.luvina.springmybatis.service.UserServiceImpl.insertUser(UserServiceImpl.java:31)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)

在JSP文件中,我有一个带有选择框的表单要插入,当我提交它时出现问题。 如何解决问题

更新:

Controller 类:

@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public String submitAddNewUser(HttpServletRequest request, HttpServletResponse response,
        @RequestParam("groupSelected") Integer groupSelected,
        // @RequestParam("detailUserJapanSelected") Integer detailUserJapanSelected, 
        @RequestParam("japanMasterSelected") Integer japanMasterSelected, 

        @ModelAttribute("createUser") User createUser,  ModelMap model) throws SQLException, IOException {

    GroupMaster myGroupMaster = userService.getGroupById(groupSelected);
    // DetailUserJapan myDetailUserJapan = userService.getDetailUserJapanById(detailUserJapanSelected);
    JapanMaster myJapanMaster = userService.getJapanMasterById(japanMasterSelected);
    // tao lan luot cho cac ham con lai

    createUser.setGroup_id(myGroupMaster);
    // createUser.setDetail_user_japan_id(myDetailUserJapan);
    createUser.setCode_level(myJapanMaster);

    // model.addAttribute("user", user);
    userService.insertUser(createUser);

    return "redirect:/";
}

add_user.jsp

<tr>
    <td>資格: (name level | mst_japan)</td>
    <td>                     
        <select name="japanMasterSelected">
            <c:forEach items="${japanMasterList}" var="japanMaster">
                <option value="${japanMaster.code_level}">${japanMaster.name_level}</option>
                        </c:forEach>
                    </select>                           
                </td>
            </tr>

当我在 mst_japan 中添加更多内容时:code_level 时,会发生错误 404,如下所示: 错误404:

HTTP Status 400 – Bad Request
Type Status Report

Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

最佳答案

group_id的类型为GroupMasteruser.group_id列的数据类型为INT。< br/> 该错误表明 MyBatis 不知道如何将 GroupMaster 转换为 INT

要解决该错误,您只需将 #{group_id} 更改为 #{group_id.group_id}

@Insert("INSERT INTO users(group_id, login_name, password, full_name,"
        + "full_name_kana, birthday, email, tel, rule, salt) VALUES"
        + "(#{group_id.group_id}, #{login_name},#{password}, #{full_name}, #{full_name_kana},"
        + "#{birthday}, #{email}, #{tel}, #{rule}, #{salt})")

您似乎对 MyBatis 很陌生,所以我建议您花一些时间阅读文档。
https://mybatis.org/mybatis-3/index.html

我还建议使用更新版本的 MyBatis。
如果无法升级到 Java 8+,3.4.6 支持 Java 7。

关于java - Spring和MyBatis中语句的参数group_id没有找到TypeHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58511007/

相关文章:

java - 序列化 cglib 创建的代理对象

java - 如何知道已经建立的连接的状态?

java - 无法使用 YAML Spring Profile 禁用 @Cacheable

java - 在运行时覆盖 `spring.cloud.config.profile`

java - MyBatis 3.1.1,如何直接执行自定义SQL代码

java - 使用 MyBatis 映射输入和输出参数

java - FragmentTransaction 动画 - 在退出 fragment 上方显示进入 fragment

java - 子类型 "promise"如何调用更具体类型的回调?

java - 以斜杠结尾的 Spring 4 路径参数

java - 关于double和bigdecimal的精度问题