单表的增删改查
1.结果映射resultMap
对数据的查询会用到结果映射,对数据的增删该则无需用到结果映射。
所谓的结果映射集就是将sql数据表的列名(column)与java实体类的属性名称(property)进行关联匹配的一种机制。
若sql数据库的sql数据表的列名(column)与java实体类的属性名称(property)未正确匹配的话。那么相应的查询结果将为空。
应用实例:利用结果映射查询全部学生
在第一个mybaitis项目中其结果映射(sql字段----->java实体类)是通过在sql语句中使用别名来达到结果映射的目的
图片
关键代码(在映射文件StudentMapepr.xml添加以下代码)
<mapper namespace="com.lifeng.dao.IStudentDao">
<!-- 配置结果映射 -->
<resultMap id="studentResultMap" type="Student">
<id property="sid" column="id"/>
<result property="sname" column="studentname"/>
<result property="sex" column="gender"/>
<result property="age" column="age"/>
</resultMap>
<!-- 在sql查询语句中使用结果映射 -->
<select id="findAllstudents" resultMap="studentResultMap">
select id,studentname,gender,age from student
</select>
</mapper>
<!--
a.
标签<mapper namespace="...">中的namespace,定位到唯一的mapper文件
(namespace的值:即对应dao层的接口)
b.
标签<resultMap id="..." type="...">的意思是把sql查询结果映射为student对象
(id的值:即为该结果映射集命名,type的值:即数据表列名对应的实体类)
c.
标签<select id="..." resultMap="...">中的id,定位到这个mapper映射文件指定的sql语句
(id的值:即对应dao层接口的方法,resultMap的值:即对应配置结果映射集中id值)
-->
2.使用selectOne方法查询单个学生
关键代码(在dao层的接口和实现类添加findStudentById(int id)方法,在映射文件StudentMapepr.xml添加以下代码)
<mapper namespace="com.lifeng.dao.IStudentDao">
<!-- 配置结果映射 -->
<resultMap id="studentResultMap" type="Student">
<id property="sid" column="id"/>
<result property="sname" column="studentname"/>
<result property="sex" column="gender"/>
<result property="age" column="age"/>
</resultMap>
<!-- 调用dao层的findStudentById(int id)方法,且使用已配置好的结果映射 -->
<select id="findStudentById" parameterType="int" resultMap="studentResultMap">
select * from student where id=#{id}
</select>
</mapper>
<!--
a.
parameterType="int"也可不加,mybatis会自动判断传进来的参数类型。
#{id}:对指定参数类型使用,因为其值需要从dao层的findStudentById(int id)方法中传递过来
b.
session.selectList():适用于查询结果集是多条的请况
c.
session.selectOne():适用于查询结果集是单条的情况
-->
3.使用insert方法添加记录
关键代码(在dao层的接口和实现类添加insertStudent(Student student)方法,在映射文件StudentMapepr.xml添加以下代码)
<mapper namespace="com.lifeng.dao.IStudentDao">
<!-- 调用dao层的insertStudent(Student student)方法 -->
<insert id="insertStudent" parameterType="Student">
insert into student(id, studentname, gender, age)
values
(#{sid}, #{sname}, #{sex}, #{age})
</insert>
</mapper>
<!--
a.
parameterType="Student"也可不加,mybatis会自动判断传进来的参数类型。
b.
在调用session.insert()方法后还要提交事务,即使用session.commit()方法来实现
-->
4.使用delete方法修改记录
关键代码(在dao层的接口和实现类添加deleteStudentById(int id)方法,在映射文件StudentMapepr.xml添加以下代码)
<mapper namespace="com.lifeng.dao.IStudentDao">
<!-- 调用dao层的deleteStudentById(int id)方法 -->
<delete id="deleteStudentById" parameterType="int">
delete from student where id=#{id}
</delete>
</mapper>
5.使用update方法修改记录
关键代码(在dao层的接口和实现类添加updateStudent(Student student)方法,在映射文件StudentMapepr.xml添加以下代码)
<mapper namespace="com.lifeng.dao.IStudentDao"
<!-- 调用dao层的updateStudent(Student student)方法 -->
<update id="updateStudent" parameterType="Student">
update student set studentname=#{sname},gender=#{sex},age=#{age} where id=#{sid}
</update>
</mapper>
6.按姓氏模糊查询学生
关键代码(在dao层的接口和实现类添加findStudentByName(String name)方法,在映射文件StudentMapepr.xml添加以下代码)
<mapper namespace="com.lifeng.dao.IStudentDao">
<!-- 配置结果映射 -->
<resultMap id="studentResultMap" type="Student">
<id property="sid" column="id"/>
<result property="sname" column="studentname"/>
<result property="sex" column="gender"/>
<result property="id" column="id"/>
</resultMap>
<!-- 按姓氏模糊查询学生,且使用已配置好的结果映射 -->
<select id="findStudentByName" parameterType="String" resultMap="studentResultMap">
select * from student where studentname like '%' #{sname} '%'
</select>
</mapper>