MyBatis是一个半自动化的ORM,与Hibernate相比,它需要自己手写SQL语句,它的SQL语句是写在xml(mapper.xml)文件中的,主配置文件(mybatis.xml)除了声明连接数据库四要素以外,还声明了mapper.xml的位置。
项目目录结构:
1、需要将mybatis需要的jar包导入到项目中
从git下载 mybatis-3.27所需要的jar包 ,除了mybatis的jar包以外,还需要添加一个数据库连接的jar包。Mysql-connector-java.jar,并将它们导入到项目中去。
2、编写实体类:Student
package com.mybatis.beans;
public class Student {
private Integer id;
private String name;
private Integer age;
private Double score;
//以下省略了setter和getter方法
}
编写一个接口(StudentDao)来定义insertStudent(Student student)方法
package com.mybatis.dao;
import com.mybatis.beans.Student;
public interface StudentDao {
void insertStudent(Student student);
}
编写该接口的实现类:StudentDaoImpl
package com.mybatis.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;
import com.mybatis.beans.Student;
public class StudentDaoImpl implements StudentDao {
private SqlSession sqlSession;
@Override
public void insertStudent(Student student) {
try {
//3.通过读取主配置文件获取输入流
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
//2.sqlSessionFactory是通过SqlSessionFactoryBuilder构建的
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//1.sqlSession是通过SqlSessionFactory创建的
sqlSession = sqlSessionFactory.openSession();
//4.sqlSession中就有我们需要的insert()方法
//param1:该参数是mapper中我们定义插入方法的id,即<insert id="insertStudent"></insert>
//param2:则是需要传入的参数
sqlSession.insert("insertStudent", student);
//执行完插入后需要提交,不然无法将对应的操作写入到数据库中,该方法中包含了事务的提交
sqlSession.commit();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (sqlSession != null) {
//调用close()方法,该方法中包含了事务的回滚
sqlSession.close();
}
}
}
}
3、编写配置文件:mapper.xml和mybatis.xml
<!--mapper.xml-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx">
<insert id="insertStudent" parameterType="com.mybatis.beans.Student">
INSERT INTO student(name,age,score) VALUES(#{name},#{age},#{score})
</insert>
</mapper>
<!-- mybatis.xml-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test" />
<property name="username" value="root" />
<property name="password" value="mysql" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis/dao/mapper.xml"/>
</mappers>
</configuration>
4、使用Junit进行测试
编写测试类:StudentDaoTest
package com.mybatis.test;
import org.junit.Test;
import com.mybatis.beans.Student;
import com.mybatis.dao.StudentDao;
import com.mybatis.dao.StudentDaoImpl;
public class TestStudentDao {
private StudentDao dao = new StudentDaoImpl();
@Test
public void testInsertStudent(){
Student student = new Student("张三",23,93.5);
dao.insertStudent(student);
}
}
MyBatis中留有打印日志文件的接口,添加日志文件配置(log4j.properties),将SQL语句执行过程通过console打印出来;
<!--log4j.properties-->
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
运行测试类,控制台会输出一下内容。