MyBatis入门

  Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

  使用MyBatis的步骤:

(1)引入所需的jar包 mybatis-3.4.4.jar mysql-connector-java-5.0.8-bin.jar(mySQl的JDBC操作包,其他数据库请自行更换)

  注意mybatis的jar包尽量引用3.4以上的版本,如果使用的是3.2的版本的话,在后面使用mybatis创建公用mapper的时候会出现兼容性问题。

(2)创建mybatis-config.xml。(mybatis-config.xml 是MyBatis的全局配置文件 ,在该文件中配置:数据源,事务,等MyBatis运行的环境.)

  创建步骤:在新建的项目的上的src下创建一个XML File文件,文件内容如下

<?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>        
    <!-- 环境:配置mybatis的环境  -->
    <environments default="development">    <!-- 可以使用多个环境变量,切换时只需修改对应default的属性为该环境变量的id即可 -->
        <!-- 环境变量:可以配置多个环境变量,比如使用多数据源时,就需要配置多个环境变量 -->
        <environment id="development">
            <!-- 事务管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 数据源 -->
            <dataSource type="POOLED">  <!-- 注意贴过去的代码这一行会报错,网上说是复制过去的是utf-8的bom格式的,而xml支持的是不带bom格式的,这种这个部分自己手打一下,自动补全代码即可解决 -->
                <property name="username" value="用户名" />
                <property name="url" value="jdbc:mysql://localhost:3306/数据库名" />
                <property name="password" value="用户密码" />
                <property name="driver" value="com.mysql.jdbc.Driver" />  <!-- 定义驱动连接,根据所使用的数据库的不同进行更换,作者使用的是mySql -->
            </dataSource>
        </environment>
    </environments>    
</configuration>

这样我们就简单的配置了一个mybatis的config配置文件了,这一步就相当于我们平常编写JDBC连接数据库的操作。

(3)接下来让我们为它建立一个表用来测试

  首先,我们先建立一个学生的数据库(Student),里面存放一张年级表(grade),sql语句如下:

CREATE DATABASE `student`;

USE `student`;

CREATE TABLE `grade` (
  `gradeName` VARCHAR(20) DEFAULT NULL,
  `gradeId` INT(11) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT  INTO `grade`(`gradeName`,`gradeId`) VALUES ('一年级',1),('二年级',2),('三年级',3);

(4)在java代码中的src文件下建立一个entity的包,里面建立一个Grade的类

package entity;

public class Grade {
    private int gradeId;        //与表中的字段gradeId对应
    private String gradeName;    //与表中的字段gradeName对应
    public Grade() {
        super();
    }
    public int getGradeId() {
        return gradeId;
    }
    public void setGradeId(int gradeId) {
        this.gradeId = gradeId;
    }
    public String getGradeName() {
        return gradeName;
    }
    public void setGradeName(String gradeName) {
        this.gradeName = gradeName;
    }
}

(5)好了,有了实体类之后,我们就该编写实体类的接口了

  在src下新建一个dao的包,里面新建一个GradeDao的接口,里面定义了两个方法的接口,代码如下:

package dao;

import entity.Grade;

public interface GradeDao {
    
    /**
     * 查询所有年级
     * @return
     */
    Grade queryAllGrade();
    
    /**
     * 根据年级编号查询年级
     * @param gradeId
     * @return
     */
    Grade queryGradeByID(int gradeId);
}

(6)建立好接口后,在建立接口的实现类之前,我们先定义一下SQL语句了,目前,我们先在xml文件中编写

  首先,在src文件下新建一个mapper包,里面新建一个GradeMapper.xml,文件名和包名都可以随便取,但尽量给每个实体类编写不同的xml文件,避免查找的时候发生混乱

  GradeMapper.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="dao.GradeDao">            <!-- 设置工作空间为dao.GradeDao这个类  -->
  <!-- 查询所有年级 -->
      <select id="queryAllGrade" resultType="entity.Grade">    <!-- resultType为返回值类型 -->
          select * from grade
      </select>
      <!-- 根据年级编号查询年级 -->
      <select id="queryGradeByID" resultType="entity.Grade" parameterType="int">  <!-- parameterType为传入参数类型 -->
          select * from grade where gradeId = #{gradeId}        <!-- #{gradeId}为占位符  -->
      </select>
  </mapper>

建立好GradeMapper.xml后,我们还需要再做一件事,那就是在config文件中去映射到这个文件,找到我们刚才编写的mybatis-config.xml文件,

<configuration>标签的里面</environments>的下方添加一个映射关系,代码如下

<mappers>
    <mapper resource="mapper/GradeMapper.xml"/>    <!-- 包名.xml文件名 -->
</mappers> 

 

(7)好了,SQL语句写好后,接下来就是重点了——怎么调用它

  在src下建立一个common的包,里面存放一个SqlSessionUtil的类,类里面我们定义一个getSession的方法,代码如下

 

  在src包下建立一个dao.Impl的包,里面添加一个GradeDaoImpl的类,代码如下

 

 

 

 

posted @ 2017-12-19 19:13  365天小人物  阅读(111)  评论(0编辑  收藏  举报