前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis入门案例【超详细】

Mybatis入门案例【超详细】

作者头像
会洗碗的CV工程师
发布2023-03-24 14:51:19
3240
发布2023-03-24 14:51:19
举报
文章被收录于专栏:LongJava学习资料LongJava学习资料

目录

前言

一、查询所有用户

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

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

3. 测试方法

4. 运行结果

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

1. MyBatis核心对象

2. MyBatis工作流程

3. 使用SqlSession操作数据库

三、添加其他常见方法

1. Mybatis新增用户

2. Mybatis用户更改

3. Mybatis删除用户

4. Mybatis根据用户id查询


前言

在原来上一篇的基础上,我们需要新建一个数据库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-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、查询所有用户
    • 1. 持久层添加查询所有方法
      • 2. 在UserMapper.xml映射文件添加查询语句
        • 3. 测试方法
          • 4. 运行结果
          • 二、MyBatis核心对象及工作流程
            • 1. MyBatis核心对象
              • 2. MyBatis工作流程
                • 3. 使用SqlSession操作数据库
                • 三、添加其他常见方法
                  • 1. Mybatis新增用户
                    • 2. Mybatis用户更改
                      • 3. Mybatis删除用户
                        • 4. Mybatis根据用户id查询
                        相关产品与服务
                        数据库
                        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档