_Mybatis入门案例【超详细】

2023-11-21 00:51:27 浏览数 (1)

前言

在原来上一篇的基础上,我们需要新建一个数据库mybatis,在该数据库下新建一个user表,并插入数据,如下图所示!

        还要新建一个实体类User

代码语言:javascript复制
package com.mybatisstudy.pojo;

public class User {
    private int id;
    private String username;
    private String sex;
    private String address;

    public User(String programmer, String man, String shangHai) {
        this.username = programmer;
        this.sex = man;
        this.address = shangHai;
    }

    public User(int i, String programmer_1, String woman, String shenzhen) {
        this.id = i;
        this.username = programmer_1;
        this.sex = woman;
        this.address = shenzhen;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User[ "  
                "id="   id  
                ", username='"   username   '''  
                ", sex='"   sex   '''  
                ", address='"   address   '''  
                " ]";
    }
}

一、查询所有用户

1. 持久层添加查询所有方法

代码语言:javascript复制
// 查询所有用户
    List<User> findAll();

2. 在UserMapper.xml映射文件添加查询语句

代码语言:javascript复制
<select id="findAll" resultType="com.mybatisstudy.pojo.User">
        select * from user
</select>

3. 测试方法

        在test包下新建一个测试类TestUserMapper.java,注意测试类需要插入一个Junit依赖

代码语言:javascript复制
import com.mybatisstudy.mapper.UserMapper;
import com.mybatisstudy.pojo.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;


import java.io.InputStream;
import java.util.List;

public class TestUserMapper {

    InputStream is = null;
    SqlSession session = null;
    UserMapper userMapper = null;

    //前置方法,不必重复代码
    @Before
    public void before() throws Exception {
        System.out.println("前置方法执行·············");
        // (1)读取核心配置文件
        is = Resources.getResourceAsStream("SqlMapConfig.xml");
        // (2)创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        // (3)SqlSessionFactoryBuilder对象获取SqlSessionFactory对象
        SqlSessionFactory factory = builder.build(is);
        // (4)SqlSessionFactory对象获取SqlSession对象
        session = factory.openSession();
        // (5)SqlSession对象获取代理对象
        userMapper = session.getMapper(UserMapper.class);
    }

    //后置方法,释放资源
    @After
    public void after() throws Exception {
        System.out.println("后置方法执行·············");
        session.close();
        is.close();
    }
    // 测试查询所有用户的方法
    @Test
    public void testFindAll() throws Exception{
        // 代理对象执行方法
        List<User> all = userMapper.findAll();
        all.forEach(System.out::println);

}

4. 运行结果

OK,下面我们来详细解释一下前置方法,前置方法也是MyBatis核心对象和工作流程

二、MyBatis核心对象及工作流程

1. MyBatis核心对象

SqlSessionFactoryBuilder

SqlSession工厂构建者对象,使用构造者模式创建SqlSession工厂对象。

SqlSessionFactory

SqlSession工厂,使用工厂模式创建SqlSession对象。

SqlSession

该对象可以操作数据库,也可以使用动态代理模式创建持久层接口的代理对象操作数据库。

Mapper

持久层接口的代理对象,他具体实现了持久层接口,用来操作数据库。

2. MyBatis工作流程

创建SqlSessionFactoryBuilder对象

SqlSessionFactoryBuilder对象构建了SqlSessionFactory对象: 构造者模式

SqlSessionFactory对象生产了SqlSession对象:工厂模式

SqlSession对象创建了持久层接口的代理对象:动态代理模式

代理对象操作数据库

3. 使用SqlSession操作数据库

        除了代理对象能够操作数据库,SqlSession也能操作数据库。只是这种方式在开发中使用的较少,接下来我们使用SqlSession操作数据库:

代码语言:javascript复制
// SqlSession直接操作数据库
    List<User> users = session.selectList("com.itbaizhan.mapper.UserMapper.findAll");
    users.forEach(System.out::println);

         这样也可以的,上面的是我们用的是调用接口方法执行。

三、添加其他常见方法

1. Mybatis新增用户

持久层添加新增用户方法

代码语言:javascript复制
// 添加用户
    void add(User user);

映射文件新增标签

代码语言:javascript复制
    <insert id="add" parameterType="com.mybatisstudy.pojo.User">
        insert into user(username,sex,address) values(#{username},#{sex},#{address})
    </insert>

在测试类新增方法测试一下

        注意:这里一定要执行提交事务方法

代码语言:javascript复制
// 测试新增用户方法
    @Test
    public void testAdd() throws Exception {
        User user = new User("programmer","man","ShangHai");
        userMapper.add(user);

        //提交事务
        session.commit();
    }

2. Mybatis用户更改

持久层添加用户信息更改方法

代码语言:javascript复制
// 更新用户
    void update(User user);

映射文件新增标签

代码语言:javascript复制
    <update id="update" parameterType="com.mybatisstudy.pojo.User">
        update user set
        username = #{username},
        sex = #{sex},
        address = #{address}
        where id = #{id}
    </update>

在测试类新增方法测试一下

        注意:这里一定要执行提交事务方法

代码语言:javascript复制
// 测试更新用户方法
    @Test
    public void testUpdate() throws Exception{
        User user = new User(7,"programmer_1","woman","Shenzhen");
        userMapper.update(user);

        //提交事务
        session.commit();
    }

3. Mybatis删除用户

持久层添加删除用户方法

代码语言:javascript复制
// 删除用户
    void delete(int userId);

映射文件新增标签

代码语言:javascript复制
    <delete id="delete" parameterType="int">
        delete from user where id = #{id}
    </delete>

在测试类新增方法测试一下

        注意:这里一定要执行提交事务方法

代码语言:javascript复制
// 测试删除用户方法
    @Test
    public void testDelete() throws Exception{
        int userId = 7;
        userMapper.delete(userId);

        // 提交事务
        session.commit();
    }

4. Mybatis根据用户id查询

持久层添加删除用户方法

代码语言:javascript复制
// 根据ID查询用户
    User findById(int userId);

映射文件新增标签

代码语言:javascript复制
    <select id="findById" parameterType="int" resultType="com.mybatisstudy.pojo.User">
        select * from user where id = #{id}
    </select>

在测试类新增方法测试一下

        注意:这里一定要执行提交事务方法

代码语言:javascript复制
// 测试根据用户查询Id
    @Test
    public void testFindById() throws Exception{
        int userId = 1;
        User user = userMapper.findById(userId);

        System.out.println(user);
    }

        OK,本次Mybatis入门案例就写到这里了,感谢大家的认真浏览到这里的小伙伴,如果觉得觉得对你有帮助就三连支持一下吧!

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞