1、命名规范
修改后的studentMapper.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" >
<!--namespace命名空间 需要跟Mapper接口文件位置相同-->
<mapper namespace="com.yang.mapper.StudentMapper">
<!--规范命名方式-->
<!--resultMap标签中 id为这个resultMap的名字,type为对应的实体类-->
<resultMap id="studentResultMap" type="Students">
<!--resultMap中的id对应的是表中的主键,property为java代码中的规范的名字,column为表中对应的字段名-->
<id property="stuId" column="stu_id"></id>
<!--result代表表中普通的字段,property为java代码中的规范的名字,column为表中对应的字段名-->
<result property="stuName" column="stu_name"></result>
<result property="stuAge" column="stu_age"></result>
<result property="stuSex" column="stu_sex"></result>
<result property="teaId" column="tea_id"></result>
<result property="isDel" column="is_del"></result>
</resultMap>
<!--resultType返回值类型,查询的是所有学生,所以返回学生对象,mybatis自动封装到集合中-->
<!--原来是resultType,后来规范代码后,将resultType换成resultMap,引号里是上边resultMap的id名-->
<select id="queryAll" resultMap="studentResultMap">
select * from students
</select>
<!--根据id查询学生信息-->
<!--parameterType为接受的数据类型(传过来的参数类型),这里可以为stu_id,
但为了体现面向对象编程思想,所以用对象(实体类)作为传过来的参数类型,
通过对象(set方法)得到其中某个字段的值(#{stu_id})-->
<!--resultType返回值类型,将值返回给studentMapper.xml中根据id对应的方法,
然后测试类就可以调用到这个返回值-->
<select id="queryById" resultMap="studentResultMap" parameterType="Students">
select * from students where stu_id = #{stuId} and is_del = 0
</select>
<!--根据id物理删除某条数据-->
<update id="deleteById" parameterType="Students">
update students set is_del = 1 where stu_id = #{stuId}
</update>
<!--增加一条数据-->
<insert id="insert" parameterType="Students">
insert into students (stu_name,stu_age,stu_sex,tea_id,is_del) values (#{stuName},#{stuAge},#{stuSex},#{teaId},0)
</insert>
<!--根据id物理删除一条数据-->
<delete id="realDeleteById" parameterType="Students">
delete from students where stu_id = #{stuId}
</delete>
</mapper>
2、两表联查(一对多关系)一个老师对应多个学生
1)因为查询老师和学生两个表,所以新建老师这个实体类
代码:
package com.yang.bean;
import java.util.List;
public class Teachers {
private Integer teaId;
private String teaName;
private String teaSubject;
private Integer teaClass;
//一个老师教多个学生
private List<Students> studentsList;
public Integer getTeaId() {
return teaId;
}
public void setTeaId(Integer teaId) {
this.teaId = teaId;
}
public String getTeaName() {
return teaName;
}
public void setTeaName(String teaName) {
this.teaName = teaName;
}
public String getTeaSubject() {
return teaSubject;
}
public void setTeaSubject(String teaSubject) {
this.teaSubject = teaSubject;
}
public Integer getTeaClass() {
return teaClass;
}
public void setTeaClass(Integer teaClass) {
this.teaClass = teaClass;
}
public List<Students> getStudentsList() {
return studentsList;
}
public void setStudentsList(List<Students> studentsList) {
this.studentsList = studentsList;
}
@Override
public String toString() {
return "Teachers{" +
"teaId=" + teaId +
", teaName='" + teaName + '\'' +
", teaSubject='" + teaSubject + '\'' +
", taeClass=" + teaClass +
", studentsList=" + studentsList +
'}';
}
}
规范后的学生类代码
package com.yang.bean;
public class Students {
private Integer stuId;
private String StuName;
private Integer stuAge;
private Integer stuSex;
private Integer teaId;
private Integer isDel;
public Integer getStuId() {
return stuId;
}
public void setStuId(Integer stuId) {
this.stuId = stuId;
}
public String getStuName() {
return StuName;
}
public void setStuName(String stuName) {
StuName = stuName;
}
public Integer getStuAge() {
return stuAge;
}
public void setStuAge(Integer stuAge) {
this.stuAge = stuAge;
}
public Integer getStuSex() {
return stuSex;
}
public void setStuSex(Integer stuSex) {
this.stuSex = stuSex;
}
public Integer getTeaId() {
return teaId;
}
public void setTeaId(Integer teaId) {
this.teaId = teaId;
}
public Integer getIsDel() {
return isDel;
}
public void setIsDel(Integer isDel) {
this.isDel = isDel;
}
@Override
public String toString() {
return "Students{" +
"stuId=" + stuId +
", StuName='" + StuName + '\'' +
", stuAge=" + stuAge +
", stuSex=" + stuSex +
", teaId=" + teaId +
", isDel=" + isDel +
'}';
}
}
2)新建TeacherMapper接口(方便修改,所以在有StudentMapper基础上再建一个),定义查询方法
代码:
package com.yang.mapper;
import com.yang.bean.Teachers;
import java.util.List;
public interface TeacherMapper {
public List<Teachers> queryTeachers();
}
3)在resource-mybatis中新建teacherMapper.xml对应TeacherMapper接口
代码:
<?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" >
<!--namespace命名空间 需要跟Mapper接口文件位置相同-->
<mapper namespace="com.yang.mapper.TeacherMapper">
<resultMap id="teacherResultMap" type="Teachers">
<id property="teaId" column="tea_id"></id>
<result property="teaName" column="tea_name"></result>
<result property="teaSubject" column="tea_subject"></result>
<result property="teaClass" column="tea_class"></result>
<!--老师里面的学生集合用collection来定义,通过这个设置就可以实现一对多-->
<!--集合 property属性名 javaType写类型(集合类型) ofType写泛型-->
<collection property="studentsList" javaType="java.util.List" ofType="Students">
<id property="stuId" column="stu_id"></id>
<result property="stuName" column="stu_name"></result>
<result property="stuAge" column="stu_age"></result>
<result property="stuSex" column="stu_sex"></result>
<result property="teaId" column="tea_id"></result>
<result property="isDel" column="is_del"></result>
</collection>
</resultMap>
<select id="queryTeachers" resultMap="teacherResultMap">
select * from students s left join teacher t on s.tea_id = t.tea_id
</select>
</mapper>
4)不要忘记在mybatis-config.xml中添加mapper
5)写测试类
代码:
import com.yang.bean.Teachers;
import com.yang.mapper.StudentMapper;
import com.yang.mapper.TeacherMapper;
import com.yang.utils.DBUtils;
import org.apache.ibatis.session.SqlSession;
import java.util.Arrays;
import java.util.List;
public class TestTableLianCha {
public static void main(String[] args) {
/*调用DBUtils中的getSqlSession()方法*/
SqlSession sqlSession = DBUtils.getSqlSession();
/*通过.class的方式调用接口*/
TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class);
List<Teachers> teachersList = teacherMapper.queryTeachers();
for (Teachers t:teachersList) {
System.out.println(t);
}
}
}