报错:
org.mybatis.spring.MyBatisSystemException:
nested exception is org.apache.ibatis.reflection.ReflectionException:
There is no getter for property named ‘user_id’ in ‘class’
也就是搞了两三个小时就搞出来了,轻轻松松。。。。(呜呜呜)
这个是我的测试类:
package test;
import com.peng.pojo.User;
import com.peng.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)//启动spring的容器
@ContextConfiguration(locations = {"classpath*:applicationContext_mapper.xml","classpath*:applicationContext_service.xml"})
public class MyTest {
@Autowired
UserService userService;
@Test
public void testCreateUser(){
User u = new User("371724200112018188","身份证","121451245784","张三","女","26","工人");
int c = userService.createUser(u);
System.out.println(c);
}
}
这是mapper.java接口类
int createUser(User user);
因为上面的测试类中直接创建User对象传入了,所以其它博主在接口中传参数就不需要了,即不需要写成:
int createUser(
@Param("user")
User user);
这个是mapper.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="com.peng.mapper.UserMapper">
<!-- 完成实体类与表中列名的映射
private String userId;
private String cardType;
private String cardNo;
private String userName;
private String userSex;
private String userAge;
private String userRole;-->
<resultMap id="usermap" type="user">
<!-- 此处将实体类与数据库中进行了映射,property是实体类中的变量名-->
<id property="userId" column="user_id"></id>
<result property="cardType" column="card_type"></result>
<result property="cardNo" column="card_no"></result>
<result property="userName" column="user_name"></result>
<result property="userSex" column="user_sex"></result>
<result property="userAge" column="user_age"></result>
<result property="userRole" column="user_role"></result>
</resultMap>
<!-- 定义全部列名-->
<sql id="allColumns">
user_id,card_type,card_no,user_name,user_sex,user_age,user_role
</sql>
<!-- int insert(User user);-->
<!-- #{user_id},#{card_type},#{card_no},#{user_name},#{user_sex},#{user_age},#{user_role}-->
<!-- #{userId},#{cardType},#{cardNo},#{userName},#{userSex},#{userAge},#{userRole}-->
<insert id="createUser" parameterType="user">
insert into user values(#{userId},#{cardType},#{cardNo},#{userName},#{userSex},#{userAge},#{userRole})
</insert>
</mapper>
主要问题就在于
insert into user values(#{userId},#{cardType},#{cardNo},
#{userName},#{userSex},#{userAge},#{userRole})
#{}中的变量名要与实体类中保持一致,不要与数据库中保持一致,但是元素的顺序要与数据库中一一对应,不可改变。(中间我改过但是还是没成功,最后重启了一下成功了,真是个玄学,大家可以重启试一下)
此时就要看上面的
<resultMap id="usermap" type="user">
<!-- 此处将实体类与数据库中进行了映射,property是实体类中的变量-->
<id property="userId" column="user_id"></id>
<result property="cardType" column="card_type"></result>
<result property="cardNo" column="card_no"></result>
<result property="userName" column="user_name"></result>
<result property="userSex" column="user_sex"></result>
<result property="userAge" column="user_age"></result>
<result property="userRole" column="user_role"></result>
</resultMap>
映射是否正确,顺序尽量与数据库一致,不然很容易搞乱。
这是我的解决方法,只能帮大家到这了,祝你成功!