首页 > 代码库 > Mybatis入门DEMO

Mybatis入门DEMO

下面将通过以下步骤说明如何使用MyBatis开发一个简单的DEMO:

步骤一:新建表STUDENTS

  字段有: Stu_Id、Stu_Name、Stu_Age、Stu_Birthday

 1 CREATE TABLE `student` (
 2 `Stu_Id`  bigint(20) NOT NULL AUTO_INCREMENT ,
 3 `Stu_Name`  varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL ,
 4 `Stu_Age`  int(4) NULL DEFAULT NULL ,
 5 `Stu_Birthday`  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
 6 PRIMARY KEY (`Stu_Id`)
 7 )
 8 ENGINE=InnoDB
 9 DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
10 AUTO_INCREMENT=1
11 ;

步骤二:新建Maven项目,添加相关的依赖包

 1 <dependencies>
 2   <dependency>
 3     <groupId>org.mybatis</groupId>
 4     <artifactId>mybatis</artifactId>
 5     <version>3.2.2</version>
 6   </dependency>
 7   <dependency>
 8     <groupId>mysql</groupId>
 9     <artifactId>mysql-connector-java</artifactId>
10     <version>5.1.22</version>
11     <scope>runtime</scope>
12   </dependency>
13   <dependency>
14     <groupId>org.slf4j</groupId>
15     <artifactId>slf4j-api</artifactId>
16     <version>1.7.5</version>
17   </dependency>
18   <dependency>
19     <groupId>org.slf4j</groupId>
20     <artifactId>slf4j-log4j12</artifactId>
21     <version>1.7.5</version>
22     <scope>runtime</scope>
23   </dependency>
24   <dependency>
25     <groupId>log4j</groupId>
26     <artifactId>log4j</artifactId>
27     <version>1.2.17</version>
28     <scope>runtime</scope>
29   </dependency>
30   <dependency>
31     <groupId>junit</groupId>
32     <artifactId>junit</artifactId>
33     <version>4.11</version>
34     <scope>test</scope>
35   </dependency>
36 </dependencies>

步骤三:新建mybatis-config.xml 和映射器StudentMapper.xml配置文件

mybatis-config.xml

 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   <typeAliases>
 6     <typeAlias alias="Student" type="com.MyBatisDemo.domain.Student" />
 7   </typeAliases>
 8   <environments default="development">
 9     <environment id="development">
10       <transactionManager type="JDBC" />
11       <dataSource type="POOLED">
12         <property name="driver" value="http://www.mamicode.com/com.mysql.jdbc.Driver" />
13         <property name="url" value="http://www.mamicode.com/jdbc:mysql://localhost:3306/mybatisdemo" />
14         <property name="username" value="http://www.mamicode.com/root" />
15         <property name="password" value="http://www.mamicode.com/123123" />
16       </dataSource>
17     </environment>
18   </environments>
19   <mappers>
20     <mapper resource="com/MyBatisDemo/mappers/StudentMapper.xml" />
21   </mappers>
22 </configuration>

StudentMapper.xml

 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 <mapper namespace="com.MyBatisDemo.mappers.StudentMapper">
 5   <resultMap type="Student" id="StudentResult">
 6     <id property="stuId" column="Stu_Id" />
 7     <result property="StuName" column="Stu_Name" />
 8     <result property="StuAge" column="Stu_Age" />
 9     <result property="StuBirthday" column="Stu_Birthday" />
10   </resultMap>
11  
12   <select id="findStudentById" parameterType="int" resultType="Student">
13      SELECT Stu_Id, Stu_Name, Stu_Age, Stu_Birthday 
14          FROM STUDENT WHERE Stu_Id=#{Id}
15   </select>
16 </mapper>

步骤四:新建建MyBatisSqlSessionFactory单例模式类

 1 package com.MyBatisDemo.util;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSession;
 8 import org.apache.ibatis.session.SqlSessionFactory;
 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
10 
11 public class MyBatisSqlSessionFactory {
12     private static SqlSessionFactory sqlSessionFactory;
13 
14     public static SqlSessionFactory getSqlSessionFactory() {
15         if (sqlSessionFactory == null) {
16             InputStream inputStream;
17             try {
18                 inputStream = Resources.getResourceAsStream("mybatis-config.xml");
19                 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
20             } catch (IOException e) {
21                 e.printStackTrace();
22                 throw new RuntimeException(e.getCause());
23             }
24         }
25         return sqlSessionFactory;
26     }
27 
28     public static SqlSession openSession() {
29         return getSqlSessionFactory().openSession();
30     }
31 }

步骤五:新建映射器StudentMapper 接口和 StudentService 类

StudentMapper.java

1 package com.MyBatisDemo.mappers;
2 
3 import com.MyBatisDemo.domain.Student;
4 
5 public interface StudentMapper {
6     Student findStudentById(Integer id); 
7 }

StudentService.java

 1 package com.MyBatisDemo.service;
 2 import org.apache.ibatis.session.SqlSession;
 3 import org.slf4j.Logger;
 4 import org.slf4j.LoggerFactory;
 5 
 6 import com.MyBatisDemo.domain.Student;
 7 import com.MyBatisDemo.mappers.StudentMapper;
 8 import com.MyBatisDemo.util.MyBatisSqlSessionFactory;
 9 
10 public class StudentService {
11     private Logger logger = LoggerFactory.getLogger(getClass());
12 
13     public Student findStudentById(Integer studId)
14     {
15         SqlSession sqlSession = MyBatisSqlSessionFactory.openSession();
16         try
17         {
18             StudentMapper studentMapper =
19                 sqlSession.getMapper(StudentMapper.class);
20             return studentMapper.findStudentById(studId);
21         }
22         finally
23         {
24             sqlSession.close();
25         }
26     }
27 }

步骤六:新建一个JUnit 测试类来测试 StudentService

 1 package com.MyBatisDemo;
 2 
 3 import org.junit.AfterClass;
 4 import org.junit.BeforeClass;
 5 import org.junit.Test;
 6 
 7 import com.MyBatisDemo.domain.Student;
 8 import com.MyBatisDemo.service.StudentService;
 9 public class StudentServiceTest
10 {
11     private static StudentService studentService;
12     @BeforeClass
13     public static void setup()
14     {
15         studentService = new StudentService();
16     }
17     @AfterClass
18     public static void teardown()
19     {
20         studentService = null;
21     }
22 
23     @Test
24     public void testFindStudentById()
25     {
26         Student student = studentService.findStudentById(1);
27         //Assert.assertNotNull(student);
28         System.out.println(student);
29     }
30 }

 首先配置了MyBatis最主要的配置文件mybatis-config.xml,里面包含了JDBC连接参数;

 配置了映射器Mapper XML配置文件文件,里面包含了SQL语句的映射。

 使用mybatis-config.xml内的信息创建了SqlSessionFactory对象。每个数据库环境应该就一个SqlSessionFactory对象实例,所以使用了单例模式只创建一个SqlSessionFactory实例。

 创建了一个映射器Mapper接口StudentMapper,其定义的方法签名和在StudentMapper.xml中定义的完全一样(即映射器Mapper接口中的方法名跟StudentMapper.xml中的id的值相同)。注意StudentMapper.xml中namespace的值被设置成com.MyBatisDemo.mappers.StudentMapper,是StudentMapper接口的完全限定名。这使我们可以使用接口来调用映射的SQL语句。

 

 

Mybatis入门DEMO