Mybatis的sql映射

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}替换字符串的一部分内容,可用作模糊匹配。

select * from user_table where name like '%${value}%' ResultMap 作用:匹配结果映射集,常用来处理复杂结构的查询结果。

使用场景:

数据表字段与其对应的 JavaBean 类属性名不相同时,无法自动匹配。
查询结果集结构较为复杂,如查询用户信息及其所有订单集合。
例子

使用场景一:数据库表中字段名和pojo类的属性名不一致

//数据库 Users 包含字段 uid、uname、upass
//pojo类的属性为:uid uname password
List selectUserById(Integer uid);

select * from Users where uid = #{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

<?xml version="1.0" encoding="UTF-8" ?> select teacher.tid tid1,teacher.tname tname,student.sname sname,student.sage from student,teacher where teacher.tid = student.tid and teacher.tid = #{tid} 结果:

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值