进阶MyBatis --实现用户的增删改查(详细步骤,附源码)

前言:

	对于一个系统而言,实现对用户的增删改查是必不可少的,也是最基础的部分,在
	这里,结合之前的配置文件,实现对用户增删改查的小系统。
按照我们前面所了解的实现步骤,走起!!!

实现:

1. 配置文件的修改:

(需要增加映射文件,告诉MyBatis去哪里找对应的SQL语句)
<?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>
<properties resource="jdbc.properties"/>
<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </dataSource>
    </environment>
</environments>
<mappers>
    <!-- 一张表对应一个映射文件 ,资源一般都是路径,所以用 '/',包名后面的类名时我们常常选择用'.'   -->
    <!-- 映射文件告诉 Mybatis 去哪里找相对应的映射文件-->
    <mapper resource="rj/cool/dao/UserMapper.xml"/>
</mappers>
</configuration>

2. 创建 sqlSessionFactory 以及获得 sqlSession 实例:

由于我们每次执行 Sql 语句时都需要一个 sqlSession 实例,所以为了方便,
我们将这些每次都会用到的代码写到一个帮助类中,实现 重用,提高我们开发
的效率。
package rj.cool.util;

import com.mysql.cj.Session;
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;

public class MyBatisDButils {

    /**
     * 通过配置文件创建 SqlSessionFactory 是 SqlSession 的一个工厂类
     *
     * */
    public static SqlSessionFactory getSqlSessionFactory() throws IOException {
        // 配置文件的位置
        String resource = "mybatis-config.xml";
        // 通过 Resources 来加载配置文件的信息
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 获得 sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        return sqlSessionFactory;
    }

    /**
     * SqlSession 通过 id 找到对应的 SQL 语句,执行 SQL 语句
     *
     * */
    public static SqlSession getSession() throws IOException {
        // 通过工厂模式获得 sqlSession
        SqlSession session = getSqlSessionFactory().openSession();
        return session;
    }

}

3. 创建实体类:

对应数据库中的一张表。

既然对应数据中的一张表,那么我们先来看看数据库中的表是什么样子:
(先拿一个表作为例子)

数据库中的表

这里说的对应的一张表的意思是数据库中的列名对应我们Java实体类中的对象的属性。
关于这点不理解的可以向上滚动找到 MyBatis 基础进行查看。

User.java:

package rj.cool.bean;

public class User {
    private int id;
    private String name;
    private int 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 int getPwd() {
        return pwd;
    }

    public void setPwd(int pwd) {
        this.pwd = pwd;
    }


}

4. 创建UserMapper.xml文件:

这个文件就是在配置文件中写到的 映射文件的路径,通过 resource 属性找到该 ...xml 文件,找到
该文件做些什么呢?
这时候就开始写具体的 SQL 语句啦。(嘻嘻,终于到了期待已久的SQL语句啦!)
在看具体的代码时先来点小干货: id = #{id},这个是 JSTL 表达式里面的东西,在该映射文件中会有
多个地方有所体现。当遇到这个东西时,我们的语句会去实体类中进行匹配,找到 getID() 方法从而得
到其内容。(具体细节可以去学习一下相关的表达式,在此不再多加赘述)

在创建改文件前我们先来了解一个知识: 面向接口开发。
在当前这个文件,我们先来简单说一下面向接口开发,之后会有专门的文章介绍该内容。
面向接口开发可以使得降低耦合性,也就是大佬们常说的松耦合,在开发中,我们的用户肯定不止是面对学生的,
有可能面向各个方面的用户,这时候假设没有接口,我们就需要去重新写类,写方法,但是当有接口后,我们只需
要通过接口去实现我们需要的内容即可。例如学生用户的增删改查可以去实现接口实现增删改查,相对应的管理
层用户就不需要再去重写具体的方法,也只需要去实现接口就行了。
总之:接口使得我们的开发更加实用,同时,大家都遵循一个共同的标准,使得我们的开发更加规范化。

UserMapper.java:(接口)

package rj.cool.dao;

import rj.cool.bean.User;

import java.util.List;

// 面向接口开发
public interface UserMapper {
    // 增加用户
    public int addUser(User user);
    // 删除用户
    public int delUser(int id);
    // 更新用户
    public void updateUser(User user);
    // 查询单个用户
    public User selectUsers(int id);
    // 查询所有用户
    public List<User> selectAll();
}

UserMapper.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="rj.cool.dao.UserMapper">
         <!-- 根据 id 查找对应的用户-->
          <select id="selectUser" resultType="rj.cool.bean.User">
                select * from User where id = #{id}
          </select>
         <!-- 查找所有用户 -->
         <select id="findAll" resultType="rj.cool.bean.User">
             select * from user
         </select>
         <!-- 增加新的用户 -->
        <insert id="addUser" parameterType="rj.cool.bean.User" useGeneratedKeys="true">
              insert into user(name,pwd) values(#{name},#{pwd})
         </insert>
        <!-- 删除用户 -->
        <delete id="delUser" parameterType="int">
             delete from user where id = #{id}
         </delete>
        <!-- 更新用户信息 -->
        <update id="updateUser" parameterType="rj.cool.bean.User">
            update user set name = #{name},pwd = #{pwd} where id = #{id}
        </update>
</mapper>

5. 测试:

在这里,我们用 IDEA 中的单元测试进行逐个测试:

数据库表初始内容:

在这里插入图片描述
查询单个用户:

   @Test
    public void selectUsers() throws IOException {
        SqlSession session = MyBatisDButils.getSession();
        User user  = session.selectOne("rj.cool.dao.UserMapper.selectUser",2);
        System.out.println(user.getId() + "   "  + user.getName() + "   " + user.getPwd());
        session.close();
    }

效果展示:
在这里插入图片描述
增加用户:

    @Test
    public void addUser() throws IOException {
        User user = new User();
        user.setName("小B");
        user.setPwd(123);
        SqlSession session = MyBatisDButils.getSession();
        // 这种方式是通过找到对应的接口类进行实现其里面的方法(通过getMapper())
		//int result = session.getMapper(UserMapper.class).addUser(user);
        int result = session.insert("rj.cool.dao.UserMapper.addUser",user);
        // 在这里一定要手动提交,否则数据不会出现在数据库中
        session.commit();
        System.out.println(result);
        session.close();
    }

效果图:
在这里插入图片描述
删除用户:

    @Test
    public void delUser() throws IOException {
        SqlSession session = MyBatisDButils.getSession();
        int result =  session.delete("rj.cool.dao.UserMapper.delUser",8);
        session.commit();
        session.close();
        System.out.println(result);
    }

效果图:
id 为 8 的用户已经下线啦。
在这里插入图片描述
修改用户信息:

    @Test
    public void updateUser() throws IOException {
        SqlSession session = MyBatisDButils.getSession();
        User user = new User();
        user.setName("IceSword");
        user.setPwd(11111);
        user.setId(12);
        session.update("rj.cool.dao.UserMapper.updateUser",user);
        session.commit();
        session.close();
    }

在这里插入图片描述

后记:

到此,基本的增删改查已经基本实现啦。
如果你需要源码,欢迎加我的QQ,共同学习。
由于本人也是初学者,可能有很多地方解释的不到位,或者有些地方有Bug,欢迎各位路过的大佬能够
指出,在下万分感激。
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘小蓝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值