首页 > 代码库 > 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