精华内容
下载资源
问答
  • mybatis-plus是基于mybatis,相对于mybatis,他有许多特性是比较好用的,比如分页查询、表字段自动转换为实体类属性等,使用mybatis-plus与Spring Data JPA有点相似的地方,个人觉得mybatis-plus的分页比JPA的分页...

    mybatis-plus是基于mybatis,相对于mybatis,他有许多特性是比较好用的,比如分页查询、表字段自动转换为实体类属性等,使用mybatis-plus与Spring Data JPA有点相似的地方,个人觉得mybatis-plus的分页比JPA的分页好用。其实在mybatis-plus官网上已经有很详细的教程了,在这里写博客也是为了自己能够更好的整理思路。先上一下官网基于springboot教程地址:https://baomidou.oschina.io/mybatis-plus-doc/#/spring-boot

    1.添加pom引用

    maven的引用很简单,官方已经给出starter,不需要我们考虑它的依赖关系了,此处使用的是2.3版本。

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

     

    2.配置

    官方已经提供了基于springboot的配置,将其拷贝过来放在application.yml中即可使用,此处只是将官方部分的配置删减过一些。其中column-underline: true特别好用,会自动将下划线格式的表字段,转换为以驼峰格式命名的属性。

    mybatis-plus:
      global-config:
        db-config:
          id-type: auto
          field-strategy: not_empty
          #驼峰下划线转换
          column-underline: true
          #逻辑删除配置
          logic-delete-value: 0
          logic-not-delete-value: 1
          db-type: mysql
        refresh: false
      configuration:
        map-underscore-to-camel-case: true
        cache-enabled: false

     

    3.使用

    1.创建实体类,创建实体类与JPA特别相似,其中@TableName注解是为了指定此实体类对应数据库的哪一张表;@TableId指定的是主键,type属性指定的是该主键自增的方式,AUTO代表自增,UUID代表使用UUID增加主键;还有一个注解@TableFiled,此注解主要用在非主键实体属性上,下面是官方给出的此注解所有属性。

    描述
    value字段值(驼峰命名方式,该值可无)
    update预处理 set 字段自定义注入
    condition预处理 WHERE 实体条件自定义运算规则
    el详看注释说明
    exist是否为数据库表字段( 默认 true 存在,false 不存在 )
    strategy字段验证 ( 默认 非 null 判断,查看 com.baomidou.mybatisplus.enums.FieldStrategy )
    fill字段填充标记 ( FieldFill, 配合自动填充使用 )

     

    生成一个实体类实例

    @TableName("t_patrol_task")
    public class PatrolTaskEntity {
    
        @TableId(value = "id",type = IdType.AUTO)
        private Integer id;
    
        private Integer jobId;
    
       Getter…
       Setter….
    }

     

    2.创建mapper,与JPA有相像之处。使用@Mapper为了把mapper这个DAO交給Spring管理,且可以不再写mapper映射文件;继承BaseMapper可以方便使用mybatis-plus方法,泛型需要写对用的实体类。此处直接使用slelect *  from,mybatis-plus会根据实体类自动驼峰转下划线映射到表的字段中

    @Mapper
    public interface PatrolTaskMapper extends BaseMapper<PatrolTaskEntity> {
    
        @Select("select * from t_patrol_task where id = #{id} and deleted_at is null")
        PatrolTaskEntity queryByIdAndDeletedAtIsNull(@Param(“id”) Integer id);
    }

     

    4.条件构造器

    1.查询单条数据,非主键查询,只要在一个实体内写入属性,然后再用mybatis-plus自带的selectOne()方法即可查询(注意:查询的限制条件必须此条数据是唯一的,不然查询后会报错)。个人觉得此种查询使用不便,不如直接使用nativeSql进行查询来的利索。

    PatrolJobLogEntity jobLogEntity = new PatrolJobLogEntity();
    jobLogEntity.setJobId(12);
    jobLogEntity.setTaskFinished(30);
    patrolJobLogMapper.selectOne(jobLogEntity);

     

    2.查询数量,含有拼接方式查询。使用mybatis-plus条件查询需要使用到EntityWrapper构造器,它能添加查询的条件,如:.eq("job_id",13)表示查询job_id=13的记录,isNull("deleted_at")表示deleted_at必须为null(注意:此处查询的条件是使用的是数据库表中的字段名称)。

    EntityWrapper<PatrolTaskEntity> wrapper = new EntityWrapper<>().eq("job_id",13).isNull("deleted_at");
    List<PatrolTaskEntity> tasks = patrolTaskMapper.selectCount(wrapper);

     

    3.查询列表,与上面基本相同,只不过此处使用的是mybatis-plus的selectList()方法

    EntityWrapper<PatrolTaskEntity> wrapper = new EntityWrapper<>().eq("job_id",13).isNull("deleted_at");
    List<PatrolTaskEntity> tasks = patrolTaskMapper.selectList(wrapper);
    

     

    拼接sql查询方式:

    查询方式

    说明

    setSqlSelect

    设置 SELECT 查询字段

    where

    WHERE 语句,拼接WHERE 条件

    and

    AND 语句,拼接AND 字段=

    andNew

    AND 语句,拼接AND (字段=)

    or

    OR 语句,拼接OR 字段=

    orNew

    OR 语句,拼接OR (字段=)

    eq

    等于=

    allEq

    基于 map 内容等于=

    ne

    不等于<>

    gt

    大于>

    ge

    大于等于>=

    lt

    小于<

    le

    小于等于<=

    like

    模糊查询 LIKE

    notLike

    模糊查询 NOT LIKE

    in

    IN 查询

    notIn

    NOT IN 查询

    isNull

    NULL 值查询

    isNotNull

    IS NOT NULL

    groupBy

    分组 GROUP BY

    having

    HAVING 关键词

    orderBy

    排序 ORDER BY

    orderAsc

    ASC 排序 ORDER BY

    orderDesc

    DESC 排序 ORDER BY

    exists

    EXISTS 条件语句

    notExists

    NOT EXISTS 条件语句

    between

    BETWEEN 条件语句

    notBetween

    NOT BETWEEN 条件语句

    addFilter

    自由拼接 SQL

    last

    拼接在最后,例如:last("LIMIT 1")

     

    5.分页

    1.添加配置文件,此处配置文件表示开启mybatis-plus分页功能

    @EnableTransactionManagement
    @Configuration
    public class MybatisPlusConfig {
    
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    }

     

    2.写查询语句,此出的Pagination必须给出,不然无法完成分页功能。

    @Mapper
    public interface BannerLogMapper extends BaseMapper<BannerLogEntity> {
    
        @Select("select * from t_pub_banner_logs")
        List<BannerLogEntity> queryLogByPage(Pagination page);
    }

     

    3.进行分页查询代码块,只需要将要查询的第几页也页面大小写入到Page对象中。然后进行查询,查询后分页属性(当前页,总页数、总条数), 是经过插件自动回写到传入page对象中。

    Page<BannerLogEntity> page = new Page<>(pageNo,pageSize);
    List<BannerLogEntity> bannerLogs = bannerLogMapper.queryLogByPage(page);
    page.getTotal();
    page.getCurrent();
    page.getPages();

     

    6.其他

    关于mybatis-plus其他功能,代码生成器、性能分析插件、执行分析插件、多数据源处理等可以自行到官网查看学习。

    展开全文
  • Mybatis-PlusMybatis的区别

    万次阅读 多人点赞 2019-04-01 11:09:50
    我们在使用Mybatis-Plus之后既可以使用Mybatis-Plus的特有功能,又能够正常使用Mybatis的原生功能。Mybatis-Plus(以下简称MP)是为简化开发、提高开发效率而生,但它也提供了一些很有意思的插件,比如SQL性能监控、...

    原文:https://blog.csdn.net/qq_34508530/article/details/88943858
    在这里插入图片描述
    在这里插入图片描述
    .
    .
    .
    .
    .
    .

    区别一

    如果Mybatis Plus是扳手,那Mybatis Generator就是生产扳手的工厂。
    通俗来讲——
    MyBatis:一种操作数据库的框架,提供一种Mapper类,支持让你用java代码进行增删改查的数据库操作,省去了每次都要手写sql语句的麻烦。但是!有一个前提,你得先在xml中写好sql语句,是不是很麻烦?于是有下面的↓
    Mybatis Generator:自动为Mybatis生成简单的增删改查sql语句的工具,省去一大票时间,两者配合使用,开发速度快到飞起。至于标题说的↓
    Mybatis Plus:国人团队苞米豆在Mybatis的基础上开发的框架,在Mybatis基础上扩展了许多功能,荣获了2018最受欢迎国产开源软件第5名,当然也有配套的↓
    Mybatis Plus Generator:同样为苞米豆开发,比Mybatis Generator更加强大,支持功能更多,自动生成Entity、Mapper、Service、Controller等
    总结:
    数据库框架:Mybatis Plus > Mybatis
    代码生成器:Mybatis Plus Generator > Mybatis Generator

    .
    .
    .
    .
    .

    区别二

    Mybatis-Plus是一个Mybatis的增强工具,它在Mybatis的基础上做了增强,却不做改变。我们在使用Mybatis-Plus之后既可以使用Mybatis-Plus的特有功能,又能够正常使用Mybatis的原生功能。Mybatis-Plus(以下简称MP)是为简化开发、提高开发效率而生,但它也提供了一些很有意思的插件,比如SQL性能监控、乐观锁、执行分析等。

    Mybatis虽然已经给我们提供了很大的方便,但它还是有不足之处,实际上没有什么东西是完美的,MP的存在就是为了稍稍弥补Mybatis的不足。在我们使用Mybatis时会发现,每当要写一个业务逻辑的时候都要在DAO层写一个方法,再对应一个SQL,即使是简单的条件查询、即使仅仅改变了一个条件都要在DAO层新增一个方法,针对这个问题,MP就提供了一个很好的解决方案,之后我会进行介绍。另外,MP的代码生成器也是一个很有意思的东西,它可以让我们避免许多重复性的工作,下面我将介绍如何在你的项目中集成MP。
    .
    .
    .
    .
    .

    一、 集成步骤↓:(首先,你要有个spring项目)

    集成依赖,pom中加入依赖即可,不多说:
    Java代码 收藏代码

    <!-- mybatis mybatis-plus mybatis-spring mvc -->  
    <dependency>  
        <groupId>com.baomidou</groupId>  
        <artifactId>mybatis-plus</artifactId>  
        <version>${mybatis-plus.version}</version>  
    </dependency>  
    <dependency>  
        <groupId>org.apache.velocity</groupId>  
        <artifactId>velocity-engine-core</artifactId>  
        <version>2.0</version>  
    </dependency>  
    

    说明:笔者使用的版本为:mybatis-plus.version=2.1-gamma,上边的代码中有两个依赖,第一个是mybatis-plus核心依赖,第二个是使用代码生成器时需要的模板引擎依赖,若果你不打算使用代码生成器,此处可不引入。
    注意:mybatis-plus的核心jar包中已集成了mybatis和mybatis-spring,所以为避免冲突,请勿再次引用这两个jar包。

    .
    .
    .

    二、 在spring中配置MP:

    <bean id="sqlSessionFactory"  
        class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">  
        <!-- 配置数据源 -->  
        <property name="dataSource" ref="dataSource" />  
        <!-- 自动扫描 Xml 文件位置 -->  
        <property name="mapperLocations" value="classpath*:com/ds/orm/mapper/**/*.xml" />  
        <!-- 配置 Mybatis 配置文件(可无) -->  
        <property name="configLocation" value="classpath:mybatis-config.xml" />  
        <!-- 配置包别名,支持通配符 * 或者 ; 分割 -->  
        <property name="typeAliasesPackage" value="com.ds.orm.model" />  
        <!-- 枚举属性配置扫描,支持通配符 * 或者 ; 分割 -->  
        <!-- <property name="typeEnumsPackage" value="com.baomidou.springmvc.entity.*.enums"   
            /> -->  
        <!-- 以上配置和传统 Mybatis 一致 -->  
      
        <!-- MP 全局配置注入 -->  
        <property name="globalConfig" ref="globalConfig" />  
    </bean>  
    
    <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">  
        <!-- 主键策略配置 -->  
        <!-- 可选参数 AUTO->`0`("数据库ID自增") INPUT->`1`(用户输入ID") ID_WORKER->`2`("全局唯一ID")   
            UUID->`3`("全局唯一ID") -->  
        <property name="idType" value="2" />  
        <!-- 数据库类型配置 -->  
        <!-- 可选参数(默认mysql) MYSQL->`mysql` ORACLE->`oracle` DB2->`db2` H2->`h2`   
            HSQL->`hsql` SQLITE->`sqlite` POSTGRE->`postgresql` SQLSERVER2005->`sqlserver2005`   
            SQLSERVER->`sqlserver` -->  
        <property name="dbType" value="mysql" />  
        <!-- 全局表为下划线命名设置 true -->  
        <property name="dbColumnUnderline" value="true" />  
        <property name="sqlInjector">  
            <bean class="com.baomidou.mybatisplus.mapper.AutoSqlInjector" />  
        </property>  
    </bean>  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <description>DAO接口所在包名,Spring会自动查找其下的类</description>  
        <property name="basePackage" value="com.ds.orm.mapper" />  
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />  
    </bean>  
    <!-- 乐观锁插件 -->  
    <bean class="com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor" />  
      
    <!-- xml mapper热加载 sqlSessionFactory:session工厂 mapperLocations:mapper匹配路径   
        enabled:是否开启动态加载 默认:false delaySeconds:项目启动延迟加载时间 单位:秒 默认:10s sleepSeconds:刷新时间间隔   
        单位:秒 默认:20s -->  
    <bean class="com.baomidou.mybatisplus.spring.MybatisMapperRefresh">  
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />  
        <constructor-arg name="mapperLocations"  
            value="classpath*:com/ds/orm/mapper/*/*.xml" />  
        <constructor-arg name="delaySeconds" value="10" />  
        <constructor-arg name="sleepSeconds" value="20" />  
        <constructor-arg name="enabled" value="true" />  
    </bean>  
      
    <!-- 事务 -->  
    <bean id="transactionManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>  
    <tx:annotation-driven transaction-manager="transactionManager"  
        proxy-target-class="true" />  
        
     注意:只要做如上配置就可以正常使用mybatis了,不要重复配置。MP的配置和mybatis一样,都是配置一个sqlSessionFactory,只是现在所配置的类在原本的SqlSessionFactoryBean基础上做了增强。插件等配置请按需取舍。
    插件配置,按需求配置就可以,此处把可以配置的插件都列了出来,具体的请看代码注释:
    
    <configuration>  
        <settings>  
            <setting name="logImpl" value="SLF4J" />  
            <!-- 字段为空时仍调用model的set方法或map的put方法 -->  
            <setting name="callSettersOnNulls" value="true" />  
        </settings>  
        <plugins>  
            <!-- | 分页插件配置 | 插件提供二种方言选择:1、默认方言 2、自定义方言实现类,两者均未配置则抛出异常! | overflowCurrent   
                溢出总页数,设置第一页 默认false | optimizeType Count优化方式 ( 版本 2.0.9 改为使用 jsqlparser 不需要配置   
                ) | -->  
            <!-- 注意!! 如果要支持二级缓存分页使用类 CachePaginationInterceptor 默认、建议如下!! -->  
            <plugin interceptor="com.baomidou.mybatisplus.plugins.PaginationInterceptor">  
                <property name="dialectType" value="mysql" />  
                <!--<property name="sqlParser" ref="自定义解析类、可以没有" />  
                <property name="localPage" value="默认 false 改为 true 开启了 pageHeper 支持、可以没有" />  
                <property name="dialectClazz" value="自定义方言类、可以没有" /> -->  
            </plugin>  
      
            <!-- SQL 执行性能分析,开发环境使用,线上不推荐。 maxTime 指的是 sql 最大执行时长 -->  
            <plugin interceptor="com.baomidou.mybatisplus.plugins.PerformanceInterceptor">  
                <property name="maxTime" value="2000" />  
                <!--SQL是否格式化 默认false -->  
                <property name="format" value="true" />  
            </plugin>  
      
            <!-- SQL 执行分析拦截器 stopProceed 发现全表执行 delete update 是否停止运行 该插件只用于开发环境,不建议生产环境使用。。。 -->  
            <plugin interceptor="com.baomidou.mybatisplus.plugins.SqlExplainInterceptor">  
                <property name="stopProceed" value="false" />  
            </plugin>  
        </plugins>  
    </configuration>  
    

    注意:执行分析拦截器和性能分析推荐只在开发时调试程序使用,为保证程序性能和稳定性,建议在生产环境中注释掉这两个插件。
    数据源:(此处使用druid)

    <!-- 配置数据源 -->  
    <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">  
        <!--     <property name="driverClassName" value="${jdbc.driverClassName}" /> -->  
        <property name="url" value="${jdbc.url}" />   
        <property name="username" value="${jdbc.username}" />   
        <property name="password" value="${jdbc.password}" />   
        <property name="initialSize" value="${jdbc.initialSize}" />   
        <property name="minIdle" value="${jdbc.minIdle}" />   
        <property name="maxActive" value="${jdbc.maxActive}" />   
        <property name="maxWait" value="${jdbc.maxWait}" />   
        <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />   
        <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />   
        <property name="validationQuery" value="${jdbc.validationQuery}" />   
        <property name="testWhileIdle" value="${jdbc.testWhileIdle}" />   
        <property name="testOnBorrow" value="${jdbc.testOnBorrow}" />   
        <property name="testOnReturn" value="${jdbc.testOnReturn}" />   
        <property name="removeAbandoned" value="${jdbc.removeAbandoned}" />   
        <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}" />   
        <!--     <property name="logAbandoned" value="${jdbc.logAbandoned}" /> -->  
        <property name="filters" value="${jdbc.filters}" />  
        <!-- 关闭abanded连接时输出错误日志 -->  
        <property name="logAbandoned" value="true" />  
        <property name="proxyFilters">  
            <list>  
                <ref bean="log-filter"/>  
            </list>  
        </property>  
      
        <!-- 监控数据库 -->  
        <!-- <property name="filters" value="stat" /> -->  
        <!--     <property name="filters" value="mergeStat" />-->  
    </bean>  
    

    到此,MP已经集成进我们的项目中了,下面将介绍它是如何简化我们的开发的。
    .
    .
    .

    **

    三、 简单的CURD操作↓:

    **
    假设我们有一张user表,且已经建立好了一个与此表对应的实体类User,我们来介绍对user的简单增删改查操作。
    建立DAO层接口。我们在使用普通的mybatis时会建立一个DAO层接口,并对应一个xml用来写SQL。在这里我们同样要建立一个DAO层接口,但是若无必要,我们甚至不需要建立xml,就可以进行资源的CURD操作了,我们只需要让我们建立的DAO继承MP提供的BaseMapper<?>即可:

    public interface UserMapper extends BaseMapper { }
    然后在我们需要做数据CURD时,像下边这样就好了:
    Java代码 收藏代码
    // 初始化 影响行数
    int result = 0;
    // 初始化 User 对象
    User user = new User();

    // 插入 User (插入成功会自动回写主键到实体类)
    user.setName(“Tom”);
    result = userMapper.insert(user);

    // 更新 User
    user.setAge(18);
    result = userMapper.updateById(user);//user要设置id哦,具体的在下边我会详细介绍

    // 查询 User
    User exampleUser = userMapper.selectById(user.getId());

    // 查询姓名为‘张三’的所有用户记录
    List userList = userMapper.selectList(
    new EntityWrapper().eq(“name”, “张三”)
    );

    // 删除 User
    result = userMapper.deleteById(user.getId());

    方便吧?如果只使用mybatis可是要写4个SQL和4个方法喔,当然了,仅仅上边这几个方法还远远满足不了我们的需求,请往下看:

    .
    .

    **

    多条件分页查询:

    **
    // 分页查询 10 条姓名为‘张三’、性别为男,且年龄在18至50之间的用户记录

    List<User> userList = userMapper.selectPage(  
            new Page<User>(1, 10),  
            new EntityWrapper<User>().eq("name", "张三")  
                    .eq("sex", 0)  
                    .between("age", "18", "50")  
    );  
    

    /**等价于SELECT *
    *FROM sys_user
    *WHERE (name=‘张三’ AND sex=0 AND age BETWEEN ‘18’ AND ‘50’)
    *LIMIT 0,10
    */
    .
    .
    .
    下边这个,多条件构造器。其实对于条件过于复杂的查询,笔者还是建议使用原生mybatis的方式实现,易于维护且逻辑清晰,如果所有的数据操作都强行使用MP,就失去了MP简化开发的意义了。所以在使用时请按实际情况取舍,在这里还是先介绍一下。

    public Page<T> selectPage(Page<T> page, EntityWrapper<T> entityWrapper) {  
      if (null != entityWrapper) {  
          entityWrapper.orderBy(page.getOrderByField(), page.isAsc());//排序  
      }  
      page.setRecords(baseMapper.selectPage(page, entityWrapper));//将查询结果放入page中  
      return page;  
    }  
    

    ** 条件构造一(上边方法的entityWrapper参数):**

    public void testTSQL11() {  
        /* 
         * 实体带查询使用方法  输出看结果 
         */  
        EntityWrapper<User> ew = new EntityWrapper<User>();  
        ew.setEntity(new User(1));  
        ew.where("user_name={0}", "'zhangsan'").and("id=1")  
                .orNew("user_status={0}", "0").or("status=1")  
                .notLike("user_nickname", "notvalue")  
                .andNew("new=xx").like("hhh", "ddd")  
                .andNew("pwd=11").isNotNull("n1,n2").isNull("n3")  
                .groupBy("x1").groupBy("x2,x3")  
                .having("x1=11").having("x3=433")  
                .orderBy("dd").orderBy("d1,d2");  
        System.out.println(ew.getSqlSegment());  
    }  
    

    .
    .
    .
    ** 条件构造二(同上):**

    int buyCount = selectCount(Condition.create()
    .setSqlSelect(“sum(quantity)”)
    .isNull(“order_id”)
    .eq(“user_id”, 1)
    .eq(“type”, 1)
    .in(“status”, new Integer[]{0, 1})
    .eq(“product_id”, 1)
    .between(“created_time”, startDate, currentDate)
    .eq(“weal”, 1));
    自定义条件使用entityWrapper:

    List selectMyPage(RowBounds rowBounds, @Param(“ew”) Wrapper wrapper);

    SELECT * FROM user ${ew.sqlSegment} *注意:此处不用担心SQL注入,MP已对ew做了字符串转义处理。 其实在使用MP做数据CURD时,还有另外一个方法,AR(ActiveRecord ),很简单,让我们的实体类继承MP提供Model<?>就好了,这和我们常用的方法可能会有些不同,下边简单说一下吧:*

    .
    .
    .
    .
    //实体类
    @TableName(“sys_user”) // 注解指定表名
    public class User extends Model {

    … // fields

    … // getter and setter

    .
    .

    / 指定主键 /*
    @Override
    protected Serializable pkVal() { //一定要指定主键哦
    return this.id;
    }
    }
    .
    .
    .
    下边就是CURD操作了:

    // 初始化 成功标识
    boolean result = false;
    // 初始化 User
    User user = new User();

    // 保存 User
    user.setName(“Tom”);
    result = user.insert();

    // 更新 User
    user.setAge(18);
    result = user.updateById();

    // 查询 User
    User exampleUser = t1.selectById();

    // 查询姓名为‘张三’的所有用户记录
    List userList1 = user.selectList(
    new EntityWrapper().eq(“name”, “张三”)
    );

    // 删除 User
    result = t2.deleteById();

    // 分页查询 10 条姓名为‘张三’、性别为男,且年龄在18至50之间的用户记录
    List userList = user.selectPage(
    new Page(1, 10),
    new EntityWrapper().eq(“name”, “张三”)
    .eq(“sex”, 0)
    .between(“age”, “18”, “50”)
    ).getRecords();
    就是这样了,可能你会说MP封装的有些过分了,这样做会分散数据逻辑到不同的层面中,难以管理,使代码难以理解。其实确实是这样,这就需要你在使用的时候注意一下了,在简化开发的同时也要保证你的代码层次清晰,做一个战略上的设计或者做一个取舍与平衡。
    .
    .
    .
    .
    .
    .

    **

    其实上边介绍的功能也不是MP的全部啦,下边介绍一下MP最有意思的模块——代码生成器。

    **

    步骤↓:
    如上边所说,使用代码生成器一定要引入velocity-engine-core(模板引擎)这个依赖。
    准备工作:
    选择主键策略,就是在上边最开始时候我介绍MP配置时其中的这项配置,如果你不记得了,请上翻!MP提供了如下几个主键策略: 值 描述
    IdType.AUTO ----------数据库ID自增
    IdType.INPUT ----------用户输入ID
    IdType.ID_WORKER---------- 全局唯一ID,内容为空自动填充(默认配置)
    IdType.UUID ----------全局唯一ID,内容为空自动填充
    MP默认使用的是ID_WORKER,这是MP在Sequence的基础上进行部分优化,用于产生全局唯一ID。

    表及字段命名策略选择,同上,还是在那个配置中。下边这段复制至MP官方文档:
    在MP中,我们建议数据库表名采用下划线命名方式,而表字段名采用驼峰命名方式。

    这么做的原因是为了避免在对应实体类时产生的性能损耗,这样字段不用做映射就能直接和实体类对应。当然如果项目里不用考虑这点性能损耗,那么你采用下滑线也是没问题的,只需要在生成代码时配置dbColumnUnderline属性就可以。

    建表(命名规则依照刚才你所配置的,这会影响生成的代码的类名、字段名是否正确)。
    执行下边的main方法,生成代码:

    import java.util.HashMap;  
    import java.util.Map;  
      
    import com.baomidou.mybatisplus.generator.AutoGenerator;  
    import com.baomidou.mybatisplus.generator.InjectionConfig;  
    import com.baomidou.mybatisplus.generator.config.DataSourceConfig;  
    import com.baomidou.mybatisplus.generator.config.GlobalConfig;  
    import com.baomidou.mybatisplus.generator.config.PackageConfig;  
    import com.baomidou.mybatisplus.generator.config.StrategyConfig;  
    import com.baomidou.mybatisplus.generator.config.rules.DbType;  
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;  
      
    /** 
     * <p> 
     * 代码生成器演示 
     * </p> 
     */  
    public class MpGenerator {  
      
        /** 
         * <p> 
         * MySQL 生成演示 
         * </p> 
         */  
        public static void main(String[] args) {  
            AutoGenerator mpg = new AutoGenerator();  
      
            // 全局配置  
            GlobalConfig gc = new GlobalConfig();  
            gc.setOutputDir("D://");  
            gc.setFileOverride(true);  
            gc.setActiveRecord(true);// 不需要ActiveRecord特性的请改为false  
            gc.setEnableCache(false);// XML 二级缓存  
            gc.setBaseResultMap(true);// XML ResultMap  
            gc.setBaseColumnList(false);// XML columList  
        // .setKotlin(true) 是否生成 kotlin 代码  
            gc.setAuthor("Yanghu");  
      
            // 自定义文件命名,注意 %s 会自动填充表实体属性!  
            // gc.setMapperName("%sDao");  
            // gc.setXmlName("%sDao");  
            // gc.setServiceName("MP%sService");  
            // gc.setServiceImplName("%sServiceDiy");  
            // gc.setControllerName("%sAction");  
            mpg.setGlobalConfig(gc);  
      
            // 数据源配置  
            DataSourceConfig dsc = new DataSourceConfig();  
            dsc.setDbType(DbType.MYSQL);  
            dsc.setTypeConvert(new MySqlTypeConvert(){  
                // 自定义数据库表字段类型转换【可选】  
                @Override  
                public DbColumnType processTypeConvert(String fieldType) {  
                    System.out.println("转换类型:" + fieldType);  
            // 注意!!processTypeConvert 存在默认类型转换,如果不是你要的效果请自定义返回、非如下直接返回。  
                    return super.processTypeConvert(fieldType);  
                }  
            });  
            dsc.setDriverName("com.mysql.jdbc.Driver");  
            dsc.setUsername("root");  
            dsc.setPassword("521");  
            dsc.setUrl("jdbc:mysql://127.0.0.1:3306/mybatis-plus?characterEncoding=utf8");  
            mpg.setDataSource(dsc);  
      
            // 策略配置  
            StrategyConfig strategy = new StrategyConfig();  
        // strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意  
            strategy.setTablePrefix(new String[] { "tlog_", "tsys_" });// 此处可以修改为您的表前缀  
            strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略  
            // strategy.setInclude(new String[] { "user" }); // 需要生成的表  
            // strategy.setExclude(new String[]{"test"}); // 排除生成的表  
            // 自定义实体父类  
            // strategy.setSuperEntityClass("com.baomidou.demo.TestEntity");  
            // 自定义实体,公共字段  
            // strategy.setSuperEntityColumns(new String[] { "test_id", "age" });  
            // 自定义 mapper 父类  
            // strategy.setSuperMapperClass("com.baomidou.demo.TestMapper");  
            // 自定义 service 父类  
            // strategy.setSuperServiceClass("com.baomidou.demo.TestService");  
            // 自定义 service 实现类父类  
            // strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl");  
            // 自定义 controller 父类  
            // strategy.setSuperControllerClass("com.baomidou.demo.TestController");  
            // 【实体】是否生成字段常量(默认 false)  
            // public static final String ID = "test_id";  
            // strategy.setEntityColumnConstant(true);  
            // 【实体】是否为构建者模型(默认 false)  
            // public User setName(String name) {this.name = name; return this;}  
            // strategy.setEntityBuilderModel(true);  
            mpg.setStrategy(strategy);  
      
            // 包配置  
            PackageConfig pc = new PackageConfig();  
            pc.setParent("com.baomidou");  
            pc.setModuleName("test");  
            mpg.setPackageInfo(pc);  
      
            // 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】  
            InjectionConfig cfg = new InjectionConfig() {  
                @Override  
                public void initMap() {  
                    Map<String, Object> map = new HashMap<String, Object>();  
                    map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");  
                    this.setMap(map);  
                }  
            };  
      
            // 自定义 xxList.jsp 生成  
            List<FileOutConfig> focList = new ArrayList<FileOutConfig>();  
            focList.add(new FileOutConfig("/template/list.jsp.vm") {  
                @Override  
                public String outputFile(TableInfo tableInfo) {  
                    // 自定义输入文件名称  
                    return "D://my_" + tableInfo.getEntityName() + ".jsp";  
                }  
            });  
            cfg.setFileOutConfigList(focList);  
            mpg.setCfg(cfg);  
      
        // 调整 xml 生成目录演示  
             focList.add(new FileOutConfig("/templates/mapper.xml.vm") {  
                @Override  
                public String outputFile(TableInfo tableInfo) {  
                    return "/develop/code/xml/" + tableInfo.getEntityName() + ".xml";  
                }  
            });  
            cfg.setFileOutConfigList(focList);  
            mpg.setCfg(cfg);  
      
            // 关闭默认 xml 生成,调整生成 至 根目录  
            TemplateConfig tc = new TemplateConfig();  
            tc.setXml(null);  
            mpg.setTemplate(tc);  
      
            // 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,  
            // 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称  
            // TemplateConfig tc = new TemplateConfig();  
            // tc.setController("...");  
            // tc.setEntity("...");  
            // tc.setMapper("...");  
            // tc.setXml("...");  
            // tc.setService("...");  
            // tc.setServiceImpl("...");  
        // 如上任何一个模块如果设置 空 OR Null 将不生成该模块。  
            // mpg.setTemplate(tc);  
      
            // 执行生成  
            mpg.execute();  
      
            // 打印注入设置【可无】  
            System.err.println(mpg.getCfg().getMap().get("abc"));  
        }  
      
    }  
    

    说明:中间的内容请自行修改,注释很清晰。
    成功生成代码,将生成的代码拷贝到你的项目中就可以了,这个东西节省了我们大量的时间和精力!

    **
    .
    .
    .
    .
    .
    .

    以下是注解说明,摘自官方文档: 注解说明**

    表名注解 @TableName

    com.baomidou.mybatisplus.annotations.TableName
    值 描述
    value ---------- 表名( 默认空 )
    resultMap ---------- xml 字段映射 resultMap ID

    主键注解 @TableId

    com.baomidou.mybatisplus.annotations.TableId
    值 描述
    value ---------- 字段值(驼峰命名方式,该值可无)
    type ----------主键 ID 策略类型( 默认 INPUT ,全局开启的是 ID_WORKER )
    暂不支持组合主键

    字段注解 @TableField

    com.baomidou.mybatisplus.annotations.TableField
    值 描述
    value ----------字段值(驼峰命名方式,该值可无)
    el ---------- 详看注释说明
    exist ----------是否为数据库表字段( 默认 true 存在,false 不存在 )
    strategy ---------- 字段验证 ( 默认 非 null 判断,查看 com.baomidou.mybatisplus.enums.FieldStrategy )
    .
    fill ----------字段填充标记 ( FieldFill, 配合自动填充使用 )
    字段填充策略 FieldFill
    值 描述
    DEFAULT ----------默认不处理
    INSERT ----------插入填充字段
    UPDATE ----------更新填充字段
    INSERT_UPDATE ----------插入和更新填充字段

    序列主键策略 注解 @KeySequence

    com.baomidou.mybatisplus.annotations.KeySequence
    值 描述
    value ----------序列名
    clazz ----------id的类型
    乐观锁标记注解 ----------@Version

    com.baomidou.mybatisplus.annotations.Version
    排除非表字段、查看文档常见问题部分!

    总结:MP的宗旨是简化开发,但是它在提供方便的同时却容易造成代码层次混乱,我们可能会把大量数据逻辑写到service层甚至contoller层中,使代码难以阅读。凡事过犹不及,在使用MP时一定要做分析,不要将所有数据操作都交给MP去实现。毕竟MP只是mybatis的增强工具,它并没有侵入mybatis的原生功能,在使用MP的增强功能的同时,原生mybatis的功能依然是可以正常使用的

    展开全文
  • 完整代码 https://github.com/pbteach/mybatis-plus-test 完整讲义 http://www.pbteach.com/post/java_distribut/mybatis-plus-01/ ...Mybatis-plus使用Oracle 主键Se...

    完整代码

    https://github.com/pbteach/mybatis-plus-test

    完整讲义

    http://www.pbteach.com/post/java_distribut/mybatis-plus-01/

    http://www.pbteach.com/post/java_distribut/mybatis-plus-02/

    Mybatis-plus使用Oracle 主键Sequence

    在mysql中,主键往往是自增长的,这样使用起来是比较方便的,如果使用的是Oracle数据库,那么就不能使用自增长了,就得使用Sequence 序列生成id值了。

    部署Oracle环境

    为了简化环境部署,这里使用Docker环境进行部署安装Oracle。

    #拉取镜像
    docker pull sath89/oracle-12c
    
    #创建容器
    docker create --name oracle -p 1521:1521 sath89/oracle-12c
    
    #启动
    docker start oracle && docker logs -f oracle
    
    #下面是启动过程
    Database not initialized. Initializing database.
    Starting tnslsnr
    Copying database files
    1% complete
    3% complete
    11% complete
    18% complete
    26% complete
    37% complete
    Creating and starting Oracle instance
    40% complete
    45% complete
    50% complete
    55% complete
    56% complete
    60% complete
    62% complete
    Completing Database Creation
    66% complete
    70% complete
    73% complete
    85% complete
    96% complete
    100% complete
    Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/xe/xe.log" for further details.
    Configuring Apex console
    Database initialized. Please visit http://#containeer:8080/em http://#containeer:8080/apex for extra configuration if needed
    Starting web management console
    
    PL/SQL procedure successfully completed.
    
    Starting import from '/docker-entrypoint-initdb.d':
    ls: cannot access /docker-entrypoint-initdb.d/*: No such file or directory
    Import finished
    
    Database ready to use. Enjoy! ;)
    
    #通过用户名密码即可登录
    用户名和密码为: system/oracle
    

    下面使用navicat12进行连接并操作oracle,使用资料中提供的安装包,可以试用14天。

    需要注意的是:由于安装的Oracle是64位版本,所以navicat也是需要使用64为版本,否则连接不成功。

    1556525517473

    连接成功:

    1556525564083

    创建表以及序列

    --创建表,表名以及字段名都要大写
    CREATE TABLE "TB_USER" (
      "ID" NUMBER(20) VISIBLE NOT NULL ,
      "USER_NAME" VARCHAR2(255 BYTE) VISIBLE ,
      "PASSWORD" VARCHAR2(255 BYTE) VISIBLE ,
      "NAME" VARCHAR2(255 BYTE) VISIBLE ,
      "AGE" NUMBER(10) VISIBLE ,
      "EMAIL" VARCHAR2(255 BYTE) VISIBLE 
    )
    
    --创建序列
    CREATE SEQUENCE SEQ_USER START WITH 1 INCREMENT BY 1
    

    jdbc驱动包

    由于版权原因,我们不能直接通过maven的中央仓库下载oracle数据库的jdbc驱动包,所以我们需要将驱动包安装到本地仓库。

    #ojdbc8.jar文件在资料中可以找到
    
    mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.1.0.1 -Dpackaging=jar -Dfile=ojdbc8.jar
    

    安装完成后的坐标:

    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc8</artifactId>
        <version>12.1.0.1</version>
    </dependency>
    

    修改application.properties

    对于application.properties的修改,需要修改2个位置,分别是:

    #数据库连接配置
    spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
    spring.datasource.url=jdbc:oracle:thin:@192.168.31.81:1521:xe
    spring.datasource.username=system
    spring.datasource.password=oracle
    
    #id生成策略
    mybatis-plus.global-config.db-config.id-type=input
    

    配置序列

    使用Oracle的序列需要做2件事情:

    第一,需要配置MP的序列生成器到Spring容器:

    package com.pbteach.mp;
    
    import com.baomidou.mybatisplus.extension.incrementer.OracleKeyGenerator;
    import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @MapperScan("com.pbteach.mp.mapper") //设置mapper接口的扫描包
    public class MybatisPlusConfig {
    
        /**
         * 分页插件
         */
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    
        /**
         * 序列生成器
         */
        @Bean
        public OracleKeyGenerator oracleKeyGenerator(){
            return new OracleKeyGenerator();
        }
    }
    

    第二,在实体对象中指定序列的名称:

    @KeySequence(value = "SEQ_USER", clazz = Long.class)
    public class User{
        ......
    }
    

    测试

    package com.pbteach.mp;
    
    import com.pbteach.mp.mapper.UserMapper;
    import com.pbteach.mp.pojo.User;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.util.List;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class UserMapperTest {
    
        @Autowired
        private UserMapper userMapper;
    
        @Test
        public void testInsert(){
            User user = new User();
            user.setAge(20);
            user.setEmail("test@pbteach.com");
            user.setName("曹操");
            user.setUserName("caocao");
            user.setPassword("123456");
    
            int result = this.userMapper.insert(user); //返回的result是受影响的行数,并不是自增后的id
            System.out.println("result = " + result);
    
            System.out.println(user.getId()); //自增后的id会回填到对象中
        }
    
        @Test
        public void testSelectById(){
            User user = this.userMapper.selectById(8L);
            System.out.println(user);
        }
    
    }
    

    1573690675905

    ser.getId()); //自增后的id会回填到对象中
    }

    @Test
    public void testSelectById(){
        User user = this.userMapper.selectById(8L);
        System.out.println(user);
    }
    

    }

    ![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cDovL3d3dy5wYnRlYWNoLmNvbS9wb3N0L2phdmFfZGlzdHJpYnV0L215YmF0aXMtcGx1cy0wMi8xNTczNjkwNjc1OTA1LnBuZw?x-oss-process=image/format,png)
    
    
    
    展开全文
  • springBoot 使用 mybatis-plus 插件 实现分页

    万次阅读 热门讨论 2018-10-30 16:32:58
    一、项目结构 二、pom.xml 依赖添加 (这里我是加在krystal_dao的pom.xml里面,单个项目,直接加在pom.xml,多模块根据自己项目情况添加) &lt;dependency&...mybatis-plus&lt;/arti...

    个人对mybatis-plus总结地址:mybatis-plus 介绍

    一、项目结构

    二、pom.xml 依赖添加   (这里我是加在krystal_dao的pom.xml里面,单个项目,直接加在pom.xml,多模块根据自己项目情况添加)

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>3.0-beta</version>
    </dependency>

    三、新建MyBatisPlusConfig.java (这里我用专门一个模块添加一些功能代码,里面依赖自己根据报错添加进去即可)

    package com.dm.krystal.core.config;
    import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @author krystal
     */
    @Configuration
    /*@MapperScan("com.dm.krystal")*/ /*  KrystalApiApplication在启动文件上写了,这里不加*/
    public class MyBatisPlusConfig {
        /**
         * mybatis-plus分页插件
         */
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
            return paginationInterceptor;
        }
    }

    四、具体代码实现

    1.controller  

        @GetMapping("/findAllUser")
        @ResponseBody
        public List<User>  findAllUser(){
            User user = new User();
            int page=2;//当前页
            int pageSize=4;//页面接收数据大小
            IPage<User> iPage = userService.selectPageExt(user, page, pageSize);
            iPage.getRecords();
            return   iPage.getRecords();
        }
    }

    2.service

    3.serviceImp

    public IPage<User> selectPageExt(User user, int page, int pageSize) throws RuntimeException {
        try {
            Page<User> p = new Page<>(page, pageSize);
            p.setRecords(userDao.selectPageExt(p, user));
            return p;
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
    }

    4.dao

    List<User> selectPageExt(Page<User> page, @Param("user") User user);

    5. .xml

    <select id="selectPageExt" resultType="com.dm.krystal.entity.User">
       select
        <include refid="userColumns"/>
        from  sys_user
    </select>

    五、sql 打印

     select * from sys_user LIMIT 4,4 

    结果

    展开全文
  • 1.在pom.xml 中引入mybatis-plus相关jar 包 &lt;dependency&gt;  &lt;groupId&gt;com.baomidou&lt;/groupId&gt;  &lt;artifactId&gt;mybatis-plus&lt;/artifactId&gt;...
  • mybatis使用association 时必须要保证key和association并列,简单来说就是select后面的列很多都可以省但a.m_id, a.s_id不可以省 然后顺藤摸瓜, 必须至少有一个和association 并列同级的属性存在且不会重复的  ...
  • Mybatis-plus和pagehelper引入的mybatismybatis-spring版本冲突导致ClassNotFoundException:org.mybatis.logging.LoggerFactory及自定义sqlSessionTemplate
  • MyBatis Plus 入门使用

    万次阅读 多人点赞 2018-07-15 18:08:49
    一、MyBatis Plus 介绍 MyBatis Plus 是国内人员开发的 MyBatis 增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 MyBatis Plus 的核心功能有:支持通用的 CRUD、代码生成器与条件...
  • 优势 SQL语句可以自由控制、更灵活和性能更高 SQL与代码分离,易于阅读和维护 ...Mybatis-Plus简介 增强Mybatis 无侵入,损耗小,强大的Curd操作 支持lambda形式调用,支持多种数据库 支持主键自动生成,支持ActiveRec...
  • 使用mybatis-plus遇到的坑

    万次阅读 2019-06-07 18:34:50
    如今的开发,对于数据库的curd,很多人都是使用mybatis,说到mybatis就不得不提mybatis的增强工具:mybatis-plusmybatis的增强版,只做增强不做改变。博主大飞表示,如果你使用mybatis而不懂mybatis-plus,那你...
  • 前言 现在的JAVA行业,貌似已经是...之前整合过了springboot+mybatis,前几天看到一个面试的问一个问题,Mybatis的一级缓存,二级缓存。我想这个应该也是一个重点吧,所以今天决定来详细解读一下神秘的一二级缓存。
  • 项目中同时使用mybatis plusmybatis的分页插件,现在mybatis plus分页结果total返回0,请问如何在兼容两种分页的情况下解决这个冲突问题? mybatis: ``` <!--分页插件 pagehelper --> <groupId>...
  • 主要介绍了Mybatis PlusMybatis的区别,需要的朋友可以参考下
  •  mybatis-plus相关包的 pom &lt;dependency&gt; &lt;groupId&gt;com.baomidou&lt;/groupId&gt; &lt;artifactId&gt;mybatis-plus&lt;/artifactId&gt; ...
  • Mybatis-Plus 使用操作_1

    万次阅读 2020-10-17 20:25:52
    代码生成器 pom 文件 <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter --> <dependency> <groupId>...mybatis-plus-boot-starter</artifac
  • mybatis-plus简单使用

    万次阅读 2019-08-10 15:38:33
    mybatis-plus简单使用官方网址mybatis和JPA比较mybatis-plusmybatis比较mysql建表DDL、DMLmaven添加依赖包基本使用通用新增方法常用注解排除非表字段的3种方式Mybatis-Plus查询方法普通查询(selectById、...
  • 使用Mybatis plus清空表数据

    千次阅读 2020-10-28 18:32:59
    使用Mybatis plus清空表数据 public interface YsSkuStockMapper extends BaseMapper<YsSkuStock> { //清空指定表 @Update("truncate table tb_user") void deleteYsSkuStock(); }
  • maven中使用mybatis-plus

    千次阅读 2019-10-21 16:07:55
    --MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具, 在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。--> com.baomidou mybatis-plus-boot-starter 3.2.0 com.baomidou mybatis-plus 3.2.0 2....
  • 主要介绍了Mybatis-PlusMybatis的区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • Springboot集成MyBatis-Plus使用

    万次阅读 2020-06-15 14:11:25
    MyBatis-Plus介绍 Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。这是官方给的定义,关于mybatis-plus的更多介绍及特性,可以参考mybatis-...
  • MyBatis Plus汇总

    千次阅读 2020-10-09 17:14:20
    MyBatis-Plus 学习汇总 正文 MyBatis-Plus 基本使用 MyBatis-Plus 使用条件构造器进行查询 未完待续
  • 使用mybatis plus批量插入数据

    万次阅读 2020-04-15 21:16:24
    今天试验了一下mybatis plus的批量插入方式,简直太简单了,太爽了,真真切切的体会到了科技就是生产力。。 直接上代码,一条语句就搞定,太爽了!!! @Autowired private OrderDetailsService ...
  • 在我们使用mybatis plus 时, mybatis plus 可以帮我们自动封装我们的实体类用来查询添加,当我们遇见我们的实体类名与我们的表字段均为驼峰写法时: 例如实体类中有一个字段为userName,而我们在数据库的字段名也...
  • 使用mybatis-plus 主键生成的坑

    千次阅读 2019-09-10 15:39:15
    使用mybaits-plus 的时候,mybatis-plus 会默认生成一个long 类型的uuid,这就导致了数据库的自增主键变成了看起来让人一脸懵逼的20位数字,解决办法如下: 在实体类的主键上添加@TableId注解: @TableId(value = "id...
  • 今天使用SpringBoot中使用Mybatis-plus整PageHelper分页插件把我给坑惨了,我报错的pom.xml配置如下,其它的依赖就忽略掉了 <!--pagehelper --> <dependency> <groupId>...pagehelper-spring-...
  • 主要介绍了使用mybatis-plus-generator进行代码自动生成的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • spring中使用mybatis plus连接sqlserver

    千次阅读 2020-03-03 10:03:39
    本文主要关注如何使用mybatis/mybatis plus连接SQL Server数据库,因此将省略其他项目配置、代码。 框架选择 应用框架:spring boot ORM框架:mybatis plus(对于连接数据库而言,mybatismybatis plus其实都一样)...
  • mybatis详细解读以及mybatis plus使用

    千次阅读 2019-04-07 21:11:05
    mybatis简介 任何一门语言的最好学习的途径无非是它的官网: http://www.mybatis.org/mybatis-3/zh/index.html MyBatis 是一款优秀的持久层框架,...MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接...
  • 第一步:打开Mybatis-Plus官网:mybatis-plus官网,点击快速开始选择springboot版本,于是我们就愉快地开始了。 官网pom文件: 官网yml文件配置: 那就是搞定这两个,我们就等于搞定了mybatis-plus入门了。 第二部...
  • 由于新的需求增加shiro权限认证,然后也在考虑用mybatis-plus,所以权限认证这部分的代码用到了mybatis-plus使用的过程中新的Dao层也就是Mapper使用都很正常,没有问题,但是在访问之前的接口的时候,问题产生了,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 79,282
精华内容 31,712
关键字:

plus不要使用mybatis