Mapper通過實現介面進行增加和檢視操作
首先,為了避免開啟sql會話的準備工作多次進行,採用靜態方法,對準備工作靜態初始化,建立一個BaseDAO類:
---------------------------------------------程式碼開始---------------------------------------------
package com.dao;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class BaseDAO {
static final String CONFIG_FILE = "mybaits-config.xml";
static SqlSessionFactory sqlSessionFactory;
static SqlSession session;
static {
try {
InputStream inputStream = Resources.getResourceAsStream(CONFIG_FILE);
// sqlSessionFactory是寫在全域性,否則靜態程式碼塊中不能使用,即靜態方法中也不能用
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SqlSession getSession() {
return session = sqlSessionFactory.openSession();
}
}
---------------------------------------------程式碼結束---------------------------------------------
然後,著手準備實體類這裡我準備的是Teacher,程式碼如下:
---------------------------------------------程式碼開始---------------------------------------------
package com.entity;
public class Teacher {
private int teaId;
private String teaName;
private int teaAge;
public int getTeaId() {
return teaId;
}
public void setTeaId(int teaId) {
this.teaId = teaId;
}
public String getTeaName() {
return teaName;
}
public void setTeaName(String teaName) {
this.teaName = teaName;
}
public int getTeaAge() {
return teaAge;
}
public void setTeaAge(int teaAge) {
this.teaAge = teaAge;
}
@Override
public String toString() {
return "Teacher [teaId=" + teaId + ", teaName=" + teaName + ", teaAge=" + teaAge + "]";
}
}
---------------------------------------------程式碼結束---------------------------------------------
然後,著手準備介面,這裡我準備的是TeacherDAO介面,方法有增加和查詢,程式碼如下
---------------------------------------------程式碼開始---------------------------------------------
package com.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.entity.Teacher;
public interface TeacherDAO {
//這裡的註解必須存在,它幫助mapper對映檔案識別
//如果是單個基本型別則不用寫註解,多個基本型別也要寫
public void add(@Param("tea") Teacher tea);
public List<Teacher> findAll();
}
---------------------------------------------程式碼結束---------------------------------------------
然後,寫Mapper對映檔案,我這裡寫的是TeacherMapper.xml,程式碼如下:
---------------------------------------------程式碼開始---------------------------------------------
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.TeacherDAO">
<!-- 注意返回型別resultType的設定 -->
<insert id="add">
insert into teacher values(null,#{tea.teaName},#{tea.teaAge})
</insert>
<!-- 這裡返回型別不寫集合,但要寫完整型別名,基本型別可不寫完整的 -->
<select id="findAll" resultType="com.entity.Teacher">
select * from teacher
</select>
</mapper>
---------------------------------------------程式碼結束---------------------------------------------
然後,可以測試了,這裡直接在main方法中測試,程式碼如下:
增加測試:
---------------------------------------------程式碼開始---------------------------------------------
package com.test;
import org.apache.ibatis.session.SqlSession;
import com.dao.BaseDAO;
import com.dao.TeacherDAO;
import com.entity.Teacher;
public class test {
public static void main(String[] args) {
SqlSession session;
Teacher teacher=new Teacher();
teacher.setTeaName("李四");
teacher.setTeaAge(12);
session=BaseDAO.getSession();
//TeacherDAO是一個介面,實現類只能通過會話的方法獲得
TeacherDAO dao=session.getMapper(TeacherDAO.class);
dao.add(teacher);
session.commit();
session.close();
}
}
---------------------------------------------程式碼結束---------------------------------------------
檢視測試:
---------------------------------------------程式碼開始---------------------------------------------
package com.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.dao.BaseDAO;
import com.dao.TeacherDAO;
import com.entity.Teacher;
public class test2 {
public static void main(String[] args) {
SqlSession session;
session=BaseDAO.getSession();
//TeacherDAO是一個介面,實現類只能通過會話的方法獲得
TeacherDAO dao=session.getMapper(TeacherDAO.class);
List<Teacher> list=dao.findAll();
for(Teacher tea: list){
System.out.println(tea);
}
session.close();
}
}
---------------------------------------------程式碼結束---------------------------------------------
至此,完成。