IDEA+Mybatis (一)配置(基础版)

  • 一、安装插件
  • 二、(以下为测试插件示范)生成mapper文件
  • 三、导入jar包
  • 四、生成JavaBean类
  • 五、生成config.XML文件
  • 六、创建 SqlSession 对象
  • 七、配置mapper文件
  • 八、把写好的映射文件注册到全局配置文件中
  • 九、运行
  • 十、接口的形式(建议使用)
  • 十一、总结


在IDEA上使用插件Free Mybatis plugin。

一、安装插件

在Settings搜索 Free Mybatis plugin 安装

怎么在idea里配置适合自己mysql的依赖 idea配置mybatis_mybatis


(Free Mybatis plugin 一款免费的mybatis插件)

二、(以下为测试插件示范)生成mapper文件

项目新建接口,在接口名上使用 ALT+ENTER 组合键,点击如下行生成mapper文件

怎么在idea里配置适合自己mysql的依赖 idea配置mybatis_数据库_02

在项目目录下新建mapper目录存放mapper文件,并选择

怎么在idea里配置适合自己mysql的依赖 idea配置mybatis_intellij idea_03


此时接口对应的mapper文件已创建完毕

怎么在idea里配置适合自己mysql的依赖 idea配置mybatis_intellij idea_04

三、导入jar包

直接导入

下载相关文件:GitHub:mybatis下载地址 选择下载jar包和源码,如下:

怎么在idea里配置适合自己mysql的依赖 idea配置mybatis_mybatis_05


在项目中新建lib目录,导入日志包(方便查看信息)、数据库驱动包、mybatis包。

怎么在idea里配置适合自己mysql的依赖 idea配置mybatis_sql_06

然后在lib目录上右键点击 Add as library 进行jar包自依赖

怎么在idea里配置适合自己mysql的依赖 idea配置mybatis_intellij idea_07


maven方式

新建maven项目 方法 在pom.xml 文件中的 dependencies (没有就写上)标签里引入依赖:

<dependencies>
    <!--mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.4</version>
    </dependency>
    <!--sqlserver 数据库 -->
    <dependency>
      <groupId>com.microsoft.sqlserver</groupId>
      <artifactId>sqljdbc4</artifactId>
      <version>4.0</version>
    </dependency>
    <!--日志包 -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
       <version>4.12</version>
    </dependency>
</dependencies>

然后点击右上角导入即可

怎么在idea里配置适合自己mysql的依赖 idea配置mybatis_mybatis_08

四、生成JavaBean类

编写一个于数据库对象表一一对应的javabean类,其中各个属性名要与数据库列名相对应

怎么在idea里配置适合自己mysql的依赖 idea配置mybatis_mybatis_09

五、生成config.XML文件

新建conf目录存放XML文件

新建mybatis-config.xml文件,如果找不到新建XML文件选项可参考 此篇文章 将如下官方mybatis-config代码写入:

<?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}"/>
 <property name="url" value="${url}"/>
 <property name="username" value="${username}"/>
 <property name="password" value="${password}"/>
 </dataSource>
 </environment>
 </environments>
 <mappers>
 <mapper resource="org/mybatis/example/BlogMapper.xml"/>
 </mappers>
</configuration>

解析:
driver:数据库驱动,如SQLServer数据库:com.microsoft.sqlserver.jdbc.SQLServerDriver
url:数据库链接地址,如:jdbc:sqlserver://127.0.0.1:1433;DatabaseName=student
username:数据库用户名
password:数据库密码
mapper:指向对应的mapper文件(映射文件),稍后修改

六、创建 SqlSession 对象

创建SqlSessionFactory对象,返回一个SqlSession 对象(代表和数据库的一次对话)

SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像.SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例.每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心.同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在.在应用运行期间不要重复创建多次

SqlSession对象是非线程安全对象,所以不要定义为全局变量,否则在多线程环境中会出现资源冲突问题,应该使用时获取

public static void main(String[] args) throws IOException {
        String resource = "org/mybatis/example/mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(inputStream);
    }

修改resource路径为自己项目对应的config.xml文件

从SqlSessionFactory 中获取一个SqlSession实例,能直接执行已映射的SQL语句
例如,执行selectOne():

SqlSession session=sqlSessionFactory.openSession();
session.selectOne("",args);

其中,第一个参数为已经写好的SQL的唯一标识(mapper文件中)
第二个参数为所查询的值;

七、配置mapper文件

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">
<mapper namespace="org.mybatis.example.BlogMapper">
 <select id="selectBlog" resultType="Blog">
 select * from Blog where id = #{id}
 </select>
</mapper>

其中:
namespace:名称空间(指向对应的接口名)
id:唯一标识(指向对应的接口中的方法名)
resultType:返回值类型(即javabean类型)
#{id}:从传过来的参数中获取id的值

八、把写好的映射文件注册到全局配置文件中

在mybatis-config.cml文件中修改

<mapper resource="org/mybatis/example/BlogMapper.xml"/>

将resource配置为映射文件mapper的路径+文件名
如:com/conf/StudentDAO.xml

九、运行

调试运行

String resource = "com/conf/mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session=sqlSessionFactory.openSession();
       StudentDAO stu= session.selectOne("selectStudent","a");
       System.out.println(stu);
        session.close();

得出结果

十、接口的形式(建议使用)

以上方法为旧版mybatis编写方法,现在建议使用面相接口编程的方法进行编写

首先构造接口:

怎么在idea里配置适合自己mysql的依赖 idea配置mybatis_xml_10


其次生成接口对应的mapper文件(ALT+ENTER)

怎么在idea里配置适合自己mysql的依赖 idea配置mybatis_sql_11


注: Free Mybatis plugin可以使我们很方便的通过代码左部的绿色箭头在接口和mapper文件中进行切换

获取接口的实现对象:

StudentDAO DAO=session.getMapper(StudentDAO.class);

mapper接口没有实现类,mybatis会自动帮接口生成代理对象,代理对象实现具体业务逻辑。

实现代码:

String resource = "com/conf/mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session=sqlSessionFactory.openSession();
        try {
            StudentDAO DAO=session.getMapper(StudentDAO.class);		//新的方法
            Student stu = DAO.SelectStudent("admin");
            System.out.println(stu);
        } finally {
            session.close();
        }

十一、总结

两个重要的配置文件:
mybatis全局配置文件(上文的mybatis-config.xml)包含数据库连接池信息,事务管理器、系统运行环境信息等。(非必要,可使用java代码实现)

sql映射文件(mapper文件):保存每一个sql语句的映射信息,将sql从java代码里抽取出来。

一个SqlSession工具类
工具类:

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try{
            //指向mybatis配置文件
            String resource ="com/conf/mybatis-config.xml";

            InputStream inputStream= Resources.getResourceAsStream(resource);
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    /** 获取SqlSession的实例 */
    public static SqlSession sqlSession(){
       //参数设置为true自动提交事务 :sqlSessionFactory.openSession(true);
        return sqlSessionFactory.openSession();
    }
}

使用:

SqlSession sqlSession= MybatisUtils.sqlSession();
        try {
           StudentDAO DAO=sqlSession.getMapper(StudentDAO.class);
            Student stu = DAO.SelectStudent("admin");
            System.out.println(stu);
        } finally {
            sqlSession.close();
        }