MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
配置过程如下:
首先需要导入相应的jar包可以去官网下载,然后导入到项目中去,建立相应的数据库此处不再赘述。
编写配置文件mapper.xml,配置文件主要是用来配置数据库的相关信息,以及引入映射文件。
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
映射文件mapper.xml,映射文件主要是用来定义的相应的sql操作
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
insert into
student(name,age,score) values(#{name}, #{age}, #{score})
以上工作完成之后建立相应的接口,以及接口的实现如下所示:
public interface IStudentDao {
public void insertStu(Student student);
}
public class StudentDaoImpl implements IStudentDao {
private SqlSession sqlSession;
@Override
public void insertStu(Student student) {
// TODO Auto-generated method stub
InputStream inputStream;
try {
// 1.加载主配置文件,通过文件配置
inputStream = Resources.getResourceAsStream("mybatis.xml");
// 2.创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3.创建SqlSession对象
sqlSession = sqlSessionFactory.openSession();
// 4.相关操作,insertStudent为配置文件中的sql语句id,通过sqlsession发送sql语句
// sqlSession.insert("insertStu", student);
//通过获取Mapper发送sql,需要注意,使用这种方法发送时,mqpper中需要指定namespace,并且接口中XXXMapper接口中save、update等方法,
// 保存后只能返回数字,用int接收,不能返回java类或其他!!!为相应的接口,方式为com...,而使用第一种方法无要求
IStudentDao iStudentDao = sqlSession.getMapper(IStudentDao.class);
iStudentDao.insertStu(student);
// 5.提交操作
sqlSession.commit();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
实体类如下:
public class Student {
private Integer id;
private String name;
private int age;
private double score;
public Student() {
// TODO Auto-generated constructor stub
}
public Student(String name, int age, double score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + ", score=" + score + "]";
}
}
测试类:
public class MyTest {
public IStudentDao iStudentDao;
@Before
public void before() {
iStudentDao=new StudentDaoImpl();
}
@Test
public void testInsert(){
Student student=new Student("王五222",23,98.5);
iStudentDao.insertStu(student);
}
}
需要注意的是使用SQL session发送sql语句与获取mapper发送sql语句,有些配置是略微不同的,需要注意