第一个Mybatis程序

本文详细介绍了如何从零开始创建一个Mybatis项目,包括创建Maven项目、配置pom.xml、编写mybatis-config.xml、创建工具类、定义实体类和接口、创建Mapper配置文件以及进行单元测试。在测试过程中,强调了配置文件中的路径问题、Mapper的注册以及XML文件的引入。通过这个教程,读者可以掌握Mybatis的基本操作流程。
摘要由CSDN通过智能技术生成

第一个Mybatis程序

整体创建Mybatis程序的顺序:

  • 创建一个普通的Maven项目
  • 删除src文件
  • 在pom.xml文件中配置环境,并加入过滤文件的代码
  • 创建一个子项目,并在配置文件中加入过滤文件的代码
  • 在resource文件夹下创建一个mybatis-config.xml配置文件,用于连接数据库
  • 编写工具类,resource中是填写mybatis-config.xml配置文件的全限命名
  • 编写实体类和接口类
  • 编写一个用于实现接口的xml配置文件,namespace填写接口类的全限命名,id是绑定接口方法的名字,resultType填写返回值所在的全限命名
  • 在mybatis-config.xml配置文件中resource加入接口实现的xml文件的全限命名。
  • 测试:
    • 获取Sqlsession对象
    • 得到需要测试的接口类
    • 测试函数
    • 关闭sqlsession流

搭建环境

搭建数据库

新建项目

  • 新建一个普通Maven项目

  • 删除src目录

  • 导入Maven依赖

  • <dependencies>
    <!--        mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.26</version>
            </dependency>
    <!--        mybatis-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.7</version>
            </dependency>
    <!--        junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies>
    

创建一个模块(module)

  • 编写mybatis核心配置文件(在resourse文件下创建一个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核心配置文件-->
    <configuration>
        <environments default="development">
            <environment id="development">
    <!--            事务管理-->
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
    </configuration>
    
  • 编写mybatis工具类

  • 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 --> sqlSession
    public class MybatisUtils {
        private static SqlSessionFactory sqlSessionFactory;
        static {
            try {
                //获取SqlSessionFactory对象
                String resource = "org/mybatis/example/mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession();
    //        SqlSession sqlSession = sqlSessionFactory.openSession();
    //        return sqlSession;
    
        }
    }
    

    编写代码

    • 实体类

    • package com.xin.pojo;
      
      public class User {
          private int id;
          private String name;
          private String pwd;
      
          public User() {
          }
      
          public User(int id, String name, String pwd) {
              this.id = id;
              this.name = name;
              this.pwd = pwd;
          }
      
          public int getId() {
              return id;
          }
      
          public void setId(int id) {
              this.id = id;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public String getPwd() {
              return pwd;
          }
      
          public void setPwd(String pwd) {
              this.pwd = pwd;
          }
      
          @Override
          public String toString() {
              return "User{" +
                      "id=" + id +
                      ", name='" + name + '\'' +
                      ", pwd='" + pwd + '\'' +
                      '}';
          }
      
      }
      
      
    • Dao接口

    • package com.xin.dao;
      
      import com.xin.pojo.User;
      
      import java.util.List;
      
      public interface UserDao {
          List<User> getUserList();
      }
      
      
    • 接口实体类由原来的UserDaoImpl转变为一个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">
      <!--namespace=绑定一个对应的Dao/Mapper接口-->
      <mapper namespace="com.xin.dao.UserDao">
      <!--    id=需要绑定的方法的名字-->
          <select id="getUserList" resultType="com.xin.pojo.User">
              select * from mybatis.user
          </select>
      </mapper>
      
      

测试–junit测试

注意点:

org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the MapperRegistry.

在Mybatis-config.xml文件后面加入

	<mappers>
        <mapper resource="com/kuang/dao/UserMapper.xml"/>
    </mappers>
  • 注意上述代码的路径需要用斜杠,而且也是必须用斜杠,否则会出现初始化失败的错误

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QPd9t9Pa-1629010589580)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210812234750543.png)]

核心配置文件中需要注册Mapper

  • xml文件里面不允许出现中文注释,否则会出现初始化错误的报错
  • java.lang.ExceptionInInitializerError

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4coxA6H5-1629010589583)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210812235020975.png)]

  • 需要在主配置文件中加上导入文件的代码:

  • <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>true</filtering>
                </resource>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>true</filtering>
                </resource>
            </resources>
        </build>
    
  • 否则会出现找不到xml文件的错误

测试代码:

package com.kuang.dao;

import com.kuang.pojo.User;
import com.kuang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoTest {

    @Test
    public void test(){
        //第一步:获得sqlsession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //方式一:getMapper
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.getUserList();

        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();

    }
}

测试结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xdejWoWf-1629010589584)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210812235439057.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 中使用临时表的方式和在普通 SQL 语句中使用临时表的方式是一样的。 首先需要在 SQL 语句中创建临时表,然后再进行相关操作。下面以 MySQL 数据库为例,演示如何在 MyBatis 中使用临时表。 1. 创建临时表 在 MySQL 中,可以使用以下语句创建临时表: ```sql CREATE TEMPORARY TABLE temp_table ( id INT PRIMARY KEY, name VARCHAR(20) ); ``` 2. 在 MyBatis 中使用临时表 首先,在 MyBatis 的 Mapper 文件中定义 SQL 语句,并将创建临时表的 SQL 语句和相关操作的 SQL 语句写在一起,例如: ```xml <mapper namespace="com.example.mapper.TempTableMapper"> <select id="queryTempTable" resultType="java.util.Map"> <![CDATA[ CREATE TEMPORARY TABLE temp_table ( id INT PRIMARY KEY, name VARCHAR(20) ); INSERT INTO temp_table (id, name) VALUES (1, '张三'); INSERT INTO temp_table (id, name) VALUES (2, '李四'); SELECT * FROM temp_table; ]]> </select> </mapper> ``` 在上面的例子中,先创建了一个临时表 `temp_table`,然后插入了两条数据,最后查询了整个表。 3. 调用 Mapper 方法执行 SQL 语句 在 Java 代码中,调用 Mapper 方法执行 SQL 语句即可,例如: ```java public interface TempTableMapper { List<Map<String, Object>> queryTempTable(); } public class MyBatisTest { public static void main(String[] args) { SqlSession sqlSession = MyBatisUtil.getSqlSession(); TempTableMapper tempTableMapper = sqlSession.getMapper(TempTableMapper.class); List<Map<String, Object>> resultList = tempTableMapper.queryTempTable(); System.out.println(resultList); sqlSession.close(); } } ``` 最后,执行 Java 代码即可看到查询结果。需要注意的是,在 MyBatis 中创建的临时表只在当前的会话中存在,在会话关闭时会自动删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值