1. 集成Mybatis-Generator
1.1 导入依赖
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
</dependency>
</dependencies>
</plugin>
1.2 建立配置文件
<?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>
<context id="DB2Tables" targetRuntime="MyBatis3">
<plugin type="org.mybatis.generator.plugins.RowBoundsPlugin"></plugin>
<jdbcConnection driverClass="org.h2.Driver"
connectionURL="jdbc:h2:E:\Users\IdeaProjects\community"
userId="sa"
password="123">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="life.guohui.community.model" targetProject="src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="mapper" targetProject="src\main\resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="life.guohui.community.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<table tableName="user" domainObjectName="User"></table>
<table tableName="question" domainObjectName="Question"></table>
</context>
</generatorConfiguration>
1.3 扫描mapper文件添加注解
1.4 配置文件中扫描xml文件和mapper接口
# 扫描mapper.xml和mapper接口模型
mybatis.type-aliases-package=life.guohui.community.mapper
mybatis.mapper-locations=classpath:mapper/*.xml
1.5 逆向工程配置文件中引入分页插件
1.6 需要了解的操作
a. 修改方法
updateByExampleSelective
只修改参数1中已经赋值的字段,参数2是传入条件
b. 分页方法
selectByExampleWithRowbounds
public PaginationDTO list(Integer page, Integer size) {
PaginationDTO paginationDTO = new PaginationDTO();
Integer totalPage;
//拿到总数
Integer totalCount = (int)questionMapper.countByExample(new QuestionExample());
if(totalCount % size == 0){totalPage = totalCount/size;}else{totalPage = totalCount/size + 1;}
if(page<1){ page = 1;}
if(page>totalPage){page = totalPage;}
paginationDTO.setPagination(totalPage,page);
Integer offset = size * (page - 1);
List<Question> questions = questionMapper.selectByExampleWithRowbounds(new QuestionExample(), new RowBounds(offset, size));
List<QuestionDTO> questionDTOList = new ArrayList<>();
for(Question question : questions){
User user = userMapper.selectByPrimaryKey(question.getCreator());
QuestionDTO questionDTO = new QuestionDTO();
BeanUtils.copyProperties(question,questionDTO);
questionDTO.setUser(user);
questionDTOList.add(questionDTO);
}
paginationDTO.setQuestions(questionDTOList);
return paginationDTO;
}
2. 异常处理
2.1 添加error.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
......
<body>
<div th:insert="~{navigation :: nav}"></div>
<div class="jumbotron" style="min-height: 300px;">
<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12"><h1>出错啦!!!</h1>
<p th:text="${message}">服务太热啦,要不然稍等下再来试试~</p>
<p><a class="btn btn-primary btn-lg" href="/" role="button">回到主页</a></p>
</div>
</div>
</body>
</html>
2.2 添加css
2.3 自定义异常
package life.guohui.community.exception;
public class CustomizeException extends RuntimeException {
private String message;
public CustomizeException(ICustomizeErrorCode errorCode) {
this.message = errorCode.getMessage();
}
public CustomizeException(String message) {
this.message = message;
}
@Override
public String getMessage() {
return message;
}
}
2.4 监听器advice
package life.guohui.community.advice;
@ControllerAdvice
public class CustomizeExceptionHandler {
ModelAndView handle(HttpServletRequest request, Throwable e, Model model){
if(e instanceof CustomizeException){
model.addAttribute("message",e.getMessage());
}else{
model.addAttribute("message","服务过热,稍后试试!!!");
}
return new ModelAndView("error");
}
}
2.4 创建异常信息接口
2.5 创建枚举实现异常信息接口
package life.guohui.community.exception;
public enum CustomizeErrorCode implements ICustomizeErrorCode{
QUESTION_NOT_FOUND("你找的问题都不在了,要不要换一个试试?");
private String message;
CustomizeErrorCode(String message) {
this.message = message;
}
@Override
public String getMessage() {
return message;
}
}
2.6 创建Controller实现errorController
package life.guohui.community.controller;
@Controller
@RequestMapping("${server.error.path:${error.path:/error}}")
public class CustomizeErrorController implements ErrorController {
@Override
public String getErrorPath() {
return "error";
}
@RequestMapping(produces = MediaType.TEXT_HTML_VALUE)
public ModelAndView errorHtml(HttpServletRequest request, Model model) {
HttpStatus status = getStatus(request);
if (status.is4xxClientError()) {
model.addAttribute("message", "你这个请求错了吧,要不然换个姿势?");
}
if (status.is5xxServerError()) {
model.addAttribute("message", "服务冒烟了,要不然你稍后再试试!!!");
}
return new ModelAndView("error");
}
private HttpStatus getStatus(HttpServletRequest request) {
Integer statusCode = (Integer) request
.getAttribute("javax.servlet.error.status_code");
if (statusCode == null) {
return HttpStatus.INTERNAL_SERVER_ERROR;
}
try {
return HttpStatus.valueOf(statusCode);
} catch (Exception ex) {
return HttpStatus.INTERNAL_SERVER_ERROR;
}
}
}
2.7 在QuestionService中使用
3. 阅读功能
3.1 点击文章标题后阅读数+1
Controller中增加阅读
3.2 Mapper.xml文件中增加方法
<update id="incView" parameterType="life.guohui.community.model.Question">
update QUESTION
set
VIEW_COUNT = VIEW_COUNT + #{viewCount,jdbcType=INTEGER}
WHERE id = #{id}
</update>
3.3 Service中使用
public void inView(Integer id) {
Question question = new Question();
question.setId(id);
question.setViewCount(1);
questionMapper.incView(question);
}
网友评论