目前正在维护的公司的一个项目是一个ssm架构的java项目,dao层的接口有大量数据库查询的方法,一个条件变化就要对应一个方法,再加上一些通用的curd方法,对应一张表的dao层方法有时候多达近20个,果断决定优化一下,经过一番探索,发现了一个mybatis的好伴侣,mybatis-plus,上手容易,简洁高效,这里有官方的文档入口,文档比较详细,本来不想在重复文档内容,但是关上文档,看着自己改过的项目,还是打算在脑海里过一下使用步骤及相关注意事项,顺便记录一下。

  MyBatis-plus有什么特色

  1、代码生成

  2、条件构造器

  对于我而言,主要的目的是使用它强大的条件构造器

快速使用步骤

一、准备工作(配置)

  1、添加pom.xml文件依赖

<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.0.1</version>
</dependency>

  注意:mybatis-plus会自动维护mybatis以及mybatis-spring的依赖,所以不需要引入后两者,避免发生版本冲突.

  2、修改配置文件

  将mybatis的sqlSessionFactory替换成mybatis-plus的即可,mybatis-plus只做了一些功能的扩展:

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 自动扫描Mapping.xml文件 -->
<property name="mapperLocations" value="classpath:mybatis/*/*.xml"/>
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
<property name="typeAliasesPackage" value="com.baomidou.springmvc.model.*"/>
<property name="plugins">
<array>
<!-- 分页插件配置 -->
<bean id="paginationInterceptor" class="com.baomidou.mybatisplus.plugins.PaginationInterceptor">
<property name="dialectType" value="mysql"/>
</bean>
</array>
</property>
<!-- 全局配置注入 -->
<property name="globalConfig" ref="globalConfig" />
</bean>

  在上面的配置中,除了mybatis的常规配置,多了一个分页插件的配置和全局配置,mybatis-plus提供了很方便的使用分页的插件,还有一个全局配置如下:

<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`
ORACLE->`oracle`
DB2->`db2`
H2->`h2`
HSQL->`hsql`
SQLITE->`sqlite`
POSTGRE->`postgresql`
SQLSERVER2005->`sqlserver2005`
SQLSERVER->`sqlserver`
-->
<!-- Oracle需要添加该项 -->
<!-- <property name="dbType" value="mysql" /> -->
<!-- 全局表为下划线命名设置 true -->
<property name="dbColumnUnderline" value="true" />
</bean>

  至此,配置工作就算大功告成了,接下来通过一个简单的例子来感受一下它的使用.

二、使用

  1、新建一个user表

@TableName("user")
public class User implements Serializable { /** 用户ID */
private Long id; /** 用户名 */
private String name; /** 用户年龄 */
private Integer age; @TableField(exist = false)
private String state;
}

  这里有两个注解需要注意,第一是@tableName("user"),它是指定与数据库表的关联,这里的注解意味着你的数据库里应该有一个名为user的表与之对应,并且数据表的列名应该就是User类的属性,对于User类中有而user表中没有的属性需要加第二个注解@TableField(exist = false),表示排除User类中的属性.

  2、新建Dao层接口UserMapper

/**
* User 表数据库控制层接口
*/
public interface UserMapper extends BaseMapper<User> {
@Select("selectUserList")
List<User> selectUserList(Pagination page,String state);
}

  dao接口需要实现Basemapper,这样就能够使用封装好的很多通用方法,另外也可以自己编写方法,@select注解引用自第三步的UserMapper文件

  3、新建UserMapper配置文件

<?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.baomidou.springmvc.mapper.system.UserMapper"> <!-- 通用查询结果列-->
<sql id="Base_Column_List">
id, name, age
</sql> <select id="selectUserList" resultType="User">
SELECT * FROM sys_user WHERE state=#{state}
</select>
</mapper>

  4、新建service层类UserService

/**
*
* User 表数据服务层接口实现类
*
*/
@Service
public class UserService extends ServiceImpl<UserMapper, User>{
public Page<User> selectUserPage(Page<User> page, String state) {
page.setRecords(baseMapper.selectUserList(page,state));
return page;
}
}

  UserService继承了ServiceImpl类,mybatis-plus通过这种方式为我们注入了UserMapper,这样可以使用service层默认为我们提供的很多方法,也可以调用我们自己在dao层编写的操作数据库的方法.Page类是mybatis-plus提供分页功能的一个model,继承了Pagination,这样我们也不需要自己再编写一个Page类,直接使用即可。

  5、新建controller层UserController

@Controller
public class UserController extends BaseController { @Autowired
private IUserService userService; @ResponseBody
@RequestMapping("/page")
public Object selectPage(Model model){ Page page=new Page(1,10);
page = userService.selectUserPage(page, "NORMAL");
return page;
}

  以上就完成了一个基本的功能,下面来看一下它的条件构建器.

三、mybatis-plus的条件构建器

  首先看一个条件构建器实例的简单实用.

public void test(){
EntityWrapper ew=new EntityWrapper();
ew.setEntity(new User());
String name="wang";
Integer age=16;
ew.where("name = {0}",name).andNew("age > {0}",age).orderBy("age");
List<User> list = userService.selectList(ew);
Page page2 = userService.selectPage(page, ew);
}

  这里使用了一个条件包装类EntityWrapper,来进行对sql语句的拼装,原理也很好理解,上面的代码中,第一个list查询的结果就是查询数据库中name=wang并且age>16岁的所有记录并按照age排序.而第二个查询就是再多加一个分页的功能.

  基本上来说,使用EntityWrapper可以简单地完成一些条件查询,但如果查询方法使用频率很高的话还是建议自己写在UserMapper里.

  那么自定义的mapper方法能不能使用EntityWrapper呢,当然也是可以的.

  文档中给了一个这样的例子.

  1.在Mappper中定义:

  List<User> selectMyPage(RowBounds rowBounds, @Param("ew") Wrapper<T> wrapper);

  2.在mapper文件中定义:

<select id="selectMyPage" resultType="User">

   SELECT * FROM user ${ew.sqlSegment}

</select>

  对于EntityMapper的条件拼接,基本可以实现sql中常用的where,and,or,groupby,orderby等语法,具体构建方法可以灵活组合.

@Test
public void testTSQL11() {
/*
* 实体带查询使用方法 输出看结果
*/
ew.setEntity(new User(1));
ew.where("name={0}", "'zhangsan'").and("id=1")
.orNew("status={0}", "0").or("status=1")
.notLike("nlike", "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());
}

(转)mybatis-plus入门的更多相关文章

  1. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  2. MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  3. MyBatis学习总结(一)——MyBatis快速入门(转载)

    本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...

  4. MyBatis入门学习教程-MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  5. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  6. 【转】MyBatis学习总结(一)——MyBatis快速入门

    [转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...

  7. mybatis快速入门(六)

    前面mybatis的入门程序基本上都写完了,就看大家的灵活运用了,今天来吧前面的整合一下封装一个公共的BaseDao 只需要把前面的改造下然后创建一个BaseDao的接口,其它的继承BaseDao接口 ...

  8. MyBatis学习总结-MyBatis快速入门的系列教程

    MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...

  9. MyBatis基础入门《二十》动态SQL(foreach)

    MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...

  10. MyBatis基础入门《十九》动态SQL(set,trim)

    MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...

随机推荐

  1. Scala_对象

    对象 单例对象 Scala并没有提供Java那样的静态方法或静态字段,但是,可以采用 object关键字实现单例对象,具备和Java静态方法同样的功能. 可以看出,单例对象的定义和类的定义很相似,明显 ...

  2. 直接端口打印 支持USB接口的打印机吗?解决办法

    直接端口打印 支持USB接口的打印机吗?解决办法 www.MyException.Cn  网友分享于:2013-09-15  浏览:488次       直接端口打印 支持USB接口的打印机吗?问题如 ...

  3. 如何利用JUnit开展一个简单的单元测试(测试控制台输出是否正确)

    待测类(CreateString)如下: public class CreateString { public void createString() { //Output the following ...

  4. 在线安装WordPress更新 失败的解决办法

    1.  登录ftp登录不上 , 总是登录失败 在服务器上新建了一个vsftpd服务器,并设置了相应的虚拟用户,修改chroot到网站目录 相关连接:https://blog.csdn.net/zhan ...

  5. 全球第一开源ERP Odoo操作手册 数据库简介

    1.3 数据库简介 每一个独立核算的企业都有一套相互关联的账簿体系, 把这一套完整的账簿体系建立在计算机系统中就称为一个数据库. 一般一个企业只用一个数据库. 如果企业有几个下属的独立核算的实体,也可 ...

  6. FunDA(16)- 示范:整合并行运算 - total parallelism solution

    在对上两篇讨论中我们介绍了并行运算的两种体现方式:并行构建数据源及并行运算用户自定义函数.我们分别对这两部分进行了示范.本篇我准备示范把这两种情况集成一体的并行运算模式.这次介绍的数据源并行构建方式也 ...

  7. yum 安装mysql数据库

    1.先查看是否有安装mysql,有的话通过yum remove mysql先卸载掉,卸载完成后执行 yum install -y mysql-server mysql mysql-deve 2.启动m ...

  8. 修改oracle默认监听端口

    修改oracle默认监听端口 oracle端口修改 主要是修改两个文件和修改oracle参数local_listener 1 查看当前监听状态 [oracle@test ~]$ lsnrctl sta ...

  9. linux服务器ssh免密码登录

    假设有三台服务器的ip分别是10.9.1.101.10.9.1.102.10.9.1.103 修改hosts文件 分别修改三台服务器的hosts的文件(vi /etc/hosts), 在hosts文件 ...

  10. <c:if test=""></c:if>如何判断空(使用例子)

    <c:if test=""></c:if>如何判断空(使用例子) 标签: session / 前端 / c-if userName是登录的时候放到sessi ...