1、写在
2、使用
多表联查之嵌套查询
java代码 员工类
@Data
public class YG {
private Integer yid;
private String yname;
private String yzw;
private User user;
}
部门类
@Data
public class User {
private Integer id;
private String username;
private String realname;
}
2在StudentMapper.xml中写上查询员工信息:
3TeacherMapper.xml文件中提供一个查询部门对象的sql:
综合
2 多表联查之 链表查询
只需要写一条SQL,在StudentMapper.xml中完成,对于学生属性直接用
1.从一的一方查询多的一方。
比如: 班级--1---n-->学生.
数据库代码如下
CREATE TABLE class(
c_id INT PRIMARY KEY AUTO_INCREMENT,
c_name VARCHAR(20),
);
INSERT INTO class(c_name) VALUES('QY145');
INSERT INTO class(c_name) VALUES('QY143');
INSERT INTO class(c_name) VALUES('QY142');
CREATE TABLE student(
s_id INT PRIMARY KEY AUTO_INCREMENT,
s_name VARCHAR(20),
class_id INT
);
INSERT INTO student(s_name, class_id) VALUES('xs_A', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_B', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_C', 2);
INSERT INTO student(s_name, class_id) VALUES('xs_D', 2);
INSERT INTO student(s_name, class_id) VALUES('xs_E', 3);
INSERT INTO student(s_name, class_id) VALUES('xs_F', 3);
例子:根据班级id查询班级信息以及该班级下所有的学生信息。
MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似.MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。
5.1 if和where 一起使用
测试类
@Test
public void test(){
BookDao mapper = session.getMapper(BookDao.class);
Map map = new HashMap();
map.put("bookname","西游记");
map.put("bookauthor","吴承恩");
List idMap = mapper.findIdMap(map);
System.out.println(idMap);
}
5.2 [choose when otherwise] 和where
测试
@Test
public void test1() {
BookDao mapper = session.getMapper(BookDao.class);
HashMap map = new HashMap();
//map.put("bookname","红高粱");
map.put("bookauthor","老舍");
List idMap1 = mapper.findIdMap1(map);
System.out.println(idMap1);
}
3)set标签。修改部分字段。
update book_info
book_name=#{name},
book_author=#{author},
book_pub=#{pub},
book_price=#{price},
where book_id=#{id}
测试
@Test
public void update(){
BookDao mapper = session.getMapper(BookDao.class);
Book book = new Book();
book.setName("嘻游记");
book.setPrice(56);
book.setId(1001);
int update = mapper.update(book);
session.commit();
}
5.4foreach 批量删除。
delete from book_info where book_id in
#{id}
测试
@Test
public void delete(){
BookDao mapper = session.getMapper(BookDao.class);
int [] arr ={1001,1002,1003};
int delete = mapper.delete(arr);
session.commit();
}
补充一下
使用sql片段
(1)引入分页PageHelper依赖
com.github.pagehelper
pagehelper
5.1.11
(2) 加入拦截
测试
@Test
public void testUpdate3(){
EmpDao empDao = session.getMapper(EmpDao.class);
//使用分页功能 request.getParamter("page") request.getParamter("pageSize")
PageHelper.startPage(2,10);
List list = empDao.findAll3("王");
//可以把查询的结果封装到PageInfo类中 包含你想要的任何信息
PageInfo pageInfo=new PageInfo(list);
System.out.println("总条数:"+pageInfo.getTotal());
System.out.println("当前页码的数据:"+pageInfo.getList());
}
(1)mybatis插件----dao和映射文件之间的关联
(2) easycode插件----代码单表的crud----entity dao 映射。
.作用域(Scope)和生命周期