一起来学习Mybatis(一)-入门

来源:互联网 发布:天下3鬼墨女捏脸数据 编辑:程序博客网 时间:2024/05/16 12:45
引言


  本文标题是Mybatis入门,既然是入门,那么意味着它很简单,但是简单!=不重要。如果之前没有接触过Mybatis,强烈建议从此篇看起。关于Mybatis的学习会完成一系列的文章,本着n+1的原则,由少到多,逐渐深入。
  

准备


  新建一个java Web项目,既然要使用Mybatis,首先要做的就是引用Mybatis提供的jar文件。将 mybatis-x.x.x.jar 文件放到项目的 classpath 中即可,通常我们把它放到 WEB-INF/lib 目录下。


这里写图片描述

什么是 classpath ?
类文件路径,src目录不是classpath, WEB-INF/classes,lib才是classpath,classes文件夹中存放src目录下java文件编译之后的class文件,xml、properties等资源配置文件。lib通常放置我们所引用的外部类文件。

  当然,你也可以使用 Maven 来管理项目,在pom.xml文件中添加下面的依赖。没有使用过 Maven 也没有问题,直接把这部分忽略就好,它和我们理解mybatis没有直接关系。

<dependency>  <groupId>org.mybatis</groupId>  <artifactId>mybatis</artifactId>  <version>x.x.x</version></dependency>

  因为我们是对数据的操作,所以需要添加相应的数据库驱动包,方法和上面一样,这里以MySQL为例。

mysql-connector-java-x.x.x-bin.jar
分析


  在Mybatis中,SqlSession类是核心,想要执行SQL语句就需要先创建一个SQL会话对象。Mybatis为此提供了一个工厂模式的实现来完成SqlSession的初始化。大致流程如下:


  也就是说我们需要先使用 SqlSessionFactoryBuilder 来生成 SqlSessionFactory ,继而得到 SqlSession 对象来执行已映射的SQL语句。

实现


数据表 t_user

  在 MySQL 上新建一个名为 “mybatistest”的数据库,并为它添加用户信息表 t_user:


这里写图片描述

实体类 UserEntity

  添加一个实体类,与t_user表相对应。

public class UserEntity {    private String userID;      private String userType;    public String getUserID() {        return userID;    }    public void setUserID(String userID) {        this.userID = userID;    }    public String getUserType() {        return userType;    }    public void setUserType(String userType) {        this.userType = userType;    }}

UserDao

  为了便于维护与拓展,添加了一个UserDao的接口类,来描述对t_user数据表的操作。

public interface UserDao {      public UserEntity selectUserByID(String id);}

user-mapper.xml

  既然声明了接口,自然需要来实现接口中方法,在Mybatis中,实现写在了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.UserDao">  <select id="selectUserByID" resultType="entity.UserEntity">    select * from t_user where userID = #{id}  </select></mapper>

创建 SqlSessionFactory

  我们这次通过 XML 文件来构建 SqlSessionFactory 的实例。同样的我们把 XML 文件放置到 classpath 下,便于查找。这里以 configuration.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>  <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"/>        <property name="username" value="root"/>        <property name="password" value="root"/>      </dataSource>    </environment>  </environments>  <!-- SQL映射文件,这部分先不用理会,后面会用到 -->  <mappers>    <mapper resource="resources/user-mapper.xml"/>  </mappers></configuration>

  准备好了配置文件,现在我们来创建一个 SqlSessionFactory :

//配置文件路径,因为是在classpath下,所以填写文件名就行String resource = "configuration.xml";//用字节流的方式读取配置文件InputStream inputStream = Resources.getResourceAsStream(resource);//构建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

测试

  现在基本的工作已经完成了,来测试一下。我们已经有了一个 SqlSessionFactory对象,用它打开一个 SqlSession 就能执行接口中的方法了。

SqlSession sqlSession = sqlSessionFactory .openSession();try {    UserDao userDao = sqlSession.getMapper(UserDao.class);    UserEntity user = userDao.selectUserByID("1");    System.out.println(user.getUserType());} finally {    sqlSession.close();}
小结


  虽然是Java Web项目,也无需启动Tomcat,通过接收一个Web请求来对Mybatis是否连接成功进行测试。可以使用JUnit框架进行单元测试,省心省力。

  未完待续。。。

原创粉丝点击