MyBatis初窥:HelloWorld

来源:互联网 发布:ipad看图软件 编辑:程序博客网 时间:2024/06/01 07:24

MyBatis简介

MyBatis原是Apache的一个开源项目iBatis(“internet”和“abatis”的组合),2010年这个项目由Apache software foundation 迁移到了Google Code,并正式改名为MyBatis。项目代码于2013年11月迁移到Github,下载地址:https://github.com/mybatis/mybatis-3。
MyBatis 是一款非常优秀的持久化层框架,有以下几个特点:
  1. 支持定制化 SQL、存储过程以及高级映射;
  2. 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集;
  3. 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO对象映射成数据库中的记录。

搭建MyBatis环境

创建数据库表

在MySQL数据库中创建两张表:tbl_student(学生表)和tbl_class(班级表)。
/**创建学生表**/CREATE TABLE tbl_student (STUDENT_ID         BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT,STUDENT_NAME       VARCHAR(10) NOT NULL,  STUDENT_GENDER     VARCHAR(10),  STUDENT_BIRTHDAY   DATE,STUDENT_AGE        INT,CLASS_ID           VARCHAR(255)   );/**创建班级表**/CREATE TABLE tbl_class (CLASS_ID           BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT,CLASS_NAME         VARCHAR(10) NOT NULL);/**插入班级数据**/  INSERT INTO tbl_class (CLASS_ID,CLASS_NAME)  VALUES(201709,'三年二班')  /**插入学生数据**/  INSERT INTO tbl_student (STUDENT_ID,STUDENT_NAME,STUDENT_GENDER,  STUDENT_BIRTHDAY,STUDENT_AGE,CLASS_ID )  VALUES(20060309,'苏沐寒','男','1988-08-01',25,201709),(20060321,'龙雨晴','女','1988-01-27',25,201709)  

创建Java项目


导入Jar包

如果要在项目中使用 MyBatis, 只需将MyBatis的核心jar文件mybatis-x.x.x.jar添加到你的项目构建路径中即可。
如果使用 Maven 来构建项目,则需要在 pom.xml 文件中添加相应的依赖配置,配置内容如下:
<dependency>  <groupId>org.mybatis</groupId>  <artifactId>mybatis</artifactId>  <version>x.x.x</version></dependency>
为了能够连接MySQL数据库,还需要导入mysql-connector-java-x.x.x.jar
所需Jar包已上传至CSDN,资源地址:http://download.csdn.net/download/pengjunlee/9992720。

创建实体类

创建好的学生和班级实体类代码如下。
package org.mybatis.entity;import java.util.Date;public class StudentEntity {private Long studentId;private String studentName;private String studentGender;private Date studentBirthday;private Integer studentAge;private Long classId;private String className;//此处省略get和set方法@Overridepublic String toString() {return "StudentEntity [studentId=" + studentId + ", studentName="+ studentName + ", studentGender=" + studentGender+ ", studentBirthday=" + studentBirthday + ", studentAge="+ studentAge + ", classId=" + classId + ", className="+ className + "]";}}
package org.mybatis.entity;import java.util.List;public class ClassEntity {private Long classId;private String className;private List<StudentEntity> students;//此处省略get和set方法@Overridepublic String toString() {return "ClassEntity [classId=" + classId + ", className=" + className+ ", students=" + students + "]";}}

添加MyBatis全局配置

MyBatis全局配置文件用途很多,包括:数据源配置、事务管理配置、类型处理器配置、类别名配置等,此处不作详细介绍,为了示例仅对数据源和Mapper文件路径进行配置。
<?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="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="用户名"/>        <property name="password" value="密码"/>      </dataSource>    </environment>  </environments>  <mappers>    <mapper resource="mapper/StudentMapper.xml"/>    <mapper resource="mapper/ClassMapper.xml"/>  </mappers></configuration>

添加Mapper配置

创建好的StudentMapper.xmlClassMapper.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="StudentMapper"><select id="selectStudentById" resultType="org.mybatis.entity.StudentEntity">select STUDENT_IDstudentId,STUDENT_NAME studentName,STUDENT_GENDER studentGender,STUDENT_BIRTHDAY studentBirthday,STUDENT_AGE studentAge,CLASS_IDclassId from tbl_student where STUDENT_ID =#{studentId}</select></mapper>
<?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"><!-- 名称空间与 org.mybatis.mapper.ClassMapper接口绑定 --><mapper namespace="org.mybatis.mapper.ClassMapper"><!-- select标签的id属性与 ClassMapper接口中的方法名进行绑定 --><select id="selectClassById" parameterType="long"resultType="org.mybatis.entity.ClassEntity">select CLASS_ID classId,CLASS_NAME className from tbl_classwhereCLASS_ID=#{classId}</select></mapper>

创建ClassMapper接口

ClassMapper.xml的名称空间与ClassMapper接口进行绑定,可以通过接口调用的方式执行SQL,此种方式能够帮助我们进行安全类型检查,具有更高的安全性,推荐使用这种方式进行编程。
ClassMapper接口声明如下。
package org.mybatis.mapper;import org.mybatis.entity.ClassEntity;public interface ClassMapper {public ClassEntity selectClassById(Long classId);}

编写测试代码

编写一个JUnit测试类进行测试。
package org.mybatis.test;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 org.junit.Test;import org.mybatis.entity.ClassEntity;import org.mybatis.entity.StudentEntity;import org.mybatis.mapper.ClassMapper;public class MybatisTest {@Testpublic void test() throws IOException {// 指定mybatis全局配置文件路径String resource = "mybatis-config.xml";// 使用Resources工具类来获取classpath或其它位置的配置文件InputStream inputStream = Resources.getResourceAsStream(resource);// 由SqlSessionFactoryBuilder从 XML中构建 SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 从 SqlSessionFactory 中获取 SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();try {//通过 SqlSession 实例直接执行已映射的 SQL语句StudentEntity student = sqlSession.selectOne("StudentMapper.selectStudentById", 20060309L);System.out.println(student);//通过 SqlSession 实例来获取接口的实现类,通过接口的实现类执行已映射的 SQL语句ClassMapper classMapper=sqlSession.getMapper(ClassMapper.class);ClassEntity clazz = classMapper.selectClassById(201709L);System.out.println(clazz);} finally {//用完记得关闭sqlSessionif (null != sqlSession) {sqlSession.close();}}}}
执行结果如下:
StudentEntity [studentId=20060309, studentName=苏沐寒, studentGender=男, studentBirthday=Mon Aug 01 00:00:00 CDT 1988, studentAge=25, classId=201709, className=null]ClassEntity [classId=201709, className=三年二班, students=null]