`
ahzzhen2
  • 浏览: 19393 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Mybatis自动生成Example类优化(抽象)

    博客分类:
  • Java
阅读更多

Mybatis自动生成Example类优化(抽象) 

背景:

example,domain xml庞大,难以增量维护

查询条件map传递,上层调用难以透明

多表查询,查询条件复杂,domain  xml庞大

 

设计思路:

mybatis是半自动化的orm框架,过度封装不免会丧失性能、易用性和自由度;所以框架定位并不是做一个含有各种and \or \distinct、group by..等通用的查询解决方案。只是将sql抽象为各个片断,在基类接口里提供比较常用的增、删、改、统计方法。对于复杂查询,在各个业务接口(Mapper)类方法形参中定义各种片段;至于查询结果映射保持原有mybatis方式。

 

 

自动或手工生成相关domain 如:

public class App {

.....

public static class MetaPath extends EntityPathSupport<App> {
       public FieldPath<Integer, App> id = createFieldPath(Integer.class,"id",JdbcType.INTEGER);;

       public FieldPath<String, App> appName = createFieldPath(String.class,"app_name",JdbcType.VARCHAR);;

       public FieldPath<Byte, App> platformType = createFieldPath(Byte.class,"platform_type",JdbcType.TINYINT);;

       public FieldPath<Byte, App> status = createFieldPath(Byte.class,"status",JdbcType.TINYINT);;

       public FieldPath<String, App> description = createFieldPath(String.class,"description",JdbcType.VARCHAR);;

       public FieldPath<Date, App> createOn = createFieldPath(Date.class,"create_on",JdbcType.TIMESTAMP);;

       public FieldPath<Integer, App> createBy = createFieldPath(Integer.class,"create_by",JdbcType.INTEGER);;

       public FieldPath<Date, App> opOn = createFieldPath(Date.class,"op_on",JdbcType.TIMESTAMP);;

       public FieldPath<Integer, App> opBy = createFieldPath(Integer.class,"op_by",JdbcType.INTEGER);;

       public MetaPath() {
           super("t_app");
       }
   }

}

 

使用方法:

1)查询

App.MetaPath mp = new App.MetaPath();

SelectStatement<App> st = SelectStatement.newInstance(mp);

st.getRestrictions().add(mp.appName.like(“%2%”)).add(mp.id.isNotNull());

st.setPagination(0, 1);

List<App> list = appMapper.selectByStatement(st);

System.out.println(list.size());

 

2)修改:

App app = new App();

app.setAppName(“sdfsdfdsfds”);

App.MetaPath ap = new App.MetaPath();

UpdateStatement<App> st = UpdateStatement.newInstance(ap); st.setFieldMetadatas(ap.metaDatas(app));

st.getRestrictions().add(ap.id.eq(app.getId()));

appMapper.updateByStatement(st);

3)删除:

...

 

此帖只是抛砖引玉(由于jar包中涉及公司信息,暂就到这吧)

 

 

基类如下 :

public interface VpmMapper<T,PK> {
	
	/**
	 * 新增
	 * @param entity
	 * @return
	 */
	int insert(T entity);
	
	/**
	 * 修改
	 * @param entity
	 * @return
	 */
	int update(T entity);
	/**
	 * 查询
	 * @param pk
	 * @return
	 */
	T selectByPK(PK pk);
	/**
	 * 删除
	 * @param entity
	 * @return
	 */
	int deleteByPK(PK pk);
	/**
	 * 
	 * @param statement
	 * @return
	 */
	int insertByStatement(@Param("st")InsertStatement<T> statement);
	
	int updateByStatement(@Param("st")UpdateStatement<T> statement);
	
	int deleteByRestriction(@Param("restrictions")Restrictions<T> restrictions);
	
	int countByRestriction(@Param("restrictions")Restrictions<T> restrictions);
	
	
}

 

分享到:
评论

相关推荐

    mybatis自动生成entity、dao、mapper

    - **DAO接口**:这些接口包含了一组基本的CRUD操作,如insert、update、delete和select,MBG会自动生成对应的抽象方法。 - **Mapper XML文件**:这些文件包含了SQL语句和结果映射,与DAO接口的方法一一对应。MBG会...

    mybatis代码生成器

    之后,选择需要生成代码的表,设置生成策略,比如是否生成Example类(用于动态SQL)、是否覆盖已存在的文件等。执行生成后,代码会自动保存到指定目录,可以直接导入到项目中使用。 在实际开发中,MyBatis代码生成...

    Mybatis Generator自动生成Dao,Mapping,Pojo插件

    例如,你可以决定是否生成Example类(用于复杂查询),是否生成字段注释,以及字段的getter和setter方法的生成规则等。此外,Mybatis Generator还支持自定义模板,这样可以根据自己的需求调整生成的代码风格。 接...

    mybatis basedao

    MyBatis BaseDAO 的核心理念是将通用的数据库操作抽象出来,形成一套标准化的方法,如 selectById、selectList、insert、update、delete 等。这些方法通常会配合Mapper接口和XML配置文件一起使用,使得开发者可以...

    mybatis-generator.zip

    然后,定义需要生成代码的表,可以指定表名、是否生成Example类(用于复杂查询)、是否生成主键字段等。还可以配置生成的Java类的包名、作者信息等。 在Java项目中引入MyBatis Generator后,通过执行特定的Java类或...

    springboot-mybatis

    本文将深入探讨如何在SpringBoot项目中整合Mybatis,以及如何实现Mapper接口的自动化生成。 首先,SpringBoot整合Mybatis的核心在于`spring-boot-starter-data-jpa`和`mybatis-spring-boot-starter`这两个依赖。`...

    Spring+MyBatis多数据源配置实现

    此外,项目结构中的`.classpath`、`.project`、`WebContent`、`src`、`script`、`.settings`和`build`文件夹通常是IDE自动生成的,它们分别包含了项目的类路径信息、项目配置、Web应用资源、源代码、脚本、IDE特定的...

    Java代码生成mapper、mapperxml、实体类示例

    本示例将详细解释如何利用Java代码自动生成Mapper接口、Mapper XML文件以及对应的实体类,从而提高开发效率,减少手动编写重复代码的工作量。 首先,Mapper接口是Java中的一个抽象层,它定义了数据库操作的方法,如...

    mybatis-plus

    - MP还支持Example查询,类似MyBatis的动态SQL,可以根据Example对象动态生成SQL。 12. **事务管理** - 在Spring环境下,可以通过@Transactional注解进行事务管理,或者使用TransactionTemplate。 13. **性能...

    Spring_boot_demo.rar

    2. **自动配置(Auto-configuration)**:Spring Boot 的自动配置是其一大亮点,它可以根据项目中的类路径和已添加的依赖自动配置 Bean。例如,当检测到 `spring-boot-starter-web` 依赖时,Spring Boot 会自动配置 ...

    spring中文参考文档

    7. **自动装配(Autowired)**:Spring 2.5引入了自动装配,通过`@Autowired`注解,系统会根据类型或名称自动将bean注入到需要的地方,减少了显式配置。 8. **Bean的作用域**:Spring中的bean可以有多种作用域,...

    ibatis和spring整合开发 例子

    Ibatis是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在配置文件中,提供了灵活的映射机制,避免了ORM框架的过度抽象。而Spring则是一个全面的企业级应用框架,它通过依赖注入(DI)和面向切面编程(AOP)...

    单点登录源码

    Spring+SpringMVC+Mybatis框架集成公共模块,包括公共配置、MybatisGenerator扩展插件、通用BaseService、工具类等。 &gt; zheng-admin 基于bootstrap实现的响应式Material Design风格的通用后台管理系统,`zheng`...

    Java示例代码.rar

    2. **面向对象编程**:可能会有接口、抽象类、访问修饰符、构造器、异常处理、集合框架(ArrayList、LinkedList、HashMap等)的实例,这些都是Java中面向对象编程的重要组成部分。 3. **JavaEE组件**:JavaEE_...

    Spring项目

    此外,Spring Data提供了与数据库交互的抽象层,支持JPA(Java Persistence API)、MyBatis等多种持久化技术。Spring MVC则用于构建Web应用,处理HTTP请求和响应。 Spring还提供了强大的安全框架Spring Security,...

Global site tag (gtag.js) - Google Analytics