黑马程序员技术交流社区

标题: 【深圳校区】MyBatis DAO 增强工具 MyFat [打印本页]

作者: 柠檬leung不酸    时间: 2019-1-3 10:05
标题: 【深圳校区】MyBatis DAO 增强工具 MyFat
简介 | Intro

MyFat是MyBatis的DAO功能增强插件,利用全功能持久层工具jSqlBox来补足MyBatis缺少的CRUD功能。

优点 | Advantages与其它MyBatis插件的区别文档 | Documentation

中文 |  JavaDoc

配置 | Configuration

MyFat需Java8支持,在pom.xml中加入以下内容即可,注意MyFat必须先于MyBatis加载:

<dependency>     <groupId>com.github.drinkjava2</groupId>     <artifactId>myfat</artifactId>     <version>1.0.0</version> <!--或最新版-->  </dependency>  <dependency>      <groupId>org.mybatis</groupId>      <artifactId>mybatis</artifactId>      <version>3.4.6</version> <!--或最新版-->  </dependency>

如果在Spring环境下,则上面的MyBatis依赖项要改成Spring的:

  <dependency>      <groupId>org.mybatis.spring.boot</groupId>      <artifactId>mybatis-spring-boot-starter</artifactId>          <version>1.3.2</version> <!--或最新版-->   </dependency>示例 | First Example

以下示例演示了MyFat的使用,至于SqlSessionFactory的配置,与标准MyBatis的配置一模一样(透明式增强),略去。完整的源码可见Demo目录下的myfattest:

SqlSession session = sqlSessionFactory.openSession(false);try {    // SqlSession有了增强的SQL方法,jSqlBox中的pinte系列方法可用    Assert.assertEquals(50, session.iQueryForLongValue("select count(*) from user_tb where age>", ques(50),            " and age <= ", ques(200)));    Assert.assertEquals(100, session.eCountAll(User.class, " where age>0"));    UserMapper mapper = session.getMapper(UserMapper.class);    // 如果mapper继承于RootMapper<User>, 也有增强的pintea系方法了    Assert.assertEquals(100, mapper.aCountAll(" where age>?", param(0), " and age<?", param(200)));        Helper.pagin(2, 15);// 无侵入的分页    try {        List<User> users = mapper.getUsersOlderThan(50);        Assert.assertEquals(15, users.size());    } finally {        Helper.clear();    }    new User().insert(session.ctx());// ActiveRecord写法     new Tail().putTail("id", "1").insert(session.ctx(), tail("user_tb")); // Tail相当于jFinal中的Record    session.ctx().iExecute("insert into user_tb (id) values(?)", param('a'));    session.iExecute("insert into user_tb (id) values(?)", param('b'));    mapper.iExecute("insert into user_tb (id) values(?)", param('c'));    mapper.insertOneUser("d");} catch (Exception e) {    System.out.println("Exception:" + e.getMessage());} finally {    session.close();}

上例是手工进行SqlSession的获取和关闭,适用于纯MyBatis环境。如果在Spring或SpringBoot环境下,则有以下写法示例:

@Transactional    public void insertWithDiv0() {        for (int i = 0; i < 100; i++)            new Customer().putField("name", "Foo" + i).insert();        Assert.assertEquals(15, new Customer().findAll(" where name<>''", pagin(2, 15)).size());        customerMapper.insertByIdAndName("2", "Sam");        customerMapper.iExecute("insert into customer (id,name) values (?,?)", param("3", "Tom"));        iExecute("insert into customer (id,name) values (?,?)", param("4", "Cat"));        new Customer().insert();         Assert.assertEquals(104, new Customer().countAll());        System.out.println(1 / 0);    }

Mapper由Spring注入,采用声明式事务,不需要手工获取和管理SqlSession。

示例2中 new Customer().insert(); 这种ActiveRedord写法,不需要传入一个ctx参数,它的前提是设定了一个缺省全局上下文(SqlBoxContext),详见jSqlBox项目介绍及demo/myfat-springboot示例。

示例 | Demo
转自 开源中国地址 https://www.oschina.net/p/myfat







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2