1.创建STUDENTS表并插入一些数据:
-- 创建数据库 CREATE DATABASE mybatis; -- 使用数据库 USE mybatis; -- 创建表 CREATE TABLE STUDENT ( id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'PK', name VARCHAR(30) NOT NULL COMMENT '名称', email VARCHAR(30) NOT NULL COMMENT '邮箱', dob DATE DEFAULT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=gbk COMMENT '学生表'; -- 插入数据 INSERT INTO STUDENT(name, email, dob) VALUES('student1', '[email protected]', '1990-01-01'); INSERT INTO STUDENT(name, email, dob) VALUES('student2', '[email protected]', '1990-02-02');
2. 创建一个总的目录(文件夹名为mybatis-demos),用于存放所有的MyBatis应用示例
3. 打开DOS命令行窗体,进入到上面创建的文件夹mybatis-demos。使用Maven Archetype生成项目骨架:
3.1 输入命令:mvn archetype:generate
3.2 在运行到“Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 580:”和“Choose org.apache.maven.archetypes:maven-archetype-quickstart version:”外时直接敲回车
3.3 输入项目的groupId、artifactId、version、package,然后检查输入的groupId、artifactId、version、package信息是否正确,输入“Y”确认
使用Maven Archetype生成的项目的目录结构:
4. 修改mybatis-demo-01文件夹下的pom.xml文件,添加项目运行需要的依赖:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.7</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.22</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency> </dependencies>
5. 在mybatis-demo-01\src\main\java\com\github\wangguocheng\mybatis\demo文件夹下新domain文件夹,然后在domain文件夹下创建Student实体类:
Student.java
package com.github.wangguocheng.mybatis.demo.domain; import java.util.Date; public class Student { private long id; private String name; private String email; private Date dob; public Student() {} public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Date getDob() { return dob; } public void setDob(Date dob) { this.dob = dob; } }
6.在mybatis-demo-01\src\main\java\com\github\wangguocheng\mybatis\demo文件夹下新建mapper文件夹,然后在mapper文件夹下创建StudentMapper类及StudentMapper.xml映射文件:
StudentMapper.java
package com.github.wangguocheng.mybatis.demo.mapper; import java.util.List; import com.github.wangguocheng.mybatis.demo.domain.Student; public interface StudentMapper { public void insertStudent(Student student); public List<Student> findAllStudents(); public Student findStudentById(long id); }
StudentMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.github.wangguocheng.mybatis.demo.mapper.StudentMapper"> <resultMap type="Student" id="StudentResultMap"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="email" column="email"/> <result property="dob" column="dob"/> </resultMap> <select id="insertStudent" parameterType="Student"> INSERT INTO STUDENT(name, email, dob) VALUES(#{name}, #{email}, #{dob}) </select> <select id="findAllStudents" resultMap="StudentResultMap"> SELECT * FROM STUDENT </select> <select id="findStudentById" resultMap="StudentResultMap" parameterType="long"> SELECT * FROM STUDENT WHERE id = #{id} </select> </mapper>
7. 在mybatis-demo-01\src\main文件夹下新建resources文件夹,然后在resources文件夹下创建mybatis配置文件及log4j配置文件
mybaits.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> <!-- 定义类型别名 --> <typeAliases> <typeAlias type="com.github.wangguocheng.mybatis.demo.domain.Student" alias="Student"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="abc123"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/github/wangguocheng/mybatis/demo/mapper/StudentMapper.xml"/> </mappers> </configuration>
log4j.properties
log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c - %m%n
8. 在mybatis-demo-01\src\main\java\com\github\wangguocheng\mybatis\demo文件夹下新建util文件夹,然后在util文件夹下创建工具类
MyBatisSqlSessionFactory.java
package com.github.wangguocheng.mybatis.demo.util; 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; public class MyBatisSqlSessionFactory { private static SqlSessionFactory sqlSessionFactory; public static SqlSessionFactory getSqlSessionFactory() { if(sqlSessionFactory == null) { InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream("mybatis.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch(IOException e) { throw new RuntimeException(e.getCause()); } } return sqlSessionFactory; } public static SqlSession openSession() { return getSqlSessionFactory().openSession(); } }
9. 修改pom.xml文件,在<build>节点下添加如下代码:
<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources>
10. 在mybatis-demo-01\src\main\java\com\github\wangguocheng\mybatis\demo文件夹下新建service文件夹,然后在service文件夹下创建StudentService类
StudentService.java
package com.github.wangguocheng.mybatis.demo.service; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.github.wangguocheng.mybatis.demo.domain.Student; import com.github.wangguocheng.mybatis.demo.mapper.StudentMapper; import com.github.wangguocheng.mybatis.demo.util.MyBatisSqlSessionFactory; public class StudentService { private Logger logger = LoggerFactory.getLogger(getClass()); public List<Student> findAllStudents() { SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); try { StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); return studentMapper.findAllStudents(); } finally { sqlSession.close(); } } public Student findStudentById(Long id) { logger.debug("Select Student By ID :{}", id); SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); try { StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); return studentMapper.findStudentById(id); } finally { sqlSession.close(); } } public void createStudent(Student student) { SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); try { StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); studentMapper.insertStudent(student); sqlSession.commit(); } finally { sqlSession.close(); } } }
11. 在mybatis-demo-01\src\test\java\com\github\wangguocheng\mybatis\demo\service文件夹下新建service文件夹,然后在service文件夹下创建StudentServiceTest类
StudentServiceTest.java
package com.github.wangguocheng.mybatis.demo.service; import java.util.Date; import java.util.List; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import com.github.wangguocheng.mybatis.demo.domain.Student; public class StudentServiceTest { private static StudentService studentService; @BeforeClass public static void setup() { studentService = new StudentService(); } @AfterClass public static void tearDown() { studentService = null; } @Test public void testFindAllStudents() { List<Student> students = studentService.findAllStudents(); Assert.assertNotNull(students); for(Student student : students) { System.out.println(student); } } @Test public void testFindStudentById() { Student student = studentService.findStudentById(1L); Assert.assertNotNull(student); System.out.println(student); } @Test public void testCreateStudent() { Student student = new Student(); student.setName("new-student-02"); student.setEmail("[email protected]"); student.setDob(new Date()); studentService.createStudent(student); } }
12. 在DOS命令窗体中进入mybatis-demo-01文件夹,并运行命令mvn clean test
项目源码见随附件