Mybatis—用自带Mapper接口进行CRUD操作

Mybatis提供了一些自带的Mapper接口,用于完成一些基础的CRUD操作。这些自带的Mapper接口都继承了Mybatis的基础Mapper接口,定义了一些常用的增删改查方法。

下面是Mybatis自带的Mapper接口及其对应的增删改查方法列表:

BaseMapper:

T selectByPrimaryKey(Object key):根据主键查询数据
int deleteByPrimaryKey(Object key):根据主键删除数据
int delete(T record):根据实体属性作为条件进行删除,查询条件使用等号
int insert(T record):插入一条数据
int insertSelective(T record):插入一条数据,使用实体属性非空字段作为插入语句的字段
int updateByPrimaryKeySelective(T record):根据主键更新一条数据,使用实体属性非空字段作为更新语句的字段
int updateByPrimaryKey(T record):根据主键更新一条数据

ConditionMapper:

int selectCountByCondition(Object condition):根据条件查询数据总数
List<T> selectByCondition(Object condition):根据条件查询数据列表
int deleteByCondition(Object condition):根据条件删除数据
int updateByCondition(T record, Object condition):根据条件更新数据

ExampleMapper:

List<T> selectByExample(Object example):根据Example条件查询数据
int selectCountByExample(Object example):根据Example条件查询数据总数
int deleteByExample(Object example):根据Example条件删除数据
int updateByExample(T record, Object example):根据Example条件更新数据
int updateByExampleSelective(T record, Object example):根据Example条件

更新数据,使用实体属性非空字段作为更新语句的字段
在使用这些自带的Mapper接口时,只需要定义对应的实体类和Example类,即可直接调用其对应的方法来完成增删改查操作。

需要注意的是,这些方法的参数和返回值类型都是泛型类型,需要根据具体的实体类类型来指定。另外,自带的Mapper接口中的方法名称和参数名称都有一定规则,需要按照规则来命名,在实际使用中需要仔细查看文档。

一、下面是一个详细讲解Mybatis中的BaseMapper的示例代码。

首先,我们需要定义一个实体类User,用于映射数据库中的用户表,并在其中定义对应的属性、构造方法和get、set方法:

public class User {
    
    
    private Long id;
    private String name;
    private Integer age;
    private Integer gender;
    private Date createTime;
    private Date updateTime;

    public User() {
    
    
    }

    public User(Long id, String name, Integer age, Integer gender, Date createTime, Date updateTime) {
    
    
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.createTime = createTime;
        this.updateTime = updateTime;
    }

    // 省略get、set方法
}

接下来,我们需要定义一个对应的Mapper接口UserMapper,继承于Mybatis的BaseMapper接口,用于操作User实体类映射的数据库表:

public interface UserMapper extends BaseMapper<User> {
    
    
}

在UserMapper接口中,我们继承了Mybatis的BaseMapper接口,并指定了泛型类型为User,这样就可以使用BaseMapper中定义的方法来完成对User实体类映射的数据库表的操作了。

最后,我们可以通过如下代码来测试BaseMapper中定义的方法:

public class MybatisDemo {
    
    
    public static void main(String[] args) {
    
    
        // 通过SqlSessionFactoryBuilder构建SqlSessionFactory
        InputStream inputStream = MybatisDemo.class.getResourceAsStream("/mybatis-config.xml");
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sessionFactory = builder.build(inputStream);

        // 通过SqlSessionFactory获取session对象
        try (SqlSession session = sessionFactory.openSession()) {
    
    
            // 获取UserMapper接口的实现类对象
            UserMapper userMapper = session.getMapper(UserMapper.class);

            // 新增用户
            User user = new User();
            user.setName("Tom");
            user.setAge(20);
            user.setGender(1);
            user.setCreateTime(new Date());
            user.setUpdateTime(new Date());
            userMapper.insertSelective(user);

            // 根据ID查询用户
            User result = userMapper.selectByPrimaryKey(user.getId());
            System.out.println(result);

            // 修改用户
            result.setName("Jerry");
            result.setGender(2);
            result.setUpdateTime(new Date());
            userMapper.updateByPrimaryKey(result);

            // 查询所有用户
            List<User> userList = userMapper.selectAll();
            System.out.println(userList);

            // 删除用户
            userMapper.deleteByPrimaryKey(result.getId());
        }
    }
}

在上述代码中,我们首先获取了UserMapper接口的实现类对象,然后使用BaseMapper中定义的方法完成了增删改查等操作。例如,使用insertSelective方法插入一条数据、使用selectByPrimaryKey方法根据ID查询数据、使用updateByPrimaryKey方法根据主键更新数据、使用selectAll方法查询所有数据以及使用deleteByPrimaryKey方法根据主键删除数据等。

总之,通过继承BaseMapper接口,我们可以轻松地使用Mybatis中自带的常用增删改查方法,提高开发效率。

二、下面是一个详细讲解Mybatis中的ConditionMapper的示例代码。

首先,我们需要定义一个实体类User,用于映射数据库中的用户表,并在其中定义对应的属性、构造方法和get、set方法:

public class User {
    
    
    private Long id;
    private String name;
    private Integer age;
    private Integer gender;
    private Date createTime;
    private Date updateTime;

    public User() {
    
    
    }

    public User(Long id, String name, Integer age, Integer gender, Date createTime, Date updateTime) {
    
    
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.createTime = createTime;
        this.updateTime = updateTime;
    }

    // 省略get、set方法
}

接下来,我们需要定义一个对应的Mapper接口UserMapper,继承于Mybatis的ConditionMapper接口,用于操作User实体类映射的数据库表:

public interface UserMapper extends ConditionMapper<User> {
    
    
}

在UserMapper接口中,我们继承了Mybatis的ConditionMapper接口,并指定了泛型类型为User,这样就可以使用ConditionMapper中定义的方法来完成对User实体类映射的数据库表的条件查询操作了。

最后,我们可以通过如下代码来测试ConditionMapper中定义的方法:

public class MybatisDemo {
    
    
    public static void main(String[] args) {
    
    
        // 通过SqlSessionFactoryBuilder构建SqlSessionFactory
        InputStream inputStream = MybatisDemo.class.getResourceAsStream("/mybatis-config.xml");
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sessionFactory = builder.build(inputStream);

        // 通过SqlSessionFactory获取session对象
        try (SqlSession session = sessionFactory.openSession()) {
    
    
            // 获取UserMapper接口的实现类对象
            UserMapper userMapper = session.getMapper(UserMapper.class);

            // 创建查询参数对象
            Query<User> query = new Query<>(User.class);
            query.eq("id", 1L); // ID等于1
            query.eq("name", "Tom"); // 名称等于Tom
            query.result().include("name", "age"); // 只查询名称和年龄两列

            // 根据条件查询用户
            List<User> userList = userMapper.selectList(query);
            System.out.println(userList);
        }
    }
}

在上述代码中,我们首先获取了UserMapper接口的实现类对象,然后使用ConditionMapper中定义的方法完成了条件查询操作。例如,使用eq方法设置查询条件、使用result方法设置查询结果列,最后使用selectList方法执行查询操作。

三、下面是一个详细讲解Mybatis中的ExampleMapper的示例代码。

首先,我们需要定义一个实体类User,用于映射数据库中的用户表,并在其中定义对应的属性、构造方法和get、set方法:

public class User {
    
    
    private Long id;
    private String name;
    private Integer age;
    private Integer gender;
    private Date createTime;
    private Date updateTime;

    public User() {
    
    
    }

    public User(Long id, String name, Integer age, Integer gender, Date createTime, Date updateTime) {
    
    
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.createTime = createTime;
        this.updateTime = updateTime;
    }

    // 省略get、set方法
}

接下来,我们需要定义一个对应的Mapper接口UserMapper,继承于Mybatis的ExampleMapper接口,用于操作User实体类映射的数据库表:

public interface UserMapper extends ExampleMapper<User> {
    
    
}

在UserMapper接口中,我们继承了Mybatis的ExampleMapper接口,并指定了泛型类型为User,这样就可以使用ExampleMapper中定义的方法来完成对User实体类映射的数据库表的Example查询操作了。

最后,我们可以通过如下代码来测试ExampleMapper中定义的方法:

public class MybatisDemo {
    
    
    public static void main(String[] args) {
    
    
        // 通过SqlSessionFactoryBuilder构建SqlSessionFactory
        InputStream inputStream = MybatisDemo.class.getResourceAsStream("/mybatis-config.xml");
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sessionFactory = builder.build(inputStream);

        // 通过SqlSessionFactory获取session对象
        try (SqlSession session = sessionFactory.openSession()) {
    
    
            // 获取UserMapper接口的实现类对象
            UserMapper userMapper = session.getMapper(UserMapper.class);

            // 创建Example参数对象
            Example<User> example = Example.builder(User.class)
                    .where(ExampleCondition.create()
                            .andEqualTo(User::getId, 1L)
                            .andEqualTo(User::getName, "Tom"))
                    .select(User::getName, User::getAge)
                    .build();

            // 根据Example查询用户
            List<User> userList = userMapper.selectByExample(example);
            System.out.println(userList);
        }
    }
}

在上述代码中,我们首先获取了UserMapper接口的实现类对象,然后使用ExampleMapper中定义的方法完成了Example查询操作。例如,使用where方法设置查询条件、使用select方法设置查询结果列,最后使用selectByExample方法执行查询操作。

猜你喜欢

转载自blog.csdn.net/l_010/article/details/131310169