MyBatis 安装和配置

  在这里我们使用 MyBatis 开发一个简单的 Java 项目(默认你已安装JDK和MySQL及会使用Maven的基本操作),可以与上一篇通过底层操作数据进行比较

1、新建表 students,插入数据

SQL Code

 1 CREATE TABLE students(
 2      stud_id INT(11) NOT NULL AUTO_INCREMENT,
 3      stud_name VARCHAR(50) NOT NULL,
 4      stud_email VARCHAR(50) NOT NULL,
 5      stud_dob DATE DEFAULT NULL,
 6      PRIMARY KEY (stud_id)
 7 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
 8 
 9 INSERT INTO students(stud_id,stud_name,stud_email,stud_dob)
10 VALUES (1,'Student1','student1@qq.com','1992-01-01');
11 INSERT INTO students(stud_id,stud_name,stud_email,stud_dob)
12 VALUES (2,'Student2','student2@qq.com','1993-12-31');

 

2、新建一个Maven项目,在pom.xml中引入Mybatis.jar

2.1 创建Maven项目,名为HzMyBatis

2.2 在pom.xml中引入相应的jar包

pom.xml code

 1 <dependencies>
 2      <dependency>
 3        <groupId>junit</groupId>
 4        <artifactId>junit</artifactId>
 5        <version>4.11</version>
 6        <scope>test</scope>
 7      </dependency>
 8      <dependency>
 9          <groupId>org.projectlombok</groupId>
10          <artifactId>lombok</artifactId>
11          <version>1.18.2</version>
12          <scope>provided</scope>
13      </dependency>
14      <dependency>
15          <groupId>mysql</groupId>
16          <artifactId>mysql-connector-java</artifactId>
17          <version>5.1.39</version>
18      </dependency>
19      <dependency>
20          <groupId>org.mybatis</groupId>
21          <artifactId>mybatis</artifactId>
22          <version>3.4.1</version>
23      </dependency>
24     <!-- 日志框架 -->
25      <dependency>
26          <groupId>org.slf4j</groupId>
27          <artifactId>slf4j-api</artifactId>
28          <version>1.7.25</version>
29      </dependency>
30      <dependency>
31          <groupId>org.slf4j</groupId>
32          <artifactId>slf4j-log4j12</artifactId>
33          <version>1.7.25</version>
34          <scope>test</scope>
35      </dependency>
36      <dependency>
37          <groupId>log4j</groupId>
38          <artifactId>log4j</artifactId>
39          <version>1.2.17</version>
40      </dependency>
41    </dependencies>

说明:mysql-connector-java-5.1.39 mysql数据库的驱动包、mybatis-3.4.1 Mybatis包、lombok-1.18.2 减少重复代码量(getter/setter/toString等需要注解标注)

3、新建 mybatis-config.xml 和映射器 StudentMapper.xml 配置文件

mybatis-config.xml:包括数据库连接信息,类型别名等信息

StudentMapper.xml:映射的SQL语句

这两个xml文件需要放到classpath路径下

mybatis-config.xml Code

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 3 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 4 <configuration>
 5      <!-- 设置Bean别名 -->
 6      <typeAliases>
 7          <typeAlias alias="Student" type="com.hz.mybatis.bean.Student" />
 8      </typeAliases>
 9      
10      <!-- 设置当前环境 -->
11      <environments default="development">
12          <environment id="development">
13              <!-- 开启事务 JDBC使用数据库自己的事务(局部事务) -->
14              <transactionManager type="JDBC" />
15              <dataSource type="POOLED">
16                  <property name="driver" value="com.mysql.jdbc.Driver" />
17                  <property name="url" value="jdbc:mysql://127.0.0.1:3306/hadoop" />
18                  <property name="username" value="root" />
19                  <property name="password" value="root" />
20              </dataSource>
21          </environment>
22      </environments>
23      
24      <!-- 映射文件路径 -->
25      <mappers>
26          <mapper resource="com/hz/mybatis/mapper/StudentMapper.xml" />
27      </mappers>
28 </configuration>

 

StudentMapper.xml Code

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 4 
 5 <mapper namespace="com.hz.mybatis.mapper.StudentMapper">
 6     <resultMap type="Student" id="StudentResult">
 7         <id property="studId" column="stud_id" />
 8         <result property="name" column="stud_name" />
 9         <result property="email" column="stud_email" />
10         <result property="dob" column="stud_dob" />
11     </resultMap>
12     
13     <select id="findAllStudents" resultMap="StudentResult">
14         SELECT * FROM STUDENTS
15     </select>
16     
17     <select id="findStudentById" parameterType="java.lang.Integer" resultType="Student">
18         SELECT STUD_ID AS STUDID, STUD_NAME AS NAME, STUD_EMAIL AS EMAIL, STUD_DOB AS DOB FROM STUDENTS WHERE STUD_ID = #{Id}
19     </select>
20     
21     <insert id="insertStudent" parameterType="Student">
22         INSERT INTO STUDENTS(STUD_ID, STUD_NAME,STUD_EMAIL,STUD_DOB)
23         VALUES(#{studId}, #{name}, #{email}, #{dob})
24     </insert>
25 </mapper>

3、新建 MyBatisSqlSessionFactory 单例模式类

MyBatisSqlSessionFactory.java Code

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
  * 创建单例SqlSessionFactory
  * @author DONG
  *
  */
public class MyBatisSqlSessionFactory {

    private static SqlSessionFactory sqlSessionFactory;
     
     public static SqlSessionFactory getSqlSessionFactory(){
         if (sqlSessionFactory == null) {
             InputStream inputStream;
             try {
                 inputStream = Resources.getResourceAsStream("mybatis-config.xml");
                 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
         return sqlSessionFactory;
     }
}

4、新建映射器 StudentMapper 接口和 StudentService 类

创建一个 StudentMapper 接口,其定义的方法名和在 Mapper XML 配置文件定义的 SQL 映射语 句名称相同

创建一个 StudentService.java 类,包含了一些业务操作的实现

1、首先, 创建 JavaBean Student.java

Student.java Code

 1 import java.util.Date;
 2 
 3 import lombok.Data;
 4 
 5 @Data
 6 public class Student {
 7 
 8     private Integer studId;
 9      private String name;
10      private String email;
11      private Date dob;
12      
13 }

2、创建映射器 Mapper 接口 StudentMapper.java 其方法签名和 StudentMapper.xml 中定义的 SQL 映射定义名
相同

StudentMapper.java Code

1 import java.util.List;
2 
3 import com.hz.mybatis.bean.Student;
4 
5 public interface StudentMapper {
6      List<Student> findAllStudents();
7      Student findStudentById(Integer id);
8      void insertStudent(Student student);
9 }

3、现在创建 MyBatisStudentService.java 实现对表 students 的数据库操作

 1 import java.util.List;
 2 
 3 import org.apache.ibatis.session.SqlSession;
 4 import org.slf4j.Logger;
 5 import org.slf4j.LoggerFactory;
 6 
 7 import com.hz.mybatis.bean.Student;
 8 import com.hz.mybatis.mapper.StudentMapper;
 9 import com.hz.mybatis.util.MyBatisSqlSessionFactory;
10 
11 /**
12   * 学生业务操作
13   * @author DONG
14   *
15   */
16 public class MyBatisStudentService {
17      
18      private static Logger logger = LoggerFactory.getLogger(MyBatisStudentService.class);
19 
20     /**
21       * 查询所有学生信息
22       * @return
23       */
24      public List<Student> findAllStudents(){
25          SqlSession sqlSession = MyBatisSqlSessionFactory.openSession();
26          logger.debug("获取sqlSession信息: ", sqlSession);
27          try {
28              StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
29              return studentMapper.findAllStudents();
30          } finally {
31              sqlSession.close();
32          }
33      }
34      
35      /**
36       * 通过学生ID查询学生信息
37       * @param studId
38       * @return
39       */
40      public Student findStudentById(Integer studId){
41          logger.debug("通过学生ID查询学生信息: ", studId);
42          
43          SqlSession sqlSession = MyBatisSqlSessionFactory.openSession();
44          
45          try {
46              StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
47              return studentMapper.findStudentById(studId);
48          } finally {
49              sqlSession.close();
50          }
51      }
52      
53      /**
54       * 插入学生信息
55       */
56      public void insertStudent(Student student){
57          SqlSession sqlSession = MyBatisSqlSessionFactory.openSession();
58          
59          try {
60              StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
61              studentMapper.insertStudent(student);
62          } finally {
63              sqlSession.close();
64          }
65          
66      }
67 }

5、新建一个 JUnit 测试类来测试 MyBatisStudentService

 1 import java.util.List;
 2 
 3 import org.junit.AfterClass;
 4 import org.junit.BeforeClass;
 5 import org.junit.Test;
 6 
 7 import com.hz.mybatis.bean.Student;
 8 import com.hz.mybatis.service.MyBatisStudentService;
 9 
10 /**
11   * 测试
12   * @author DONG
13   *
14   */
15 public class TestStudentMapper {
16 
17     private static MyBatisStudentService studentService;
18      
19      @BeforeClass
20      public static void setup(){
21          studentService = new MyBatisStudentService();
22      }
23      
24      @AfterClass
25      public static void teardown(){
26          studentService = null;
27      }
28      
29      @Test
30      public void testFindAllStudents(){
31          List<Student> students = studentService.findAllStudents();
32          
33          for (Student student : students) {
34              System.out.println(student);
35          }
36      }
37 }

image

posted @ 2018-09-07 18:57  公子奇的博客  阅读(6351)  评论(0编辑  收藏  举报