mybatis整理(三)
阿新 • • 發佈:2018-12-17
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());
}
}