使用mybatis-generator添加自定义分页插件时提示无法实例化插件类

吉他猪 2014-07-23 12:29:18
使用maven搭建
pom.xml

<build>
<plugins>
<!-- mybatis自动生成插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.1</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>

分页插件 PaginationPlugin.java

package com.guitar.pub.plugin;
import java.util.List;

import org.mybatis.generator.api.CommentGenerator;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.JavaVisibility;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.Parameter;
import org.mybatis.generator.api.dom.java.PrimitiveTypeWrapper;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;

/**
* <P>File name : PaginationPlugin.java </P>
* <P>Author : fly </P>
* <P>Date : 2013-7-2 上午11:50:45 </P>
*/
public class PaginationPlugin extends PluginAdapter {
@Override
public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,
IntrospectedTable introspectedTable) {
// add field, getter, setter for limit clause
addLimit(topLevelClass, introspectedTable, "limitStart");
addLimit(topLevelClass, introspectedTable, "limitEnd");
return super.modelExampleClassGenerated(topLevelClass,
introspectedTable);
}
@Override
public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(
XmlElement element, IntrospectedTable introspectedTable) {
// XmlElement isParameterPresenteElemen = (XmlElement) element
// .getElements().get(element.getElements().size() - 1);
XmlElement isNotNullElement = new XmlElement("if"); //$NON-NLS-1$
isNotNullElement.addAttribute(new Attribute("test", "limitStart != null and limitStart>=0")); //$NON-NLS-1$ //$NON-NLS-2$
// isNotNullElement.addAttribute(new Attribute("compareValue", "0")); //$NON-NLS-1$ //$NON-NLS-2$
isNotNullElement.addElement(new TextElement(
"limit #{limitStart} , #{limitEnd}"));
// isParameterPresenteElemen.addElement(isNotNullElement);
element.addElement(isNotNullElement);
return super.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element,
introspectedTable);
}
private void addLimit(TopLevelClass topLevelClass,
IntrospectedTable introspectedTable, String name) {
CommentGenerator commentGenerator = context.getCommentGenerator();
Field field = new Field();
field.setVisibility(JavaVisibility.PROTECTED);
// field.setType(FullyQualifiedJavaType.getIntInstance());
field.setType(PrimitiveTypeWrapper.getIntegerInstance());
field.setName(name);
// field.setInitializationString("-1");
commentGenerator.addFieldComment(field, introspectedTable);
topLevelClass.addField(field);
char c = name.charAt(0);
String camel = Character.toUpperCase(c) + name.substring(1);
Method method = new Method();
method.setVisibility(JavaVisibility.PUBLIC);
method.setName("set" + camel);
method.addParameter(new Parameter(PrimitiveTypeWrapper.getIntegerInstance(), name));
method.addBodyLine("this." + name + "=" + name + ";");
commentGenerator.addGeneralMethodComment(method, introspectedTable);
topLevelClass.addMethod(method);
method = new Method();
method.setVisibility(JavaVisibility.PUBLIC);
method.setReturnType(PrimitiveTypeWrapper.getIntegerInstance());
method.setName("get" + camel);
method.addBodyLine("return " + name + ";");
commentGenerator.addGeneralMethodComment(method, introspectedTable);
topLevelClass.addMethod(method);
}
/**
* This plugin is always valid - no properties are required
*/
public boolean validate(List<String> warnings) {
return true;
}

}



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 数据库驱动包位置 -->
<classPathEntry location="C:\Users\Administrator\.m2\repository\mysql\mysql-connector-java\5.1.29\mysql-connector-java-5.1.29.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<!-- 这里引入扩展插件 -->
<plugin type="com.guitar.pub.plugin.PaginationPlugin" />

<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 数据库链接URL、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/guitarPig" userId="root" password="">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator targetPackage="com.guitar.biz.user.entity" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成的映射文件包名和位置 -->
<sqlMapGenerator targetPackage="com.guitar.biz.user.dao" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.guitar.biz.user.dao" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 要生成那些表(更改tableName和domainObjectName就可以) -->
<table tableName="t_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" >
<columnOverride column="is_use" property="isUse" javaType="Boolean"/>
</table>
</context>
</generatorConfiguration>

错误提示:

java.lang.RuntimeException: Cannot instantiate object of type com.guitar.pub.plugin.PaginationPlugin
at org.mybatis.generator.internal.ObjectFactory.createInternalObject(ObjectFactory.java:137)
at org.mybatis.generator.internal.ObjectFactory.createPlugin(ObjectFactory.java:174)
at org.mybatis.generator.config.Context.generateFiles(Context.java:463)
at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:233)
at org.mybatis.generator.maven.MyBatisGeneratorMojo.execute(MyBatisGeneratorMojo.java:184)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.ClassNotFoundException: com.guitar.pub.plugin.PaginationPlugin
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:242)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.mybatis.generator.internal.ObjectFactory.internalClassForName(ObjectFactory.java:123)
at org.mybatis.generator.internal.ObjectFactory.createInternalObject(ObjectFactory.java:133)
... 25 more

这个类肯定是存在的,但是不知道为什么它无法实例化,难道还有其他的配置吗
...全文
6994 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
鼓鼓的钱袋 2016-12-21
  • 打赏
  • 举报
回复
引用 8 楼 duanjw1988 的回复:
[quote=引用 6 楼 hgf_tc 的回复:] [quote=引用 4 楼 luobaolin2008 的回复:] 解决了, 先需要将自己的类打成jar包然后通过maven命令将打包的jar安装到本地仓库

mvn install:install-file -Dfile=c:\pagination-{version}.jar -DgroupId=com.google.code 
-DartifactId=pagination -Dversion={version} -Dpackaging=jar
然后在mybatis-generator-maven-plugin插件中添加依赖

<build>
		<plugins>
			<!-- mybatis自动生成插件 -->
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.1</version>
				<dependencies>
					<dependency>
						<groupId>com.guitar.com</groupId>
						<artifactId>pagination</artifactId>
						<version>1.0</version>
					</dependency>
				</dependencies>
				<configuration>
					<verbose>true</verbose>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>
		</plugins>
	</build>
暂时我是这么解决的,但是缺点是pom文件将失去可移植性,只能在本地使用。如果可以就将分页的发到在线maven仓库 最后希望对有同样问题的人有帮助
兄弟,请问这个访问哪里还需要注意的 我按照你说的打包 配置之后 仍旧同样的错误[/quote] 你的好了? 我也这个错误[/quote] 已解决!
鼓鼓的钱袋 2016-12-19
  • 打赏
  • 举报
回复
引用 6 楼 hgf_tc 的回复:
[quote=引用 4 楼 luobaolin2008 的回复:] 解决了, 先需要将自己的类打成jar包然后通过maven命令将打包的jar安装到本地仓库

mvn install:install-file -Dfile=c:\pagination-{version}.jar -DgroupId=com.google.code 
-DartifactId=pagination -Dversion={version} -Dpackaging=jar
然后在mybatis-generator-maven-plugin插件中添加依赖

<build>
		<plugins>
			<!-- mybatis自动生成插件 -->
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.1</version>
				<dependencies>
					<dependency>
						<groupId>com.guitar.com</groupId>
						<artifactId>pagination</artifactId>
						<version>1.0</version>
					</dependency>
				</dependencies>
				<configuration>
					<verbose>true</verbose>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>
		</plugins>
	</build>
暂时我是这么解决的,但是缺点是pom文件将失去可移植性,只能在本地使用。如果可以就将分页的发到在线maven仓库 最后希望对有同样问题的人有帮助
兄弟,请问这个访问哪里还需要注意的 我按照你说的打包 配置之后 仍旧同样的错误[/quote] 你的好了? 我也这个错误
raykcn 2016-05-19
  • 打赏
  • 举报
回复
在generatorConfig.xml 文件中,增加 <plugin type="com.xxx.PaginationPlugin"></plugin>
天雄人 2016-01-22
  • 打赏
  • 举报
回复
引用 4 楼 luobaolin2008 的回复:
解决了, 先需要将自己的类打成jar包然后通过maven命令将打包的jar安装到本地仓库

mvn install:install-file -Dfile=c:\pagination-{version}.jar -DgroupId=com.google.code 
-DartifactId=pagination -Dversion={version} -Dpackaging=jar
然后在mybatis-generator-maven-plugin插件中添加依赖

<build>
		<plugins>
			<!-- mybatis自动生成插件 -->
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.1</version>
				<dependencies>
					<dependency>
						<groupId>com.guitar.com</groupId>
						<artifactId>pagination</artifactId>
						<version>1.0</version>
					</dependency>
				</dependencies>
				<configuration>
					<verbose>true</verbose>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>
		</plugins>
	</build>
暂时我是这么解决的,但是缺点是pom文件将失去可移植性,只能在本地使用。如果可以就将分页的发到在线maven仓库 最后希望对有同样问题的人有帮助
兄弟,请问这个访问哪里还需要注意的 我按照你说的打包 配置之后 仍旧同样的错误
wqc5461 2014-07-23
  • 打赏
  • 举报
回复
Caused by: java.lang.ClassNotFoundException: com.guitar.pub.plugin.PaginationPlugin
吉他猪 2014-07-23
  • 打赏
  • 举报
回复
pom.xml中怎么依赖当前项目呢,如果可以的话就不用自己部署jar包到本地仓库那么麻烦了
吉他猪 2014-07-23
  • 打赏
  • 举报
回复
解决了, 先需要将自己的类打成jar包然后通过maven命令将打包的jar安装到本地仓库

mvn install:install-file -Dfile=c:\pagination-{version}.jar -DgroupId=com.google.code 
-DartifactId=pagination -Dversion={version} -Dpackaging=jar
然后在mybatis-generator-maven-plugin插件中添加依赖

<build>
		<plugins>
			<!-- mybatis自动生成插件 -->
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.1</version>
				<dependencies>
					<dependency>
						<groupId>com.guitar.com</groupId>
						<artifactId>pagination</artifactId>
						<version>1.0</version>
					</dependency>
				</dependencies>
				<configuration>
					<verbose>true</verbose>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>
		</plugins>
	</build>
暂时我是这么解决的,但是缺点是pom文件将失去可移植性,只能在本地使用。如果可以就将分页的发到在线maven仓库 最后希望对有同样问题的人有帮助
Defonds 2014-07-23
  • 打赏
  • 举报
回复
1. 楼主确认一下运行时环境下的 classpath 里有这个类 2. 检查是不是包版本冲突的问题
吉他猪 2014-07-23
  • 打赏
  • 举报
回复
无法找到这个类,但是这个类存在
MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载 转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibatis,这是mybatis的前身,当在做项目,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个ORM 工具感兴趣。因为接下来自己的项目中很有可能采用这个ORM工具。所以在此重新温习了一下 mybatis, 因此就有了这个系列的 mybatis 教程. 什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到 sessionfactory. 2. 由sessionfactory 产生 session 3. 在session 中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session 。 5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。 mybatis实战教程(mybatis in action)之一:开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。 首先建立一个名字为 MyBaits 的 dynamic web project 1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。 2. 将 mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到 web工程的lib目录. 3. 创建mysql 测试数据库和用户表,注意,这里采用的是 utf-8 编码 创建用户表,并插入一条测试数据 程序代码 程序代码 Create TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `userAge` int(11) DEFAULT NULL, `userAddress` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong'

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧