Mybatis实现Mysql增删改查

前言:

网上很多博客讲的都太简略了,对很多刚接触的朋友很不友好,所以做了一个从零开始的傻瓜式教程。直接开始教程吧就。

过程:

第一步:创建一个新的maven项目。
file/New/Project... 

注意点:JDK版本不能选择18这种不支持STL的版本,这里可以选择11版本,就是把文件下了就行,如果用18版本可能会出现pom.xml为空以及没有src目录的问题,这点要非常注意。看那个Project SDK!

什么都不选直接点Next

到这一步直接取名字就可以了,注意一下文件路径改不改,尽量不要用中文,开头字母也尽量不要大写。然后点击Finish

这就是新建的一个正常的maven项目,如果你出现了pom为空的问题可以去看看JDK版本

 如果一切正常就开始下一步。

第二步:创建数据库

我用的sqlyog,这里我的数据库名是user,建的表也是user ,这里没啥说的,

注意:在创建数据库的时候记得选编码格式,自动可能会出现中文无法输入的问题。我选择的是utf8mb4。

 下面是user表的细节。最开始在完全不会的时候建议别改,后面会了随便改,害怕改了后面程序运行不下来。这里是直接图形化的,直接用sql语句写也没啥强调的点。

 最后的结构是这样

 当你数据表建好之后就进入下一步。

第三步:导入必要的pom依赖。

下面的代码直接复制,然后粘贴到pom.xml里面。注意一下mysql的version,这个最方便的方法就是看你下载的mysql文件夹,后面数字就是你的版本,至于其他两个没出问题就不用修改。

<dependencies>
        <!--mybatis核心包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
        <!--mysql驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
        <!-- 单元测试 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
    </dependencies>

就复制到这就行了。

会报错但不用管!这个是里面一个插件有问题,不干扰正常使用

第四步:创建目录结构

位置在src/main/java/下面

取名字建议取com.XXX,XXX为你的项目名字。

这里我取的是com.yue

 创建完之后在这个包下面创建entity目录,mapper目录,和test三个目录,目录如下

 目录结构创建完就可以进行下一步。

第五步:完善entity目录

在entity目录下创建一个Userentity.java文件。 

 复制下面代码这里package调成自己的包名,我是因为中间是yue所以才是这样,里面的类里面三个元素名字注意和你的数据库表的内容一样,这样能避免很多问题。(这点很重要)

entity起到的作用就是把你的元素声明一下,不涉及函数。

package com.yue.entity;
import lombok.Data;

@Data
public class Userentity {
    private  int id;
    private  String username;
    private  String pwd;
}

这一步结束就到下一步。

第六步:完善mapper目录

创建一个Usermapper.inferface,还是点创建Java,但选下面那个就是了

复制代码

package com.yue.mapper;
import com.yue.entity.Userentity;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.List;

public interface Usermapper {
    int save(Userentity userEntity);
    int delete(int id);
    int update(@Param("username") String name ,@Param("pwd") String password);
    List<Userentity> Quary(String name);

}

Usermapper.inferface起到的作用就是声明你要用的函数,这里是抽象类的。

这一步完成之后创建一个UserDao.java,还是在这个目录下,这个是为了方便后面进行增删改查,对这些内容进行一个抽象封装这里面实现的内容就不详细解释了,下次有时间再说。

复制代码:

package com.yue.mapper;

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 com.yue.entity.Userentity;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserDao {

    public void saves(String name,String pwd){
        try {
            String resource="mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session=sqlSessionFactory.openSession();
            Usermapper mapper=session.getMapper(Usermapper.class);

            Userentity userEntity=new Userentity();
            userEntity.setUsername(name);
            userEntity.setPwd(pwd);

            int i=mapper.save(userEntity);

            if (i>0){
                System.out.println("成功");
                session.commit();
            }
            else {
                System.out.println("失败");
            }

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

    }


    public void Del(int id){
        try {
            String resource="mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session=sqlSessionFactory.openSession();
            Usermapper mapper=session.getMapper(Usermapper.class);

            int j = mapper.delete(id);

            if (j>0){
                System.out.println("成功");
                session.commit();
            }
            else {
                System.out.println("失败");
            }

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

    }

    public void change(String username,String pwd){
        try {
            String resource="mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session=sqlSessionFactory.openSession();
            Usermapper mapper=session.getMapper(Usermapper.class);


            int s = mapper.update(username,pwd);
            if(s == 1){
                System.out.println("修改成功");
                session.commit();
            }else{
                System.out.println("表中无此数据");
            }


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

    }


    public void search(String name){
        try {
            String resource="mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session=sqlSessionFactory.openSession();

            List<Userentity> list = session.getMapper(Usermapper.class).Quary(name);
            for(Userentity userEntity : list){
                System.out.println("序号:"+userEntity.getId()+"  用户名:"+userEntity.getUsername()+"  密码:"+userEntity.getPwd());
            }


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

    }

}

文件目录为:

 当文件目录这个样子的时候就可以进行下一步了

第六步:完善resources

在这下面创建xml而不是在其他地方就是因为这个地方优先搜索,其他地方还要注意文件路径。

创建两个xml文件

一个是mybatis-config.xml,一个是Usermapper.xml

第一个文件内容是连接数据库,里面要修改的地方就是数据库名和密码等。

username和password选自己的就行了,然后url要注意的就是localhost:3306/user的user是只你的数据库,至于后面是编码格式,时区等,不需要进行修改。

下面的<mapper resource就是你的另一个xml,如果你不放在resource目录下就要考虑很复杂的文件路径问题,建议不要考虑

<?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="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/user?characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="Usermapper.xml"></mapper>
    </mappers>
</configuration>

Usermapper.xml里面是具体的sql语句。

代码:

<?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.yue.mapper.Usermapper">
    <insert id="save" parameterType="com.yue.entity.Userentity">
        INSERT  INTO user (username,pwd)VALUES (#{username},#{pwd})
    </insert>

    <delete id="delete" parameterType="com.yue.entity.Userentity">
        delete from user where id=#{id}
    </delete>

    <update id="update" parameterType="com.yue.entity.Userentity">
        update user set pwd=#{pwd} where username=#{username}
    </update>

    <select id="Quary" parameterType="com.yue.entity.Userentity" resultType="com.yue.entity.Userentity">
        select * from user where username=#{username}
    </select>

</mapper>

如果你的数据库的内容和你在最开始写的东西不一样,也就是entity.java不一样,会报错,要整一个resultMap什么的,很复杂,所以建议不要不一样。

这两个文件创建完之后就可以进行下一步了,也是最后一步。

第六步:创建测试文件

在test目录下创建一个MybitsTest.java文件,目录结构为

 当你有这样的文件路径之后就马上结束了,复制以下代码在该java文件。运行测试一下增删改查的功能就可以了。

package com.yue.test;

import com.yue.mapper.UserDao;

public class MybitsTest {
    public static void main(String[] args) {
        //声明一个Dao的对象
        UserDao userDao = new UserDao();
        //增加
        userDao.saves("编号1","1234");
        //删除
        userDao.Del(8);
        //修改
        userDao.change("st","11122");
        //查找
        userDao.search("st");
    }
}

正常的运行结果

 

 当你看到这种运行结果就说明没问题了。恭喜实现了功能,下面详细介绍一下增删改查的具体实现。

本身的运行逻辑就在于:在Userentity和Usermapper里面分别声明你的变量和函数,然后在mybatis-config.xml里面连数据库,在Usermapper.xml里面写具体的函数语句,也就是把抽象函数实例化,最后因为嫌测试起来重复的太多,就直接写一个UserDao,在里面把增删改查操作封装一下。最后在test文件里创建一个Dao的实例对象,调用函数即可。

增:

 public void saves(String name,String pwd){
        try {
            String resource="mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session=sqlSessionFactory.openSession();
            Usermapper mapper=session.getMapper(Usermapper.class);

            Userentity userEntity=new Userentity();
            userEntity.setUsername(name);
            userEntity.setPwd(pwd);

            int i=mapper.save(userEntity);

            if (i>0){
                System.out.println("成功");
                session.commit();
            }
            else {
                System.out.println("失败");
            }

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

    }

1,先导入了连接数据库的资源文件,也就是mybatis-config.xml,这几行可以当作固定搭配,不变直接复制即可

String resource="mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session=sqlSessionFactory.openSession();

2,然后根据情况,如果是增删改这种操作类的,就是下面这个

Usermapper mapper=session.getMapper(Usermapper.class);

    如果是查找就是这个

List<Userentity> list = session.getMapper(Usermapper.class).Quary(name);

在前面这些完成之后就可以创建一个实例对象然后设置一下,因为开始我们save函数传参传的就是userEntity对象。

Userentity userEntity=new Userentity();
userEntity.setUsername(name);
userEntity.setPwd(pwd);

在这些都设定好的情况下,直接通过mapper对象调用函数,用int承接判断状态,如果>0就提交,f反之就失败,这是根据返回值来判断。

int i=mapper.save(userEntity);
            if (i>0){
                System.out.println("成功");
                session.commit();
            }
            else {
                System.out.println("失败");
            }

最后把这一系列操作放在try...catch里面就结束。

对应的Usermapper的sql语句是

<insert id="save" parameterType="com.yue.entity.Userentity">
        INSERT  INTO user (username,pwd)VALUES (#{username},#{pwd})
    </insert>

 删:这个和增唯一的区别就是调用函数的那一行,和sql语句,没啥好说的

int j = mapper.delete(id);

对应的Usermapper的sql语句是

<delete id="delete" parameterType="com.yue.entity.Userentity">
        delete from user where id=#{id}
    </delete>

改:我的改是通过名字修改密码,所以传入两个参数,这里要注意的点就是,如果要传入两个参数,在 Usermapper声明函数的时候要用@Param声明。括号里面的是Userentity对应的,如果不这样会报错。

代码唯一变得差不多也就这,还有判断变成了是否判1

 int s = mapper.update(username,pwd);

对应的Usermapper的sql语句是

   <update id="update" parameterType="com.yue.entity.Userentity">
        update user set pwd=#{pwd} where username=#{username}
    </update>

查:

public void search(String name){
        try {
            String resource="mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session=sqlSessionFactory.openSession();

            List<Userentity> list = session.getMapper(Usermapper.class).Quary(name);
            for(Userentity userEntity : list){
                System.out.println("序号:"+userEntity.getId()+"  用户名:"+userEntity.getUsername()+"  密码:"+userEntity.getPwd());
            }


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

    }

查的变化很大,因为可能要承接很多,所以前面代码也从

Usermapper mapper=session.getMapper(Usermapper.class);

变成用List承接的

 List<Userentity> list = session.getMapper(Usermapper.class).Quary(name);

然后还得输出,输出就用遍历把list都输出一下就好了

for(Userentity userEntity : list){
                System.out.println("序号:"+userEntity.getId()+"  用户名:"+userEntity.getUsername()+"  密码:"+userEntity.getPwd());
            }

对应的Usermapper的sql语句是

    <select id="Quary" parameterType="com.yue.entity.Userentity" resultType="com.yue.entity.Userentity">
        select * from user where username=#{username}
    </select>

结语:

里面一些可能报错的点都提出来了,如果还有问题可以评论区讨论。个人感觉这个过程和直接用jdbc连接数据库操作可能不太一样,但本质上是一样的,不同之处只是把过程给拆开放在了不同的文件进行处理,像是Userentity.java这个文件放的就只是存的变量,Usermapper.java放的也只是声明,而xml文件里本质就一个连数据库的xml,还有一个实例化Usermapper.java里面函数的Usermapper.xml,其他的Dao只是把整体的实现封装了一下,让在test里面展现的时候更简单一些而已,本质上逻辑没有太大变化。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值