Mybatisplus

1.常用注解以及作用

MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,提供了一系列的注解用于简化开发和提高效率。以下是一些常用的MyBatis-Plus注解及其作用:

@TableName:用于标识实体类与数据库表之间的映射关系。可以通过指定表名、字段名等属性,实现实体类与数据库表的映射。

@TableId:用于标识实体类中的主键字段。可以通过指定主键生成策略、自定义主键生成器等属性,实现主键的生成和映射。

@TableField:用于标识实体类中的字段与数据库表中的字段之间的映射关系。可以通过指定字段名、是否为主键、是否为插入字段等属性,实现字段的映射和操作。

@Version:用于标识实体类中的乐观锁字段。可以通过乐观锁实现数据的并发控制,避免数据冲突和丢失。

@EnumValue:用于标识实体类中的枚举字段。可以通过指定枚举值与数据库存储值的映射关系,实现枚举字段的持久化。

@TableLogic:用于标识实体类中的逻辑删除字段。可以通过逻辑删除实现数据的软删除,保留数据的完整性和一致性。

@SqlParser:用于标识SQL解析规则。可以通过指定租户ID、多租户模式等属性,实现多租户的数据隔离和访问控制。

@Mapper:用于标识Mapper接口。可以通过自动扫描和装配,实现Mapper接口的自动注入和使用。

2.mybatisplus的条件构造器

MyBatis-Plus提供了强大的条件构造器(Wrapper)来构建动态查询条件,简化了在查询时拼接SQL的过程,提高了开发效率。以下是MyBatis-Plus中常用的条件构造器:

QueryWrapper:用于构建查询条件的条件构造器。可以通过eq、ne、like、in、between等方法,构建各种条件查询。
		
java

		
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "Alice").like("email", "@gmail.com").between("age", 20, 30);
List<User> userList = userMapper.selectList(queryWrapper);

    
	
UpdateWrapper:用于构建更新条件的条件构造器。可以通过set、eq、ne等方法,构建更新操作的条件。
		
java

		
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("age", 30).eq("name", "Alice");
userMapper.update(user, updateWrapper);

    
	
LambdaQueryWrapper:基于Lambda表达式的查询条件构造器。可以通过Lambda表达式来构建查询条件,类型安全且更加直观。
		
java

		
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getName, "Alice").like(User::getEmail, "@gmail.com").between(User::getAge, 20, 30);
List<User> userList = userMapper.selectList(lambdaQueryWrapper);

    
	
LambdaUpdateWrapper:基于Lambda表达式的更新条件构造器。可以通过Lambda表达式来构建更新条件,类型安全且更加直观。
		
java

		
LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.set(User::getAge, 30).eq(User::getName, "Alice");
userMapper.update(user, lambdaUpdateWrapper);

    
	
QueryChainWrapper:用于构建链式查询条件的条件构造器。可以通过链式调用来构建复杂的查询条件。
		
java

		
List<User> userList = new QueryChainWrapper<>(userMapper).eq("name", "Alice").like("email", "@gmail.com").list();

3.mybatisplus的iservice基本用法

MyBatis-Plus的IService是一个通用的Service接口,提供了常用的数据库操作方法,封装了一些常用的CRUD操作,简化了开发过程。以下是MyBatis-Plus中IService的基本用法:

继承IService接口:在自定义的Service接口中继承IService接口,并指定实体类类型。
		
java

		
public interface UserService extends IService<User> {
    // 自定义的Service方法
    void customMethod();
}

    
	
使用默认的CRUD方法:IService提供了一系列的默认方法,可以直接使用。例如,使用save方法保存实体对象,使用getById方法根据ID查询实体对象。
		
java

		
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    // 自定义的Service方法
    @Override
    public void customMethod() {
        // ...
    }
}

    
	
自定义扩展方法:在自定义的Service接口中,可以定义和实现自己的扩展方法。例如,自定义一个customMethod方法。
		
java

		
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    // 自定义的扩展方法
    @Override
    public void customMethod() {
        // ...
    }
}

    
	
使用IService的其他方法:IService还提供了一些其他的方法,如list、update、remove等,可以根据需要进行使用。
		
java

		
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    // 自定义的Service方法
    @Override
    public void customMethod() {
        // ...
    }
    
    // 使用IService的其他方法
    public List<User> findUsersByName(String name) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("name", name);
        return list(queryWrapper);
    }
}

4.mybatisplus的自定义sql

MyBatis-Plus提供了多种方式来实现自定义SQL语句的执行,灵活满足各种复杂的查询和更新需求。以下是MyBatis-Plus中实现自定义SQL的几种常用方式:

使用@Select、@Insert、@Update、@Delete注解:可以在Mapper接口的方法上使用注解来编写自定义SQL语句,并通过注解的方式实现对应的查询、插入、更新、删除操作。
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    @Select("SELECT * FROM user WHERE age > #{age}")
    List<User> selectUsersByAge(int age);

    @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
    int insertUser(User user);

    @Update("UPDATE user SET age = #{age} WHERE id = #{id}")
    int updateUserAgeById(@Param("id") Long id, @Param("age") int age);

    @Delete("DELETE FROM user WHERE id = #{id}")
    int deleteUserById(Long id);
}

    
	
使用@SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider注解:可以通过Provider类来动态生成SQL语句,根据不同的条件生成不同的SQL。
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    @SelectProvider(type = UserSqlProvider.class, method = "selectUsersByAge")
    List<User> selectUsersByAge(int age);

    @InsertProvider(type = UserSqlProvider.class, method = "insertUser")
    int insertUser(User user);

    @UpdateProvider(type = UserSqlProvider.class, method = "updateUserAgeById")
    int updateUserAgeById(@Param("id") Long id, @Param("age") int age);

    @DeleteProvider(type = UserSqlProvider.class, method = "deleteUserById")
    int deleteUserById(Long id);
}

    
	
		
java

		
public class UserSqlProvider {
    public String selectUsersByAge(int age) {
        return "SELECT * FROM user WHERE age > " + age;
    }

    public String insertUser(User user) {
        return "INSERT INTO user(name, age) VALUES('" + user.getName() + "', " + user.getAge() + ")";
    }

    public String updateUserAgeById(@Param("id") Long id, @Param("age") int age) {
        return "UPDATE user SET age = " + age + " WHERE id = " + id;
    }

    public String deleteUserById(Long id) {
        return "DELETE FROM user WHERE id = " + id;
    }
}

    
	
使用自定义XML映射文件:可以编写自定义的XML映射文件,通过XML配置SQL语句和参数的映射关系。
		
xml

		
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUsersByAge" resultType="com.example.entity.User">
        SELECT * FROM user WHERE age > #{age}
    </select>

    <insert id="insertUser" parameterType="com.example.entity.User">
        INSERT INTO user(name, age) VALUES(#{name}, #{age})
    </insert>

    <update id="updateUserAgeById">
        UPDATE user SET age = #{age} WHERE id = #{id}
    </update>

    <delete id="deleteUserById">
        DELETE FROM user WHERE id = #{id}
    </delete>
</mapper>

    
	
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    List<User> selectUsersByAge(int age);
    int insertUser(User user);
    int updateUserAgeById(@Param("id") Long id, @Param("age") int age);
    int deleteUserById(Long id);
}

5.mybatisplus的增删改查注解开发

MyBatis-Plus提供了一系列的注解,用于简化增删改查操作的开发。以下是MyBatis-Plus中常用的增删改查注解及其用法:

@Insert:用于插入数据的注解。可以在Mapper接口的方法上使用@Insert注解,指定插入数据的SQL语句。
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
    int insertUser(User user);
}

    
	
@Update:用于更新数据的注解。可以在Mapper接口的方法上使用@Update注解,指定更新数据的SQL语句。
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    @Update("UPDATE user SET age = #{age} WHERE id = #{id}")
    int updateUser(User user);
}

    
	
@Delete:用于删除数据的注解。可以在Mapper接口的方法上使用@Delete注解,指定删除数据的SQL语句。
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    @Delete("DELETE FROM user WHERE id = #{id}")
    int deleteUserById(Long id);
}

    
	
@Select:用于查询数据的注解。可以在Mapper接口的方法上使用@Select注解,指定查询数据的SQL语句。
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectUserById(Long id);
}

    
	
@Results:用于映射查询结果的注解。可以在Mapper接口的方法上使用@Results注解,指定查询结果与实体类之间的映射关系。
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    @Results({
        @Result(property = "id", column = "id"),
        @Result(property = "name", column = "name"),
        @Result(property = "age", column = "age")
    })
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectUserById(Long id);
}

6.mybatisplus的增删改查xml开发

MyBatis-Plus支持使用XML文件来编写增删改查的SQL语句,提供了更灵活和可维护的开发方式。以下是MyBatis-Plus中使用XML文件进行增删改查开发的基本步骤:

创建Mapper接口:创建一个继承自BaseMapper的Mapper接口,并定义需要的查询方法。
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    List<User> selectUsersByAge(int age);
    int insertUser(User user);
    int updateUser(User user);
    int deleteUserById(Long id);
    User selectUserById(Long id);
}

    
	
创建XML映射文件:在resources目录下创建与Mapper接口相对应的XML映射文件,编写SQL语句。
		
xml

		
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUsersByAge" resultType="com.example.entity.User">
        SELECT * FROM user WHERE age = #{age}
    </select>

    <insert id="insertUser" parameterType="com.example.entity.User">
        INSERT INTO user(name, age) VALUES(#{name}, #{age})
    </insert>

    <update id="updateUser" parameterType="com.example.entity.User">
        UPDATE user SET age = #{age} WHERE id = #{id}
    </update>

    <delete id="deleteUserById" parameterType="java.lang.Long">
        DELETE FROM user WHERE id = #{id}
    </delete>

    <select id="selectUserById" resultType="com.example.entity.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

    
	
配置MyBatis-Plus的XML映射文件路径:在application.properties或application.yml文件中配置MyBatis-Plus的XML映射文件路径。
		
properties

		
# application.properties
mybatis-plus.mapper-locations=classpath*:mapper/*.xml

    
	
使用XML映射文件中的SQL语句:在Mapper接口中通过方法名与XML映射文件中的SQL语句进行关联。
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    List<User> selectUsersByAge(int age);
    int insertUser(User user);
    int updateUser(User user);
    int deleteUserById(Long id);
    User selectUserById(Long id);
}

7.mybatisplus的逻辑删除

MyBatis-Plus提供了逻辑删除的功能,可以通过配置实现逻辑删除而不是物理删除数据。逻辑删除是指在数据库中添加一个标识字段,通过将该字段的值设置为已删除的状态来表示数据已被删除,而实际上并没有真正删除数据。以下是使用MyBatis-Plus实现逻辑删除的基本步骤:

在实体类中添加逻辑删除字段:在实体类中添加一个逻辑删除的字段,并使用@TableLogic注解标注该字段。
		
java

		
@TableLogic
private Integer deleted;

    
	
在Mapper接口中配置逻辑删除的方法:在Mapper接口中添加逻辑删除的方法,并使用@Update注解指定逻辑删除的SQL语句。
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    @Update("UPDATE user SET deleted = 1 WHERE id = #{id}")
    int logicDeleteById(Long id);
}

    
	
在application.properties或application.yml中配置逻辑删除的全局配置:在配置文件中添加逻辑删除的全局配置,开启逻辑删除功能。
		
properties

		
# application.properties
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

    
	
使用逻辑删除的方法:在代码中调用逻辑删除的方法进行数据删除操作。
		
java

		
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Override
    public boolean removeById(Long id) {
        return baseMapper.logicDeleteById(id) > 0;
    }
}

8.mybatisplus的分页插件

MyBatis-Plus提供了强大的分页插件来简化分页查询的操作。分页插件可以自动拦截原始的SQL语句,根据分页参数生成对应的分页SQL语句,并执行分页查询操作。以下是使用MyBatis-Plus分页插件的基本步骤:

添加分页插件依赖:在项目的pom.xml文件中添加MyBatis-Plus的分页插件依赖。
		
xml

		
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>

    
	
配置分页插件:在application.properties或application.yml文件中配置分页插件。
		
properties

		
# application.properties
mybatis-plus.pagehelper.auto-dialect=true

    
	
使用分页查询方法:在Mapper接口中使用分页查询方法进行分页查询操作。
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    IPage<User> selectUsersByPage(Page<User> page, int age);
}

    
	
调用分页查询方法:在代码中调用分页查询方法,并传入分页参数进行分页查询操作。
		
java

		
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Override
    public IPage<User> selectUsersByPage(int pageNum, int pageSize, int age) {
        Page<User> page = new Page<>(pageNum, pageSize);
        return baseMapper.selectUsersByPage(page, age);
    }
}

9.Mybatis的通用实体与MP转换

在使用MyBatis-Plus时,通常会定义实体类来映射数据库表的字段。如果已经有了使用MyBatis的通用实体类(如BaseEntity),需要将其转换为MyBatis-Plus的实体类(如BaseEntity)来使用MyBatis-Plus的功能。以下是将MyBatis的通用实体与MyBatis-Plus的实体类进行转换的基本步骤:

定义MyBatis的通用实体类:首先,定义使用MyBatis的通用实体类,包含需要映射的数据库字段。
		
java

		
public class BaseEntity {
    private Long id;
    private String name;
    private Integer age;
    // getter and setter
}

    
	
定义MyBatis-Plus的实体类:根据MyBatis的通用实体类定义对应的MyBatis-Plus的实体类,通常需要继承自BaseEntity,并添加@Table注解指定表名。
		
java

		
@TableName("user")
public class User extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    // additional fields or methods
}

    
	
使用BeanUtils进行转换:可以使用BeanUtils工具类来进行MyBatis的通用实体与MyBatis-Plus的实体类之间的转换。
		
java

		
public class EntityConvertUtils {
    public static <T1, T2> T2 convert(T1 source, Class<T2> targetClass) {
        T2 target = BeanUtils.instantiateClass(targetClass);
        BeanUtils.copyProperties(source, target);
        return target;
    }
}

    
	
调用转换方法:在代码中调用转换方法,将MyBatis的通用实体转换为MyBatis-Plus的实体类。
		
java

		
BaseEntity baseEntity = new BaseEntity();
baseEntity.setId(1L);
baseEntity.setName("Alice");
baseEntity.setAge(30);

User user = EntityConvertUtils.convert(baseEntity, User.class);

10.mybatis的动态sql

MyBatis-Plus提供了强大的动态SQL功能,可以根据条件动态拼接SQL语句,实现灵活的查询和操作。以下是使用MyBatis-Plus的动态SQL的基本用法:

使用@SelectProvider注解:在Mapper接口的方法上使用@SelectProvider注解,并指定一个提供动态SQL的类。
		
java

		
@Mapper
public interface UserMapper extends BaseMapper<User> {
    @SelectProvider(type = UserSqlProvider.class, method = "selectUsersByCondition")
    List<User> selectUsersByCondition(String name, Integer age);
}

    
	
创建动态SQL提供类:创建一个类来提供动态SQL语句的方法。该类需要实现Provider接口,并提供一个动态SQL语句的方法。
		
java

		
public class UserSqlProvider implements Provider {
    public String selectUsersByCondition(String name, Integer age) {
        SQL sql = new SQL().SELECT("*").FROM("user");
        if (name != null) {
            sql.WHERE("name = #{name}");
        }
        if (age != null) {
            sql.WHERE("age = #{age}");
        }
        return sql.toString();
    }
}

    
	
调用动态SQL的方法:在代码中调用动态SQL的方法,并传入相应的参数。
		
java

		
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Override
    public List<User> selectUsersByCondition(String name, Integer age) {
        return baseMapper.selectUsersByCondition(name, age);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值