mybatis整理(三)

xiaoxiao2025-10-18  7

1.mybatis的动态的分页的查询

一:物理的分页:(将分页的目的用sql语句来实现) 物理分页的优点是效率高,但是缺点是不通用 举例: mpper.xml的代码

<select id="selectByPage" parameterType="map" resultType="com.www.entity.Student"> select * from student limit #{start} ,#{num} </select> @org.junit.Test public void selectByPage(){ SqlSession sqlSession = factory.openSession(); Map<String,Object> map = new HashMap<>(); map.put("start",2); map.put("num",3); List<Object> list = sqlSession.selectList("com.www.mapper.StudentMapper.selectByPage", map); for (Object o : list) { System.out.println(o.toString()); } sqlSession.close(); }

二:逻辑的分页:(事先将数据库中的数据全部查出来,然后利用jdbc的代码来实现) 试用于的范围是数据库的数量较少的情况下 注意new RowBounds()在selectList()的第三个参数的地方,第二个参数为输入的条件 相关的例子的举例:

<select id="selectByPage1" resultType="com.www.entity.Student"> select * from student </select> @org.junit.Test public void selectByPage1(){ SqlSession sqlSession = factory.openSession(); List<Object> list = sqlSession.selectList("com.www.mapper.StudentMapper.selectByPage1",null,new RowBounds(10,5)); for (Object o : list) { System.out.println(o.toString()); } }

2.mybatis中的表名与实体类的名字不一致的情况

比如有一个实体类Student的属性有sid 和 username 和 age,数据库中的对应的实体类的表名为 id name 和age 的情况下我们应该怎么办? 方法一:利用别名的方法来解决实体类与表的名字不一致的问题 举例:

<select id="select1" resultType="com.www.entity.Student"> select id sid,name username, age from student </select> @org.junit.Test public void select1(){ SqlSession sqlSession = factory.openSession(); List<Object> list = sqlSession.selectList("com.www.mapper.StudentMapper.select1"); for (Object o : list) { System.out.println(o.toString()); } }

方法二:利用resultMap来代替resutType 完成映射 举例:

<select id="select2" resultMap="aaa" parameterType="int"> select * from student where id = #{id} </select> <resultMap id="aaa" type="com.www.entity.Student"> <id column="id" property="sid"></id> <result column="name" property="username"></result> <result column="age" property="age"></result> </resultMap> @org.junit.Test public void select2(){ SqlSession sqlsession = factory.openSession(); Student student = sqlsession.selectOne("com.www.mapper.StudentMapper.select2", 211); System.out.println(student.toString()); }

3.连接查询的映射

注意:在进行连接查询的时候要将一个从属的实体类的对象建立在另一个实体类中 举例: 利用两个表:course表和teacher表 两个实体类

public class Teacher implements Serializable { private int id; private String name; @Override public String toString() { return "Teacher{" + "id=" + id + ", name='" + name + '\'' + '}'; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Teacher() { } } public class Course implements Serializable { private int id; private String name; private int tid; private Teacher teacher; public Course() { } @Override public String toString() { return "Course{" + "id=" + id + ", name='" + name + '\'' + ", tid=" + tid + ", teacher=" + teacher + '}'; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getTid() { return tid; } public void setTid(int tid) { this.tid = tid; } public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; } }

mapper.xml的配置文件的代码

<select id="select" resultMap="aaa" parameterType="int"> select c.cid,c.cname, t.tname from course c inner join teacher t on c.tid = t.tid where c.tid = #{id} </select> <resultMap id="aaa" type="com.www.entity.Course"> <id column="cid" property="id"></id> <result column="cname" property="name"></result> <result column="tid" property="tid"></result> <association property="teacher" javaType="com.www.entity.Teacher"> <id column="tid" property="id"></id> <result column="tname" property="name"></result> </association> </resultMap> public void select(){ SqlSession sqlSession = factory.openSession(); List<Object> list = sqlSession.selectList("com.www.mapper.CourseMapper.select", 1); for (Object o : list) { System.out.println(o.toString()); } }
转载请注明原文地址: https://www.6miu.com/read-5038165.html

最新回复(0)