千家信息网

MyBatis-Ext怎么用

发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,这篇文章将为大家详细讲解有关MyBatis-Ext怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最近在工作中,接触到了一个MyBatis扩展工具包MyBati
千家信息网最后更新 2024年11月14日MyBatis-Ext怎么用

这篇文章将为大家详细讲解有关MyBatis-Ext怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

最近在工作中,接触到了一个MyBatis扩展工具包MyBatis-Ext,可以说很大程度上减轻了使用mybatis时的工作量。

MyBatis-Ext是MyBatis的增强扩展,和我们平常用的Mybatis-plus非常类似,简化了MyBatis对单表增删改查的操作,提供通用的增删改查,支持函数式编程,支持分页查询,支持用户自定义通用方法,并且能够防止SQL注入。集成起来也非常简单,对MyBatis只做增强不做修改。

以spring-boot项目为例,集成非常简单。pom导入核心依赖:

    tech.wetech.mybatis    mybatis-ext-core    1.5.2    tech.wetech.mybatis    mybatis-ext-spring-boot-starter    1.5.2

需要注意的是,引入mybatis-ext-spring-boot-starter后无需再引入mybatis-spring-boot-starter。
和以往一样,在application.yml配置一下数据源:

spring:  datasource:    username: dater    password: 123456    url: jdbc:mysql://127.0.0.1:3306/datacenter?useUnicode=true&characterEncoding=utf-8    driver-class-name: com.mysql.jdbc.Driver    type: com.alibaba.druid.pool.DruidDataSource    druid:      initial-size: 8      min-idle: 1      max-active: 20mybatis:  mapper-locations: classpath:mapping/*Mapper.xml  type-aliases-package: com.mybatis.ext.test.mybatisexttest.entityspring:  datasource:    username: dater    password: 123456    url: jdbc:mysql://127.0.0.1:3306/datacenter?useUnicode=true&characterEncoding=utf-8    driver-class-name: com.mysql.jdbc.Driver    type: com.alibaba.druid.pool.DruidDataSource    druid:      initial-size: 8      min-idle: 1      max-active: 20mybatis:  mapper-locations: classpath:mapping/*Mapper.xml  type-aliases-package: com.mybatis.ext.test.mybatisexttest.entity

创建一个映射的实体类:

@Data@Table(name = "user")public class User {    @Id    String identifycard;    @Column(name="name")    String name;    String money;    String card;    String phone;    String rate;}

mybatis-ext使用了Jpa的注解,目前实现了@Table、@Id、@Column、@Transient、@Version。其中@Table、@Id是必须添加的注解,其他非必须添加。使用@Table指定数据表名,@Id指定数据表主键。

查询的Mapper接口继承BaseMapper接口,泛型中填写实体类:

public interface UserMapper extends BaseMapper {}

我们来看一下能够直接调用的方法,为在BaseMapper中内置了很多通用方法,可以直接调用,非常简便:

int deleteByPrimaryKey(PK id); int insert(S record); int insertAll(Iterable record); int insertSelective(S record); S selectByPrimaryKey(PK id); Optional selectByPrimaryKeyWithOptional(ID id); int updateByPrimaryKey(S record); int updateByPrimaryKeySelective(S record); List selectAll(); List selectList(S record); S selectOne(S record); S selectOneWithOptional(S record);boolean existsByPrimaryKey(PK id); int count(S record); List selectByExample(Example example); int countByExample(Example example); int deleteByExample(Example example); int updateByExample(@Param("record") S record, @Param("example") Example example); int updateByExampleSelective(@Param("record") S record, @Param("example") Example example);

来进行一下接口调用的测试,先试一下selectAll方法:

@GetMapping("getUser")public void getUser(){    List users = userMapper.selectAll();    for (User user : users) {        System.out.println(user.getName()+" "+user.getIdentifycard());    }}

测试结果:

这样,通过调用内置方法就实现了不写sql语句直接进行查询。同样,如果想根据主键进行查询也很简单,直接调用selectByPrimaryKey方法:

@PostMapping("getUserById")public void getUserByIdentifycard(@RequestBody User user){    User retUser = userMapper.selectByPrimaryKey(user);    System.out.println(retUser.toString());}

查询结果:

另外,还可以使用Optional包裹查询,修改一下上面主键查询的方法:

@PostMapping("getUserById")public void getUserByIdentifycard(@RequestBody User user){    User retUser = userMapper.selectByPrimaryKeyWithOptional(user)            .orElseThrow(()->new RuntimeException("未查到数据"));    System.out.println(retUser.toString());}

这样,在传入一个不存在的主键时,就会直接抛出自定义的异常:

还有其他很多简单的查询,大家可以根据上面列出api自行测试一下。此外,还可以使用Criteria,使用逻辑组合,进行函数式查询:

@GetMapping("criteriaTest")public void testCreateCriteria(){    List list = userMapper.createCriteria()            .andEqualTo(User::getName, "Trunks")            .andBetween(User::getMoney, 100, 300)            .andNotLike(User::getRate, "6")            .orIn(User::getCard, Arrays.asList("10"))            .selectList();    list.forEach(user -> {        System.out.println(user.toString());    });}

查询结果:

也可以使用Example进行查询:

@GetMapping("exampleTest")public void testExample(){    Example example=Example.of(User.class);    example.createCriteria()            .andEqualTo(User::getName, "Trunks")            .andBetween(User::getMoney, 100, 300)            .andNotLike(User::getRate, "6")            .orIn(User::getCard, Arrays.asList("10"));    example.setDistinct(true);    List list = userMapper.selectByExample(example);    list.forEach(user -> {        System.out.println(user.toString());    });}

结果与使用Criteria结果相同。另外,还可以将多个条件组合使用:

GetMapping("testExampleWithSub")public void selectByExampleWithSub(){    try (SqlSession session = sqlSessionFactory.openSession()) {        UserMapper userMapper1 = session.getMapper(UserMapper.class);        Example example=Example.of(User.class);        example.and()                .andEqualTo(User::getName, "Trunks");        example.and()                .andEqualTo(User::getCard,"10");        example.and()                .andLessThanOrEqualTo(User::getRate,300);        Criteria criteria=new Criteria<>();        criteria.andIsNotNull(User::getPhone);        example.and(criteria);        List list = userMapper1.selectByExample(example);        list.forEach(user -> {            System.out.println(user.toString());        });    }}

结果:

关于"MyBatis-Ext怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0