一、Limit分页
1、语法
SELECT * FROM table LIMIT stratIndex,pageSize //第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目
SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15
#如果只给定一个参数,它表示返回最大的记录行数目:
SELECT * FROM table LIMIT 5; //检索前 5 个记录行
#换句话说,LIMIT n 等价于 LIMIT 0,n。
2、实例
//分页
List<User> limitUser(Map<String,Integer> map);
<!-- 分页-->
<select id="limitUser" parameterType="map" resultType="com.kuang.pojo.User">
select * from user limit #{startIndex},#{pageSize}
</select>
//分页
@Test
public void limitUser() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
int currentPage = 1; //第几页
int pageSize = 2; //每页显示几个
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("startIndex",(currentPage-1)*pageSize);
map.put("pageSize",pageSize);
List<User> users = mapper.limitUser(map);
for (User user: users){
System.out.println(user);
}
session.close();
}
二、使用注解开发
1、改造MybatisUtils工具类的getSession( ) 方法,重载实现。
//获取SqlSession连接
public static SqlSession getSession(){
return getSession(true); //事务自动提交
}
public static SqlSession getSession(boolean flag){
return sqlSessionFactory.openSession(flag);
}
2、实例
//使用注解开发_查询全部用户
@Select("select * from user")
List<User> selectUsera();
//使用注解开发_删除语句
@Delete("delete from user where id=#{ida}")
int deleteuser(@Param("ida") int id);
3、关于@Param
@Param注解用于给方法参数起一个名字。以下是总结的使用原则:
在方法只接受一个参数的情况下,可以不使用@Param。
在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名。
如果参数是 JavaBean , 则不能使用@Param。
不使用@Param注解时,参数只能有一个,并且是Javabean。
三、一对多和多对一的处理
1、搭建查询环境
2、多对一(多个学生对一个老师)
(1)关于Mapper.xml文件中:
resultMap 结果映射
id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能
result – 注入到字段或 JavaBean 属性的普通结果
association – 一个复杂类型的关联;许多结果将包装成这种类型;嵌套结果映射 – 关联可以是 resultMap 元素,或是对其它结果映射的引用
collection – 一个复杂类型的集合;嵌套结果映射 – 集合可以是 resultMap 元素,或是对其它结果映射的引用
property 需要映射到JavaBean 的属性名称。
column 数据表的列名或者标签别名。
javaType 一个完整的类名,或者是一个类型别名。
(3)
接口方法编写:
public interface StudentMapper {
public List<Student> getStudents();
}
编写对应的mapper文件:
<mapper namespace="com.kuang.dao.StudentMapper">
<select id="getStudents" resultMap="StudentTeacher" >
select s.id sid, s.name sname , t.name tname
from student s,teacher t
where s.tid = t.id
</select>
<resultMap id="StudentTeacher" type="com.kuang.pojo.Student">
<id property="id" column="sid"/>
<result property="name" column="sname"/>
<!--关联对象property 关联对象在Student实体类中的属性-->
<association property="teacher" javaType="com.kuang.pojo.Teacher">
<result property="name" column="tname" />
</association>
</resultMap>
</mapper>
测试:
public void test1() {
SqlSession session = MybatisUtils.getSession();
StudentMapper mapper = session.getMapper(StudentMapper.class);
List<Student> students = mapper.getStudents();
for(Student student:students){
System.out.println(student);
session.close();
}
}
3、一对多
接口方法编写:
public interface TeacherMapper {
List<Teacher> getTeacher(int id);
}
编写对应的mapper文件:
<mapper namespace="com.kuang.dao.TeacherMapper">
<select id="getTeacher" resultMap="TeacherStudent" >
select s.id sid, s.name sname , t.name tname, t.id tid
from student s,teacher t
where s.tid = t.id and t.id=#{id}
</select>
<resultMap id="TeacherStudent" type="com.kuang.pojo.Teacher">
<result property="name" column="tname" />
<collection property="students" ofType="com.kuang.pojo.Student" >
<result property="id" column="sid" />
<result property="name" column="sname" />
<result property="tid" column="tid"/>
</collection>
</resultMap>
</mapper>
四、动态SQL
1、
- if
- choose (when, otherwise)
- choose (when, otherwise)
-
- trim (where, set)
-
- foreach
备注:
mybatis_01
mybatis_02:配置
mybatis_03:分页
mybatis_04:注解
mybatis_05:多对一的处理
mybatis_06:一对多的处理
mybatis_07:动态SQL