Mybatis的sql映射
添加:
boolean addUser(User user);
insert into Users(uname,upass) values(#{uname},#{upass}) 删除:boolean deleteUserById(Integer uid);
delete from Users where id = #{uid} 修改:boolean update(Map<String,String> map);
update Users set uname = #{uname} where uid=#{uid} 查询:List selectUserById(Integer uid);
select * from Users where uid = #{uid} 参数详解 映射语句常用属性:属性 描述
id 在命名空间中唯一的标识符,可以被用来引用这条语句。
parameterType 将会传入这条语句的参数的类全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数。
resultType 期望从这条语句中返回结果的类全限定名或别名。 注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能同时使用一个。
resultMap 对外部 resultMap 的命名引用。结果映射是 MyBatis 最强大的特性,resultType 和 resultMap 之间只能同时使用一个。
传递参数:使用占位符#{}
一个参数:使用#{value}接收。
同一对象的多个属性:封装成对象传入,使用#{属性名}接收。
多个参数:封装成Map集合传入,使用#{key}接收。
字符串替换:使用${value}替换字符串的一部分内容,可用作模糊匹配。
使用场景:
数据表字段与其对应的 JavaBean 类属性名不相同时,无法自动匹配。
查询结果集结构较为复杂,如查询用户信息及其所有订单集合。
例子
使用场景一:数据库表中字段名和pojo类的属性名不一致
//数据库 Users 包含字段 uid、uname、upass
//pojo类的属性为:uid uname password
List selectUserById(Integer uid);
结果为:
Users(uid=1, uname=zhangwuji, password=null)
Users(uid=2, uname=zhaomin, password=null)
Users(uid=3, uname=zhouzhiruo, password=null)
Users(uid=4, uname=xiaozhao, password=null)
将mapper.xml的语句改为
<select id="queryUsers" resultMap="UsersMap">
select * from users
</select>
<resultMap id="UsersMap" type="Users">
<result property="uid" column="uid"/>
<result property="uname" column="uname"/>
<result property="password" column="upass"/>
</resultMap>
结果为:
Users(uid=1, uname=zhangwuji, password=123456)
Users(uid=2, uname=zhaomin, password=123456)
Users(uid=3, uname=zhouzhiruo, password=123456)
Users(uid=4, uname=xiaozhao, password=123456)
使用场景二:一对多
建表并赋值
CREATE TABLE student
(
sid
INT NOT NULL AUTO_INCREMENT COMMENT ‘学生id’,
sname
VARCHAR(30) NOT NULL COMMENT ‘学生姓名’,
sage
VARCHAR(30) NOT NULL COMMENT ‘学生年龄’,
tid
INT NOT NULL COMMENT ‘老师id’,
PRIMARY KEY(sid
)
)ENGINE = INNODB DEFAULT CHARSET = utf8;
CREATE TABLE teacher
(
tid
INT NOT NULL AUTO_INCREMENT COMMENT ‘老师id’,
tname
VARCHAR(30) NOT NULL COMMENT ‘老师姓名’,
PRIMARY KEY(tid
)
)ENGINE = INNODB DEFAULT CHARSET = utf8;
INSERT INTO teacher (tname) VALUES
(“王老师”),
(“李老师”),
(“刘老师”);
INSERT INTO student (sname,sage,tid) VALUES
(‘诸葛亮’,‘18’,1),
(‘李白’,‘18’,1),
(‘花木兰’,‘18’,1),
(‘妲己’,‘18’,2),
(‘貂蝉’,‘18’,2),
(‘小乔’,‘18’,2),
(‘鲁班’,‘18’,3),
(‘后裔’,‘18’,3),
(‘伽罗’,‘18’,3);
创建pojo类
Student.class
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Student {
private String sname;
private String age;
}
Teacher.class
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Teacher {
private int tid;
private String tname;
private ArrayList list;
}
创建TeacherDao接口
public interface TeacherDao {
ArrayList<Teacher> getTeacher(@Param("tid") int tid);
}
然后创建mapper.xml
Teacher(tid=1, tname=王老师, list=[Student(sname=诸葛亮, sage=18),
Student(sname=李白, sage=18),
Student(sname=花木兰, sage=18)])
使用场景三:多对一
创建pojo
teacher.class
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
@Setter
public class Teacher {
private int tid;
private String tname;
}
student.class
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
@Setter
public class Student {
private int sid;
private String sname;
private String sage;
private Teacher teacher;
}
创建StudentDao接口
public interface StudentDao {
public ArrayList<Student> getAllStudent();
}
创建mapper.xml
<?xml version="1.0" encoding="UTF-8" ?> select student.sid sid,student.sname sname,student.sage,teacher.tname from student,teacher where teacher.tid = student.tid</select>
<resultMap id="Studenteacher" type="Student">
<result property="sid" column="sid"/>
<result property="sname" column="sname"/>
<result property="sage" column="sage"/>
<association property="teacher" javaType="Teacher">
<result property="tname" column="tname"/>
</association>
</resultMap>
深圳网站建设www.sz886.com