发布:2022/3/9 14:25:16作者:管理员 来源:本站 浏览次数:1580
前置准备:
<!--可以给实体类取别名-->
<!--<typeAliases>-->
<!-- <typeAlias type="top.nz.pojo.User" alias="User"/>-->
<!--</typeAliases>-->
<!--扫描包,别名建议使用小写,大写也能跑。可以通过注解给类取别名@Alias("user")-->
<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<String,Object> map);
// 修改用户
int updateUser(User user);
// 修改用户
int deleteUser(int id);
List<User> getUserLike(String value);
}
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="top.nz.dao.UserMapper">
<!--查询所有用户-->
<select id="getUserList" resultType="top.nz.pojo.User">
select * from mybatis.user;
</select>
<!--根据ID查询用户-->
<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>
<!-- <insert id="addUser2" parameterType="map" >
insert into mybatis.user (id,name,pwd) values (#{userid},#{userName},#{passWord});
</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
<!-- 以学生id查询学生全部信息 -->
<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配置
<!-- 加载数据(方式1) -->
<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 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 = #{id};-->
<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" />
<!--复杂类型我们需要单独处理,对象:association 集合:collection
javaType:指定属性的类型
集合的泛型信息:我们使用ofType
-->
<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
<!--===========================================-->
<!--
思路二、按照结果嵌套处理
首先查出所有的结果
将结果映射给Teacher
-->
<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=倪老师))
© Copyright 2014 - 2025 柏港建站平台 ejk5.com. 渝ICP备16000791号-4