第一个Mybatis程序

Mybatis学习笔记1-01第一个Mybatis入门程序及问题详解

1.数据库中有user表,属性如下
在这里插入图片描述

2.编写用户实体类User.java
3.编写MybatisUtils工具类,方便使用SqlSessionFactory获得sqlsession,代码封装到具体类,提升代码的重用

public class MybatisUtils {
   
    private static SqlSessionFactory sqlSessionFactory;
   static {
           try {
               //1.使用Mybatis获取SqlSessionFactory对象
               String resource = "mybatis-config.xml";
               InputStream inputStream = Resources.getResourceAsStream(resource);
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

           } catch (IOException e) {
               e.printStackTrace();
           }
   }

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

此处注意!!!

 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

要替换成

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

不替换的话会导致sqlsession的空指针异常。因为sqlSessionFactory已经在上面定义了的类中定义了!

4.工具类编写完成后,可开始写dao以及mapper

public interface UserDao {
    //查询所有用户
    List<User> getUserList();
}

<?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接口所在位置">
    <select id="getUserList" resultType="换成自己的实体类所在位置">
        select * from mybatis.user
    </select>
</mapper>

注意!!!

mapper namespace中一定要绑定对应的dao或者mapper接口,来让类与sql产生交集,达到对数据库操作的目的

5.编写测试文件

public class UserDaoTest {

    @Test
    public void test(){
        //1.获取sqlsession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //方式1:getMapper
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.getUserList();

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

        sqlSession.close();
    }
}

6.mybatis的配置文件可去mybatis官网自行复制代码,改成自己对应的代码就行。

最后运行test,查询出用户列表
到此第一个mybatis入门程序就已经完成!

如果是使用maven的同学最后报如下的错误

java.lang.ExceptionInInitializerError
	at com.djc.dao.UserDaoTest.test(UserDaoTest.java:15)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)
Caused by: org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### The error may exist in com/djc/dao/UserMapper.xml
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/djc/dao/UserMapper.xml
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)
	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64)
	at com.djc.utils.MybatisUtils.<clinit>(MybatisUtils.java:21)
	... 23 more
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/djc/dao/UserMapper.xml
	at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:121)
	at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:98)
	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:78)
	... 25 more
Caused by: java.io.IOException: Could not find resource com/djc/dao/UserMapper.xml
	at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:114)
	at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:100)
	at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:372)
	at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:119)
	... 27 more

这个错误是因为资源导出失败,导致找不到mapper.xml
只需要在pom.xml中添加如下依赖

    <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>

完成!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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 中创建的临时表只在当前的会话中存在,在会话关闭时会自动删除。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值