前置准备:
<typeAliases>
<package name="top.nz.pojo"/>
typeAliases>
<mappers>
<mapper class="top.nz.dao.UserMapper" />
<mapper resource="top/nz/dao/UserMapper.xml"/>
mappers>
mapper.xml中的namespace和dao层对应
<mapper namespace="top.nz.dao.UserMapper">
这里基本的配置中需要注意:
// 实体类
public class User implements Serializable {
private int id;
private String name;
private String pwd;
}
public interface UserMapper {
// 查询全部用户
List<User> getUserList();
// 根据ID查询用户
User getUserById(@Param("id") int id);
// 插入一个用户
int addUser(User user);
// 万能的map
// int addUser2(Map map);
// 修改用户
int updateUser(User user);
// 修改用户
int deleteUser(int id);
List<User> getUserLike(String value);
}
<mapper namespace="top.nz.dao.UserMapper">
<select id="getUserList" resultType="top.nz.pojo.User">
select * from mybatis.user;
select>
<select id="getUserById" parameterType="int" resultType="user" >
select * from mybatis.user where id = #{id};
select>
<insert id="addUser" parameterType="user" >
insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
insert>
<update id="updateUser" parameterType="user" >
update mybatis.user set name=#{name},pwd = #{pwd} where id = #{id};
update>
<update id="deleteUser" parameterType="int" >
delete from mybatis.user where id = #{id};
update>
<select id="getUserLike" resultType="user">
select * from mybatis.user where name like #{value}
select>
mapper>
实体类还是User
Dao
// 分页
List<User> getUserByLimit(Map<String,Object> map);
mapper.xml
<select id="getUserByLimit" parameterType="map" resultMap="UserMapper">
select * from mybatis.user limit #{startIndex},#{pageSize};
select>
测试
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Object> map = new HashMap<>();
map.put("startIndex",0);
map.put("pageSize",2);
List<User> userList = mapper.getUserByLimit(map);
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
Dao
// 分页2
List<User> getUserByRowBounds();
mapper.xml
<select id="getUserByRowBounds" resultMap="UserMapper">
select * from mybatis.user;
select>
测试
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 使用RowBounds实现
RowBounds rowBounds = new RowBounds(1,2);
// 通过Java代码实现分页
List<User> userList = sqlSession.selectList("top.nz.dao.UserMapper.getUserByRowBounds",null,rowBounds);
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
Mybatis中的注解开发的适用性太低了,所以基本还是以配置文件为主,这里就罗列Dao层的编写。
public interface UserMapper {
@Select("select * from user")
List<User> getUsers();
// 通过id查询
// 方法存在多个参数,所有的参数前面都需要加@Param注解
// #{id}取的参数为@Param中声明的。
@Select("select * from user where id = #{id} and name = #{name}")
User getUserById(@Param("id") int id,@Param("name") String name);
@Insert("insert into user (id,name,pwd)values(#{id},#{name},#{password})")
int addUser(User user);
@Update("update user set name=#{name},pwd=#{password} where id=#{id}")
int updateUser(User user);
@Delete("delete from user where id = #{id}")
int deleteUser(@Param("id") int id);
}
描述:一个学生有一个地址信息,学生表中的具体地址信息在地址表中,以外键约束。
实体类设计
public class Student {
private int id;
private String identid;
private String name;
private Adress ad;
public class Adress {
private int id;
private String location;
mapper.xml
<select id="getStudent" parameterType="int" resultMap="getStudentMap">
select * from student s,adress ad where s.id=ad.id and s.id=#{id}
select>
<resultMap type="Student" id="getStudentMap">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="identid" column="identid" />
<association property="ad" javaType="NjjAdress">
<id property="id" column="id" />
<result property="location" column="location" />
association>
resultMap>
描述:一种类型的课程下有多门课程,课程类型和课程形成一对多
实体类设计
课程类型
public class SubjectType {
private int id;
private String name;
private List<Subject> sub;
}
课程
public class Subject {
private int id;
private String subjectName;
private SubjectType st;
}
mapper配置
<select id="getSubjectType" parameterType="int" resultMap="getSubjectTypeMap">
select
sjt.id tid,
sjt.name tname,
s.*
from subjecttype sjt,subject s
where sjt.id=s.typeId
and sjt.id=#{id}
select>
<resultMap type="SubjectType" id="getSubjectTypeMap">
<id property="id" column="tid" />
<result property="name" column="tname" />
<collection property="sub" ofType="Subject">
<id property="id" column="id" />
<result property="subjectName" column="subjectName" />
collection>
resultMap>
案例二
描述:以一趟具体的课程而言,一个老师管理多名学生
实体类设计
学生
public class Student {
private int id;
private String name;
// 学生需要关联一个老师
private int tid;
}
老师
public class Teacher {
private int id;
private String name;
private List<Student> students;
}
Dao
// 获取指定老师下的所有学生(结果映射)
Teacher getTeacher(@Param("tid") int id);
mapper.xml
<select id="getTeacher" parameterType="_int" resultMap="TeacherStudents">
select t.id tid,t.name tname,s.id sid,s.name sname
from teacher t,student s
where s.tid = t.id and t.id = #{tid};
select>
<resultMap id="TeacherStudents" type="Teacher">
<result column="tid" property="id" />
<result column="tname" property="name" />
<collection property="students" ofType="Student">
<result column="sid" property="id" />
<result column="sname" property="name" />
<result column="tid" property="tid" />
collection>
resultMap>
Teacher(id=1, name=倪老师, students=[Student(id=1, name=小明, tid=1), Student(id=2, name=小红, tid=1), Student(id=3, name=小张, tid=1), Student(id=4, name=小李, tid=1), Student(id=5, name=小王, tid=1)])
描述:以一趟具体的课程而言,多个学生对一个老师。
实体类设计
学生
public class Student {
private int id;
private String name;
// 学生需要关联一个老师
private Teacher teacher;
}
老师
public class Teacher {
private int id;
private String name;
}
Dao
public List<Student> getStudents();
mapper.xml
<select id="getStudents" resultMap="StudentTeacher">
select s.id id,s.name,t.id tid,t.name tname
from student s,teacher t
where s.tid = t.id;
select>
<resultMap id="StudentTeacher" type="Student">
<result property="id" column="id" />
<result property="name" column="name" />
<association property="teacher" javaType="Teacher" >
<result property="id" column="tid"/>
<result property="name" column="tname"/>
association>
resultMap>
Student(id=1, name=小明, teacher=Teacher(id=1, name=倪老师))
Student(id=2, name=小红, teacher=Teacher(id=1, name=倪老师))
Student(id=3, name=小张, teacher=Teacher(id=1, name=倪老师))
Student(id=4, name=小李, teacher=Teacher(id=1, name=倪老师))
Student(id=5, name=小王, teacher=Teacher(id=1, name=倪老师))