Mybatis-pus 小试牛刀

Mybatis-pus作为Mybatis的增强版   不用多说,肯定是使数据库的crud操作更加简单快捷

特性:

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作

强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求

支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错 

支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、 SQLServer2005、SQLServer 等多种数据库

支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由 配置,完美解决主键问题

支持 XML 热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动

支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强 大的 CRUD 操作 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )

支持关键词自动转义:支持数据库关键词(order、key......)自动转义,还可自定义关键词

内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用

内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等 同于普通 List 查询

内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢 查询

内置全局拦截插件:提供全表 delete 、update 操作智能分析阻断,也可自定义拦截规则,预防误 操作

内置 Sql 注入剥离器:支持 Sql 注入剥离,有效预防 Sql 注入攻击

案列(查询操作):

该案列所需要用到的相关注解:

@TableName("tb_user") 把数据库表与实体类进行绑定
@TableId("ID") 把数据库主键和实体类属性进行绑定
@TableField("USER_NAME") 把数据库键和实体类属性进行绑定

 

 

mybatis-plus包:

 <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>

 完整Pom:

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--简化代码的工具包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
        <!--mybatis-plus的springboot支持-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

application.properties配置文件:



spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mq?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456


# 设置Mapper接口所对应的XML文件位置,如果你在Mapper接口中有自定义方法,需要进行该配置
# 如果你全部都是使用的mybatis-plus的方法  则下面的配置可以不需要
mybatis-plus.mapper-locations = classpath:mybatis/*.xml
# 设置别名包扫描路径,通过该属性可以给包中的类注册别名
mybatis-plus.type-aliases-package =com.qrq.mybatisplusd.entity

mapper.xml:

//如果你没有使用自定义的方法  全部都是使用的mybatis-plus的方法  则可以不创建这个mapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qrq.mybatisplusd.dao.TbUserDao">

</mapper>

dao:

//创建一个接口实现BaseMapper<你的实体类> 这个接口  即可 
public interface    TbUserDao extends BaseMapper<TbUser> {
}

entity:

//下面三个注解的作用是 自动生成有参,无参构造方法 和get set 等方法
@Data
@NoArgsConstructor
@AllArgsConstructor
//与数据库表进行绑定
@TableName("tb_user")
public class TbUser {

    //与数据库主键id进行绑定  并设置为自增长
    @TableId(type = IdType.AUTO)
    private Long id;
//    与数据库普通字段进行绑定
    @TableField("USER_NAME")
    private String userName; //驼峰命名,则无需注解
    @TableField("PASSWORD")
    private String password;
    @TableField("NAME")
    private String name;
    @TableField("AGE")
    private Integer age;
    @TableField("EMAIL")
    private String email;
}

测试(CRUD):

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class MybatisPlusdApplicationTests {


    @Resource
    private TbUserDao userMapper;

    @Test
    public void testSelect() {
        TbUser user=userMapper.selectById(2);
        System.out.println(user);
    }

//    删除
@Test
    public void del(){
        userMapper.deleteById(4);
    }
//    添加
@Test
    public void add(){
        TbUser tbUser = new TbUser("三体1","12333","santi",12,"3300892656@qq.com");
        int insert = userMapper.insert(tbUser);
        TbUser update = new TbUser();
        if (insert!=0){
            System.out.println("添加成功");
        }
    }

//    修改
@Test
    public void update(){
    TbUser tbUser = new TbUser(2L,"三体3","12333","santi",12,"3300892656@qq.com");
    userMapper.updateById(tbUser);
    }

}

 

条件构造器QueryWrapper:

当查询时 ,需要的条件过多  普通查询已经没法满足我们的要求时,就需要使用条件构造器

比较操作

eq 等于 =

ne 不等于 <>

gt 大于 >

ge 大于等于 >=

lt 小于 <

le 小于等于 <=

between BETWEEN 值1 AND 值2

notBetween NOT BETWEEN 值1 AND 值2

in 字段 IN (value.get(0), value.get(1), ...)

notIn 字段 NOT IN (v0, v1, ...)

模糊查询

like LIKE '%值%' :

例: like("name", "王") ---> name like '%王%'

notLike NOT LIKE '%值%' :

例: notLike("name", "王") ---> name not like '%王%'

like Left LIKE '%值' :

例: likeLeft("name", "王") ---> name like '%王'

likeRight LIKE '值%' :

例: likeRight("name", "王") ---> name like '王%'

排序

orderBy 排序:

例: orderBy(true, true, "id", "name") ---> order by id ASC,name ASC

orderByAsc 排序:

例: orderByAsc("id", "name") ---> order by id ASC,name ASC

orderByDesc 排序:

例: orderByDesc("id", "name") ---> order by id DESC,name DESC

 

逻辑查询

or 拼接 OR

主动调用 or 表示紧接着下一个方法不是用 and 连接!(不调用 or 则默认为使用 and 连接)

//    查询账号等于三体3  or  密码等于12333
    q1.eq("user_name","三体3").or().eq("password","12333");

and AND 嵌套

例: and(i -> i.eq("name", "李白").ne("status", "活着")) ---> and (name = '李白' and status <> '活着')

//    查询账号等于三体3  and  密码等于12333
    q1.eq("user_name","三体3").eq("password","12333");

 

 

分页查询:

1、定义一个分页配置对象

@Configuration
public class Page {
//    定义一个分页 对象
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }
}

2、测试:

//    mybatis-plus 分页查询
    @Test
    public void page(){
//        创建一个page对象  从第一条数据 开始查询  查询 2条
        Page<TbUser> page = new Page<>(1,2);

//        创建一个查询条件构造器
        QueryWrapper<TbUser> queryWrapper=new QueryWrapper<>();
//        user_name=三体
        queryWrapper.eq("user_name","三体");

//        使用分页方法  把封装好的分页对象和查询条件  传递进去  并返回查询的结果的全部信息 比如数据行数 
        IPage<TbUser> tbUserIPage = userMapper.selectPage(page,queryWrapper);
        //获取到查询出来的List集合
        List<TbUser> records = tbUserIPage.getRecords();
//        输出
        for (TbUser record : records) {
            System.out.println(record.getAge());
        }
    }

 

Mybatis-Plus的Service封装

MP对业务层 也进行了封装  使我们开发效率更高

创建 service接口并寄出mq类

public interface TbUserService extends IService<TbUser> {
}

创建serviceImp继承mq的类 并实现我们自定义的service接口类

@Service
public class TbUserServiceImp extends ServiceImpl<TbUserDao, TbUser> implements TbUserService {
}

这样  我们就直接在controller层调用业务层实现类  就能操作数据库  而不用去调用dao层

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xixililicm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值