select * from user limit #{startIndex}, #{pageSize}
测试
@Test
public void getUserByLimit(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
HashMap map = new HashMap();
map.put("startIndex", 0);
map.put("pageSize", 3);
List userList = userMapper.getUserByLimit(map);
for (User user: userList){
System.out.println(user);
}
sqlSession.close();
}
8. 使用注解开发
8.1 面向接口编程
根本原因:解耦
关于接口的理解:
接口反映了系统设计人员对系统的抽象理解。
8.2 使用注解开发
// 接口
@Select("select * from user")
List getUsers();
底层主要应用反射
底层:动态代理
Mybatis详细执行流程:
Resources获取加载全局配置文件
实例化SqlSessionFactoryBuilder构造器
解析文件流XMLConfigBuider
SqlSessionFactory实例化
事务管理器
executor执行器
创建sqlSession
实现CRUD [回滚 5]
查看是否执行成功
提交事务
关闭
8.3 注解完成CRUD
工具类创建的时候实现自动提交事务
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
public interface UserMapper {
@Select("select * from user")
List getUsers();
//方法存在多个参数,所有参数前面必须加上@Param("id")注解
@Select("select * from user where id=#{id}")
User getUserById(@Param("id") int id);
@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 = #{uid}")
int deleteUser(@Param("uid") int id);
}
关于@Param()注解:
基本类型的参数或者String类型,需要加上
引用类型不需要加
如果只有一个基本类型的话,可以忽略
我们在SQL中引用
10. 多对一的处理
对于学生:关联 多个学生关联一个老师
对于老师:集合 一个老师对应多个学生
mybatis-04
查询所有的学生信息以及对应的老师信息
select * from student, teacher where student.tid = teacher.id;
按照查询嵌套处理:
按照结果嵌套处理:
select s.id sid, s.username sname, t.username tname
from student s, teacher t
where s.tid = t.id
回顾Mysql多对一查询:
子查询
连表查询
11. 一对多处理
一个老师拥有多个学生
mybatis-05
public class Teacher {
private int id;
private String username;
// 一个老师可以拥有多个学生
private List students;
}
select * from student, teacher where student.tid = teacher.id
按结果嵌套查询:
select s.id sid, s.username sname, t.username tname, t.id tid
from student s, teacher t
where s.tid = t.id and t.id = #{tid}
按照查询嵌套处理:
select *
from teacher
where id = #{tid}
select * from student where tid = #{tid}
小结
关联 association
集合 collection 一对多
javaType & ofType
javaType 用来指定实体类中属性的类型
ofType 用来指定映射到List或者集合中pojo类型,泛型中的约束类型
12. 动态SQL
mybatis07
所谓的动态SQL,本质还是SQL语句,只是我们可以在SQL层面,去执行一个逻辑代码
12.1 动态sql之IF语句
select * from blog where 1=1
and title = #{title}
and author = #{author}
@Test
public void queryBlogIf(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
HashMap map = new HashMap();
map.put("title", "html");
List blogList = blogMapper.queryBlogIF(map);
for (Blog blog : blogList){
System.out.println(blog);
}
}