MyBatis--2.Mybatis的第一个程序

569 阅读2分钟

MyBatis是一个半自动化的ORM,与Hibernate相比,它需要自己手写SQL语句,它的SQL语句是写在xml(mapper.xml)文件中的,主配置文件(mybatis.xml)除了声明连接数据库四要素以外,还声明了mapper.xml的位置。

项目目录结构:

1572497268118.png

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

运行测试类,控制台会输出一下内容。

22