首先,为了避免打开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();
}
}
---------------------------------------------代码结束---------------------------------------------
至此,完成。