一、新增
01、插入一条数据
第一步:在StudentMapper中定义insertStudent(Student student)方法
第二步:在StudentMapper.xml中对接口进行“实现”
第三步:在StudentMapperTest测试类中添加测试方法
02、添加数据时获得自增的主键
业务场景:当我们插入一条记录,并需要将插入成功的记录信息传递给后面的操作时,则需要考虑返回插入成功记录的主键。
实例:插入一条学生记录并获取其主键id
第一步:修改StudentMapper.xml,将insert标签增加useGeneratedKeys 和keyProperty属性
<!-- useGeneratedKeys 设置添加操作是否需要回填生成的主键 -->
<!-- keyProperty 设置回填的主键值赋值到参数对象的哪个属性 -->
<insert id="insertStudent" useGeneratedKeys="true" keyProperty="stuId">
insert into student(s_num,s_name,s_gender,s_age)
values(#{stuNum},#{stuName},#{stuGender},#{stuAge})
</insert>
第二步:修改StudentMapperTest.java,当添加数据成功时,id自动回填至对象Student的属性stuId中。我们可通过getter()方法获得。
二、删除
01、删除一条数据
第一步:在StudentMapper中定义deleteStudent(String stuNum)方法
public int deleteStudent(String stuNum);
第二步:在StudentMapper.xml中对接口方法进行“实现”
<delete id="deleteStudent">
delete from student where s_num = #{stuNum};
</delete>
第三步:在StudentMapperTest的测试类中添加测试方法
三、修改
01、修改一条数据
根据学生学号,修改其他字段信息
第一步:在StudentMapper中定义updateStudent(Student student)方法
public int updateStudent(Student student);
第二步:在StudentMapper.xml中对接口方法进行“实现”
<update id="updateStudent">
update student set
s_name = #{stuName},
s_gender = #{stuGender},
s_age = #{stuAge}
where s_num = #{stuNum}
</update>
第三步:在StudentMapperTest的测试类中添加测试方法
02、增删改常用属性
四、查询
01、查询一个实体类对象
根据学生学号,查询一条学生信息
第一步:在StudentMapper中定义queryStudentByNum(String stuNum)方法
public Student queryStudentByNum(String stuNum);
第二步:在StudentMapper.xml中对接口方法进行“实现”
第三步:在StudentMapperTest的测试类中添加测试方法
报错!
Cannot determine value type from string 'xxx'
原因:当实体使用有参构造函数时,会遍历有参构造参数个数,根据有参构造参数下标查找相应的数据库字段名称,根据有参构造字段类型以及数据库字段名称找类型处理器。然后使用TypeHandler来处理JavaType 与 JdbcType 之间的转换。当转换异常,就会报上述错误。
分析:在实体类Student中编写了有参构造器,其中未写字段stuId,但在StudentMapper.xml中的查询操作需要查询sid,此时在解析时出现异常,导致报错。
解决方案:1)增加无参构造器
2)删除StudentMapper.xml中查询的数据库字段sid,保证mapper.xml中查询的数据库字段属性的类型要和有参构造器的字段类型一一匹配;查询字段的个数要和有参构造器个数一样