MyBatis 快速入门【中】

简介: MyBatis 快速入门【中】

MyBatis 快速入门【中】


6.创建NLC_MyBatis\mybatis_quickstart\src\main\java\com\nlc\mapper\MonsterMapper.xml


配置addMonster方法

1. id=“addMonster” 就是接口的方法名

2. parameterType=“com.nlc.entity.Monster” 放入的形参的类型

3. 注意"com.nlc.entity.Monster" 可以简写

4. 写入sql语句=> 在sqlyog 写完成-测试通过,再拿过来

5. (age, birthday, email, gender, name, salary) 表的字段

6. (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary}) 是从传入的monster对象属性值

7. 这里 #{age} age 对应monster对象的属性名,其它一样

<?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">
<!--
    1. 这是一个mapper xml 文件
    2. 该文件可以去实现对应的接口的方法
    3. namespace 指定该xml文件和哪个接口对应!!!
-->
<mapper namespace="com.nlc.mapper.MonsterMapper">
   <!--配置addMonster
       1. id="addMonster" 就是接口的方法名
       2. parameterType="com.nlc.entity.Monster" 放入的形参的类型
       3. 注意"com.nlc.entity.Monster" 可以简写
       4. 写入sql语句=> 在sqlyog 写完成-测试通过,再拿过来
       5. (`age`, `birthday`, `email`, `gender`, `name`, `salary`) 表的字段
       6. (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary}) 是从传入的monster对象属性值
       7. 这里 #{age} age 对应monster对象的属性名,其它一样
   -->
    <insert id="addMonster" parameterType="com.nlc.entity.Monster" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO `monster`
        (`age`, `birthday`, `email`, `gender`, `name`, `salary`)
        VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})
    </insert>
</mapper>


7. 修改NLC_MyBatis\mybatis_quickstart\src\main\resources\mybatis-config.xml


  1. 这里我们配置需要关联的Mapper.xml
  2. 这里我们可以通过菜单 Path from source root
    <mappers>
        <mapper resource="com/nlc/mapper/MonsterMapper.xml"/>
    </mappers>


8. 创建工具类NLC_MyBatis\mybatis_quickstart\src\main\java\com\nlc\util\MyBatisUtils.java


MyBatisUtils 工具类,可以得到SqlSession

public class MyBatisUtils {
    //属性
    private static SqlSessionFactory sqlSessionFactory;
    //编写静态代码块-初始化sqlSessionFactory
    static {
            try {
                //指定资源文件, 配置文件mybatis-config.xml
                String resource = "mybatis-config.xml";
                //获取到配置文件mybatis-config.xml 对应的inputStream
                //加载文件时,默认到resources目录=>运行后的工作目录target-classes
                InputStream resourceAsStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
                System.out.println("sqlSessionFactory="+ sqlSessionFactory.getClass());
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
    /**
    * 1. 获得SqlSession 的实例
    * 2. SqlSession 提供了对数据库执行SQL 命令所需的所有方法。
    * 3. 通过SqlSession 实例来直接执行已映射的SQL 语句
    * @return
    */
    //编写方法,返回SqlSession对象-会话
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
}


9.创建NLC_MyBatis\mybatis_quickstart\src\test\java\com\nlc\mapper\MonsterMapperTest.java


完成初始化配置,创建测试方法

public class MonsterMapperTest {
    //属性
    //这个是Sql 会话,通过它可以发出sql 语句
    private SqlSession sqlSession;
    private MonsterMapper monsterMapper;
    /**
     * 1. 当方法标注 @Before, 表示在执行你的目标测试方法前,会先执行该方法,相当于spring的前置通知
     * 2. 这里在测试的时候,可能会出现一些麻烦,下面会说解决方案
     */
    //编写方法完成初始化
    @Before
    public void init() {
       //通过SqlSessionFactory 对象获取一个SqlSession 会话
        sqlSession = MyBatisUtils.getSqlSession();
        //获取到到MonsterMapper对象 class com.sun.proxy.$Proxy7 代理对象
        //, 底层是使用了动态代理机制
        monsterMapper = sqlSession.getMapper(MonsterMapper.class);
        System.out.println("monsterMapper=" + monsterMapper.getClass());
    }
    @Test
    public void addMonster() {
        for (int i = 0; i < 2; i++) {
            Monster monster = new Monster();
            monster.setAge(10 + i);
            monster.setBirthday(new Date());
            monster.setEmail("kate@qq.com");
            monster.setGender(1);
            monster.setName("大象精-" + i);
            monster.setSalary(1000 + i * 10);
            monsterMapper.addMonster(monster);
            System.out.println("添加对象--" + monster);
            System.out.println("添加到表中后, 自增长的id=" + monster.getId());
        }
        //如果是增删改, 需要提交事务
        if(sqlSession != null) {
            sqlSession.commit();
            sqlSession.close();
        }
        System.out.println("保存成功...");
    }


10.异常测试


错误原因


看看是否可以添加成功, 这时可能会出现找不到Xxxxmapper.xml 错误, 分析原因:

af5b25fee38d42f5a69c3524acb464bf.png


解决方法


1.在父项目NLC_MyBatis增加build配置,导出xml文件。

2.idea->build->rebuild project[要执行,否则还是错误]。

3.这时应该就可以了,如果不行,需要切换一下maven路径。


在父工程的pom.xml 加入build 配置

在build中配置resources,来防止我们资源导出失败的问题


1.不同的idea/maven 可能提示的错误不一样

2.不变应万变,少什么文件,就增加相应配置即可

3.含义是将 src/main/java目录和子目录 和 src/main/resources目录和子目录的资源文件 xml 和 properties在build项目时,导出到对应的target目录下。


    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>

上面不成功,切换maven目录

d27c3ebe9f204def932a0444fb672921.png

5d128d2a6399425aac69d5f43d75b448.png### 成功验证

8f196af3b7684cf5aa15cb566dd4ddc6.png


😄总结


  1. 出现找不到文件的异常时,可能是路径映射的问题,按照小编上面的方法就可以解决。
  2. 静态代码块只会执行一次,创建sqlSessionFactory后,获取的sqlSession 都是同一个地方的。
  3. 如果是查询不需要进行commit提交,但是需要close把sqlSession放回sqlSessionFactory。
  4. 增删改这种需要对数据库进行改变的行为,需要commit提交。
  5. 获取资源文件加载时,默认到resources目录=>运行后的工作目录target-classes。


😁热门专栏推荐

第1篇⁣⁣⁣⁣  -MyBatis 介绍

MyBatis入门篇 MyBatis(简化数据库操作的持久层框架)–快速入门[上]


文章到这里就结束了,如果有什么疑问的地方欢迎指出,诸大佬们一起来评论区一起讨论😁

希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻

如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

相关文章
|
SQL Java 数据库连接
MyBatis快速入门以及环境搭建和CRUD的实现
MyBatis快速入门以及环境搭建和CRUD的实现
93 0
|
SQL Java 关系型数据库
Mybatis知识【Mybatis快速入门】第二章
Mybatis知识【Mybatis快速入门】第二章
|
19天前
|
SQL Java 数据库连接
MyBatis-Plus快速入门:从安装到第一个Demo
本文将带你从零开始,快速入门 MyBatis-Plus。我们将首先介绍如何安装和配置 MyBatis-Plus,然后通过一个简单的示例演示如何使用它进行数据操作。无论你是 MyBatis 的新手还是希望提升开发效率的老手,本文都将为你提供清晰的指导和实用的技巧。
106 0
MyBatis-Plus快速入门:从安装到第一个Demo
|
5月前
|
Java 数据库连接 API
后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解
后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解
63 3
|
6月前
|
SQL Java 数据库连接
Mybatis快速入门,Mybatis的核心配置文件
Mybatis快速入门,Mybatis的核心配置文件
46 1
|
5月前
|
Java 数据库连接 Apache
JavaWeb基础第二章(Maven项目与MyBatis 的快速入门与配置)
JavaWeb基础第二章(Maven项目与MyBatis 的快速入门与配置)
|
6月前
|
XML Java 数据库连接
【MyBatisPlus】快速入门、常用注解、常用配置
【MyBatisPlus】快速入门、常用注解、常用配置
77 0
|
6月前
|
XML SQL Java
MybatisPlus快速入门
MybatisPlus快速入门
86 1
|
6月前
|
SQL Java 数据库连接
【MyBatisPlus】通俗易懂 快速入门 详细教程
【MyBatisPlus】通俗易懂 快速入门 详细教程
656 0
|
6月前
|
SQL Java 数据库连接
【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门
【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门
209 0