一、新增
1、插入一条数据
第一步:在StudentMapper中定义insertStudent(Student student)方法
第二步:在StudentMapper.xml中对接口进行“实现”
第三步:在StudentMapperTest测试类中添加测试方法
2、添加数据时获得自增的主键
业务场景:当我们插入一条记录,并需要将插入成功的记录信息传递给后面的操作时,则需要考虑返回插入成功记录的主键。
实例:插入一条学生记录并获取其主键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()方法获得。
二、 删除
1 、删除一条数据
第一步:在StudentMapper中定义deleteStudent(String stuNum)方法
public int deleteStudent(String stuNum);
第二步:在StudentMapper.xml中对接口方法进行“实现
<delete id="deleteStudent">
delete from student where s_num = #{stuNum};
</delete>
三、 修改
例:根据学生学号,修改其他字段信息
第一步:在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的测试类中添加测试方法
四、查询
1、查询一个实体类对象
例:根据学生学号,查询一条学生信息
第一步:在StudentMapper中定义queryStudentByNum(String stuNum)方法
public Student queryStudentByNum(String stuNum);
第二步:在StudentMapper.xml中对接口方法进行“实现”
第三步:在StudentMapperTest的测试类中添加测试方法
报错!
原因:当实体使用有参构造函数时,会遍历有参构造参数个数,根据有参构造参数下标查找相应的数据库字段名称,根据有参构造字段类型以及数据库字段名称找类型处理器。然后使用TypeHandler来处理JavaType 与 JdbcType 之间的转换。当转换异常,就会报上述错误。
分析:在实体类Student中编写了有参构造器,其中未写字段stuId,但在StudentMapper.xml中的查询操作需要查询sid,此时在解析时出现异常,导致报错。
解决方案:1)增加无参构造器
在Student.java实体类中增加:
public Student() {
}
2)删除StudentMapper.xml中查询的数据库字段sid,保证mapper.xml中查询的数据库 字段属性的类型要和有参构造器的字段类型一一匹配;查询字段的个数要和有参构 造器个数一样
修改StudentMapper.xml中的查询方法,删除查询字段sid
2、 查询List集合
例:查询所有学生记录
第一步:在StudentMapper中定义queryStudentByList()方法
public List<Student> queryStudentByList();
第二步:在StudentMapper.xml中对接口方法进行“实现”
<select id="queryStudentByList" resultType="Student">
select sid stuId, s_num stuNum,s_name stuName,s_gender stuGender,s_age stuAge from student;
</select>
第三步:在StudentMapperTest的测试类中添加测试方法
3、查询单个数据
例:查询学生总人数
第一步:在StudentMapper中定义queryStuCount()方法
public int queryStuCount();
第二步:在StudentMapper.xml中对接口方法进行“实现”
<!--_integer为int的别名 -->
<select id="queryStuCount" resultType="_integer">
select count(sid) from student;
</select>
第三步:在StudentMapperTest的测试类中添加测试方法