Mybatis学习入坑(一)

本文详细介绍了如何在IDEA中创建一个MyBatis工程,包括添加依赖、配置mybatis-config.xml、编写Mapper接口和XML文件、创建实体类和实现类等步骤。同时,文章还列举了配置URL、namespace和resource路径时可能出现的错误及其解决方案,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis创建工程
idea创建普通maven工程就可以;
用到的依赖:这里推荐官网看
https://mybatis.org/mybatis-3/zh
在这里插入图片描述
可以在里面自行选择需要的依赖,写在pom文件中
创建目录格式
在这里插入图片描述
注意src目录下的main下面java里面的package包一定要一层一层创建!!!!
resources里面的目录结构要和dao层接口的一样,同样要一层一层创建!!!!

1、编写mybatis-config.xml文件

<?xml version="1.0" encoding="UTF8"?>
<!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"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.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>
    <!--每一个Mapper.xml都需要在Mybatis的核心配置文件中注册-->
    <mappers>
        <mapper resource="com/mybatis/dao/UserDao.xml"></mapper>
    </mappers>
</configuration>

主要两个位置:
第一个位置是

<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;CharacterEncoding=UTF-8"/>

mybatis是数据库名;
?后面如果删除useSSL=false&
报错:`

Thu Oct 22 22:48:16 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'`

删除:useUnicode=true&
报错:

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
 Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'

删除:CharacterEncoding=UTF-8
报错:

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'

第二个位置是非常重要一定要写对
这里写resources目录下UserDao.xml的相对路径com/mybatis/dao/UserDao.xml
2、UserDao.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">
<mapper namespace="com.mybatis.dao.UserDao">
    <select id="addUser" parameterType="com.mybatis.entity.User">
        insert into user values(#{uid},#{uname},#{uage},#{upsw})
    </select>
</mapper>

这里主要注意:
1、namespace写的是java目录下接口UserDao的包结构路径
com.mybatis.dao.UserDao
2、为什么文件名是UserDao.xml?可不可以是其他?
测试结构式可以的,但是最好写成一样的,方便接口多的时候可以相对应;(部分教程里面说一定要一样),其实只要在映射配置的xml文件中和接口实现方法中写对接口名,不影响程序执行;截图为证
在这里插入图片描述
在这里插入图片描述
3、里面的sql语句变量字段名必须和实体类User里面的成员变量名一致;但是可以不和数据库里面的字段名一致;(推荐写成一致的)
变量顺序要和User实体类里面的有参构造函数参数顺序相同:
在这里插入图片描述

不一致,参数会对应不上
3、写UserDao接口

package com.mybatis.dao;

import com.mybatis.entity.User;

public interface UserD {
    public void addUser(User user);
}

4、写实体类

package com.mybatis.entity;
public class User {
    private  int uid;
    private  String uname;
    private  int uage;
    private  String upsw;
    public User(){}

    public User(int uid, String uname, int uage, String upsw) {
        this.uid = uid;
        this.uname = uname;
        this.uage = uage;
        this.upsw = upsw;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public int getUage() {
        return uage;
    }

    public void setUage(int uage) {
        this.uage = uage;
    }

    public String getUpsw() {
        return upsw;
    }

    public void setUpsw(String upsw) {
        this.upsw = upsw;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", uage=" + uage +
                ", upsw='" + upsw + '\'' +
                '}';
    }
}

5、写实现类

package com.mybatis.dao;

import com.mybatis.entity.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class UserImpl implements UserD {

    public void addUser(User user) {
        //创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();
        //通过SqlSessionFactoryBuilder对象构建SqlSessionFactory对象
        SqlSessionFactory ssf=new SqlSessionFactoryBuilder().build(this.getClass().getClassLoader().getResourceAsStream("mybatis-config.xml"));
        //通过SqlSessionFactory创建SqlSession对象
        SqlSession ss=ssf.openSession();
        //执行数据库增删改查操作
        ss.insert("com.mybatis.dao.UserD.addUser",user);
        //提交事务
        ss.commit();
    }
}

6、运行类

package com.mybatis.run;

import com.mybatis.dao.UserImpl;
import com.mybatis.dao.UserD;
import com.mybatis.entity.User;
public class Run {
    public static void main(String[] args) {
        UserD userDao=new UserImpl();
        User user=new User(2,"li三",23,"123456");
        userDao.addUser(user);
    }
}

常见错误:
1:找不到resource
就是这玩意写错了
有的小伙伴说resource中目录结构要和java中的目录结构一样,实测可以不一样
在这里插入图片描述
只要在配置文件中resource目录写对,可以不一样的!!!!!!!!!(打脸ing)
但是刚入坑的我最开始并不知道namespace以及resource对应的是什么东东,所以被各种毒打;
写错路径报错:
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource /UserDao.xml
在这里插入图片描述
还有手贱写错parameterType的:报错
Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias ‘com.mybatis.dao.entity.User’. Cause: java.lang.ClassNotFoundException: Cannot find class: com.mybatis.dao.entity.User
在这里插入图片描述
实现类方法要和接口方法一致
在这里插入图片描述

参数:包结构.接口.方法
写错报错:Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.mybatis.UserD.addUser
在这里插入图片描述
爬坑ing!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值