mybatis逆向工程与分页在springboot中的应用及遇到坑

网友投稿 285 2023-01-22


mybatis逆向工程与分页在springboot中的应用及遇到坑

最近在项目中应用到springboot与mybatis,在进行整合过程中遇到一些坑,在此将其整理出来,便于以后查阅与复习。

项目运行环境为:eclispe+jdk1.8+maven

搭建Spring Boot环境

首先建立maven project,在生成的pom文件中加入依赖,代码如下:

org.springframework.boot

spring-boot-starter-parent

1.5.2.RELEASE

UTF-8

UTF-8

1.8

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.3.0

mysql

mysql-connector-java

runtime

com.github.pagehelper

pagehelper-spring-boot-starter

1.2.1

com.alibaba

druid

1.0.29

org.springframework.boot

spring-boot-maven-plugin

org.mybatis.generator

mybatis-generator-maven-plugin

1.3.2

${basedir}/src/main/resources/generator/generatorConfig.xml

true

true

配置好依赖后进行maven install,此时注意的坑:

坑一:启动maven install报错:

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage (default) on project springboot-mybatis: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage failed: Unable to find main class -> [Help 1]

[ERROR]

[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.

[ERROR] Re-run Maven using the -X switch to enable full debug logging.

[ERROR]

[ERROR] For more information about the errors and possible solutions, please read the following articles:

[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

报错原因是没有启动类

解决方法:编写启动类Main.java正常运行!

@SpringBootApplication

public class Main {

public static void main(String[] args) {

SpringApplication.run(Main.class, args);

}

}

坑二:启动maven install报错:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project springboot-mybatis: Compilation failure

[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

[ERROR] -> [Help 1]

[ERROR]

[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.

[ERROR] Re-run Maven using the -X switch to enable full debug logging.

[ERROR]

[ERROR] For more information about the errors and possible solutions, please read the following articles:

[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

报错原因:项目的java环境与电脑环境不符合,例如我的新建项目运行环境为J2SE-1.5,报错是在我将其改为jre1.8之后

解决方案:

右键项目——build path——Configure build path——Libraries——双击Jre System Libraries如下图所示:

选择Alternate JRE 如2处的下拉框只有jre,点击3处的Install JREs,依次经过add——Standard VM——next——Directory,选择本机的jdk位置点击finish

在install JREs位置将默认勾选更改jdk,如下图所示,并保存。

再次maven install项目正常。如下所示:

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 3.351 s

[INFO] Finished at: 2018-09-05T21:20:48+08:00

[INFO] Final Memory: nnjvbb23M/181M

[INFO] ------------------------------------------------------------------------

在src/main/resources新建文件:application.yml,内容如下所示:

server:

port: 8080

spring:

datasource:

name: test

url: jdbc:mysql://localhost:3306/test

username: root

password: 123456

driver-class-name: com.mysql.jdbc.Driver

## 该配置节点为独立的节点

mybatis:

mapper-locations: classpath:mapper/*.xml

#pagehelper分页插件

pagehelper:

helperDialect: mysql

reasonable: true

supportMethodsArguments: true

params: count=countSql

至此springboot环境搭建完毕!

逆向工程应用

首先应该注意到在pom文件中有配置逆向工程xml文件的位置:src/main/resources/generator/generatorConfig.xml

因而在src/main/resources下新建generator文件夹,并建立generatorConfig.xml文件,代码如下:

根据个人环境将配置文件中的配置进行更改,如数据库密码,包名,对应数据库表

所用的数据库表如下:

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

`id` bigint(20) NOT NULL,

`name` varchar(255) NOT NULL,

`age` int(4) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `user` VALUES ('1', 'wanger', '22');

INSERT INTO `user` VALUES ('2', 'zhangsan', '18');

INSERT INTO `user` VALUES ('3', 'lisi', '23');

INSERT INTO `user` VALUES ('4', 'wangwu', '21');

配置完成后,右键项目,选择run as——Maven build——在下面两处分别填入:

Goals: mybatis-generator:generate -e

 Profiles: generatorConfig.xml

如下图所示:

出现如下所示,代码生成成功,刷新项目即可。

[INFO] Generating Example class for table user

[INFO] Generating Record class for table user

[INFO] Generating Mapper Interface for table user

[INFO] Generating SQL Map for table user

[INFO] Saving file UserMapper.xml

[INFO] Saving file UserExample.java

[INFO] Saving file User.java

[INFO] Saving file UserMapper.java

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

需要注意的是:逆向工程生成的代码不会覆盖,因而不能重复多次生成。

此处也有个小坑,逆向工程的代码生成后,启动项目会报如下错误:

***************************

APPLICATION FAILED TO START

***************************

Description:

Field userMapper in com.luis.service.impl.UserServiceImpl required a bean of type 'com.luis.mapper.UserMapper' that could not be found.

Action:

Consider defining a bean of type 'com.luis.mapper.UserMapper' in your configuration.

解决方案:

1、给生成的mapper接口文件前加注解:@Mapper 即可解决。但需要给每一个mapper文件前加,繁琐,因而有第二种类

解决办法

2、在启动类前加@MapperScan({"com.luis.mapper"}),其中com.luis.mapper为mapper文件的所在位置。

参考自:http://412887952-qq-com.iteye.com/blog/2392672

分页应用

逆向工程已经生成了entity类,及dao层的mapper接口与*mapper.xml文件,因而/只用编写service层与web层。

首先在UserService中编写接口,代码如下:

public interface UserService {

User selectByName(String name);

List findAllUser(int pageNum, int pageSize);

}

在UserServiceImpl文件进行实现,代码如下所示:

@Service

public class UserServiceImpl implements UserService {

@Autowired

private UserMapper userMapper;

@Override

public User selectByName(String name) {

UserExample example = new UserExample();

Criteria criteria = example.createCriteria();

criteria.andNameEqualTo(name);

List users = userMapper.selectByExample(example);

if (users != null && users.size() > 0) {

return users.get(0);

}

return null;

}

/**

* pageNum 开始页数

* pageSize 每页显示的数据条数

*/

@Override

public List findAllUser(int pageNum, int pageSize) {

//将参数传给方法实现分页

PageHelper.startPage(pageNum, pageSize);

UserExample example = new UserExample();

List list = userMapper.selectByExample(example);

return list;

}

}

最后在controller层对查询结果进行接收,UserController代码如下:

@Controller

@RestController

public class UserController {

@Autowired

private UserService userService;

@RequestMapping("/test")

public User querUserByName() {

User user = userService.selectByName("luis");

System.out.println(user.toString());

return user;

}

@RequestMapping("/list")

public List querUser() {

List list = userService.findAllUser(1, 2);

//获取分页信息

PageInfo pageInfo = new PageInfo<>(list);

System.out.println("total:" + pageInfo.getTotal());

System.out.println("pages:" + pageInfo.getPages());

System.out.println("pageSize:" + pageInfo.getPageSize());

return list;

}

}

测试

此前在项目编写过程中已经对可能出现的错误进行了总结,最后,对项目的功能进行测试,通过加@RestController注解将数据传输到浏览器中。

测试mybatis与springboot,浏览器输入http://localhost:8080/test,浏览器输出:

{"id":1,"name":"wanger","age":22}

分页测试,浏览器输入http://localhost:8080/list,浏览器输出:

[{"id":1,"name":"wanger","age":22},{"id":2,"name":"zhangsan","age":18}]

eclipse输出:

total:4

pages:2

pageSize:2

项目搭建完毕,具体代码参见github

总结

以上所述是给大家介绍的mybatis逆向工程与分页在springboot中的应用,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring boot Mybatis 整合(完整版)
下一篇:浅谈Maven环境隔离应用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~