我的第一个mybatis程序

写在前面:

  最近开始了框架的学习,打算先从mybatis入手,下面是我的第一个mybatis程序。

编译环境:

  idea+jdk1.8+mysql+maven-3.6.3

首先需要在pom.xml中添加依赖代码

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>
//这里我用的是3.5.2版本

创建mybatis的配置文件,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。

mybatis-config.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="${driver}"/>    //jdbc驱动,我的是com.mysql.jdbc.Driver
        <property name="url" value="${url}"/>      
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
  //每一个mapper都需要注册,这里和后面有关 <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>

 

我们以前都是通过jdbc来操作数据库,频繁的连接关闭不仅会消耗巨大的资源,并且如果要修改sql的话不利于整体的维护。

而mybatis的核心概念有Configuration 、 SqlSessionFactory 、 Session 、 Executor 、 MappedStatement 、StatementHandler、ResultSetHandler。我是首先了解了 SqlSessionFactory。

我们首先看官方文档是怎样定义的:

 

 

我们创建一个mybatisutil用来获取sqlsession对象

package utils;

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 java.io.IOException;
import java.io.InputStream;

//sqlSessionFactory对象
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

    static {

        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = null;
            inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return  sqlSession;
    }



}

 

 同样我们再联系一下传统MVC设计模式的写法,我们会写一个DAO接口,然后创建一个实现类去继承它,如下:

 

 

 那么我们通过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">
<!--namespace绑定一个Dao/Mapper接口-->
<mapper namespace="dao.UserDao">
    <select id="getCloud" resultType="bean.Cloud">
        select * from caijing
    </select>

</mapper>

在这里,namespace用来绑定一个Dao/Mapper接口,也就是说,这个xml就相当于我们之前创建的实现类,它们的作用是一样的,省去了jdbc一系列的操作,更加简单了。

现在我们回过头来再看一开始创建的mybatis-config.xml,大家有没有注意到:

 

 

 我在这里注释道每一个mapper都需要注册,这里它的resource需要改为"dao.UserMapper.xml",一定要注意是每一个!!!我只创建了一个,所有这里就注册一个。

写到这,准备工作也就差不多了,下面我们开始测试:

package dao;

import bean.Cloud;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import utils.MybatisUtils;

import java.util.List;

public class UserDaoTest {
    @Test
    public void test(){
        //1.获取sqlsession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2.1执行sql
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List<Cloud> list = mapper.getCloud();
        for (Cloud cloud : list) {
            System.out.println(cloud);
        }
        //关闭sqlsession
        sqlSession.close();
    }
}

运行结果:

 

posted @ 2021-12-03 23:12  天岁  阅读(52)  评论(0编辑  收藏  举报