建议先看 https://www.jianshu.com/p/c558bc213d0c 《SpringBoot集成MyBatis》我的这篇文章,因为配置环境之类的依赖,在这篇文章中我就不讲了。
接着上篇文章的讲解,如何在SpringBoot中集成代码自动生成器。
简介
我们通过代码自动生成器可以一键生成entity、 dao、mapper相关基础代码,可以有效的节省我们的开发时间,提高效率。
这里我介绍的是生成mapper.xml方式,也可以生成注解方式的代码。
代码自动生成器是通过maven运行的,所以先配置项目pom.xml
maven依赖配置如下:
org.mybatis.generator
mybatis-generator-core
1.3.5
org.mybatis.generator插件运行配置:
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.5
mysql
mysql-connector-java
5.1.39
org.mybatis.generator
mybatis-generator-core
1.3.5
Generate MyBatis Artifacts
package
generate
true
true
src/main/resources/mybatis-generator.xml
注意 以上xml配置中有一项
src/main/resources/mybatis-generator.xml
这个是具体你想生成什么样的代码内容以及都生成在什么地方,配置在mybatis-generator.xml这个文件中,在项目的resources目录下创建此文件,内容如下:
接着在数据库中创建theme表:
OK!MyBatis代码自动生成器配置完成了,我们使用maven运行一下吧。成功会
在model包中生成Theme.java实体类
在dao包中生成ThemeMapper.java接口
在resources/mapper目录中生成ThemeMapper.xml映射文件
以上文件生成无误的话,我们创建controller和service使用并测试一下吧。
ThemeAutoGenTestService.java接口
import com.yu.scloud.baseframe.frame.model.Theme;
public interface ThemeAutoGenTestService {
int insertSelective(Theme record);
Theme selectByPrimaryKey(Integer id);
}
ThemeAutoGenTestServiceImpl.java实现类__
import com.yu.scloud.baseframe.frame.dao.ThemeMapper;
import com.yu.scloud.baseframe.frame.model.Theme;
import com.yu.scloud.baseframe.frame.service.ThemeAutoGenTestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service(value = "themeAutoGenTestService")
public class ThemeAutoGenTestServiceImpl implements ThemeAutoGenTestService {
@Autowired
ThemeMapper dao;
@Override
public int insertSelective(Theme record) {
return dao.insertSelective(record);
}
@Override
public Theme selectByPrimaryKey(Integer id) {
return dao.selectByPrimaryKey(id);
}
}
MyBatisTestController.java控制器类
import com.github.pagehelper.PageHelper;
import com.yu.scloud.baseframe.frame.model.Theme;
import com.yu.scloud.baseframe.frame.service.ThemeAutoGenTestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
public class MyBatisTestController {
@Autowired
private ThemeAutoGenTestService themeAutoGenTestService;//测试通过自动生成器生成代码的例子
//-------通过代码自动生成器生成的数据库表对象相关类:
//Theme 实体类
//ThemeMapper接口 dao
//ThemeMapper.xml xml映射dao操作数据库
@ResponseBody
@PostMapping("/addtheme")
public int insertTheme(Theme theme)
{
return themeAutoGenTestService.insertSelective(theme);
}
@ResponseBody
@GetMapping("/gettheme")
public Theme getThemeById(int id)
{
return themeAutoGenTestService.selectByPrimaryKey(id);
}
}
启动服务,访问controller接口,dung!!!报错了,数据中包含create_date字段时报错了,应该是String无法转成Date对象的错误,这个问题本不在此篇文章的讲解中,但是遇到了简单讲一下吧。
默认SpringMVC进行covert时,参数中含有Date对象的类型时,是不会自动格式化并转换的,需要我们添加一个formatter的Bean,配置如下:
StringToDateConverter字符串转Date日期对象的转换器
_创建StringToDateConverter.java 字符串转Date日期对象的转换器
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
import org.springframework.util.StringUtils;
public class StringToDateConverter implements Converter {
private static final String dateFormat = "yyyy-MM-dd HH:mm:ss";
private static final String shortDateFormat = "yyyy-MM-dd";
@Override
public Date convert(String value) {
if(StringUtils.isEmpty(value)) {
return null;
}
value = value.trim();
try {
if(value.contains("-")) {
SimpleDateFormat formatter;
if(value.contains(":")) {
formatter = new SimpleDateFormat(dateFormat);
}else {
formatter = new SimpleDateFormat(shortDateFormat);
}
Date dtDate = formatter.parse(value);
return dtDate;
}else if(value.matches("^\\d+$")) {
Long lDate = new Long(value);
return new Date(lDate);
}
} catch (Exception e) {
throw new RuntimeException(String.format("parser %s to Date fail", value));
}
throw new RuntimeException(String.format("parser %s to Date fail", value));
}
}
创建全局Configuration配置 ,WebConfigBeans.java
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
@Configuration
public class WebConfigBeans {
@Autowired
private RequestMappingHandlerAdapter handlerAdapter;
/**
* 增加字符串转日期的功能
*/
@PostConstruct
public void initEditableAvlidation() {
ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer)handlerAdapter.getWebBindingInitializer();
if(initializer.getConversionService()!=null) {
GenericConversionService genericConversionService = (GenericConversionService)initializer.getConversionService();
genericConversionService.addConverter(new StringToDateConverter());
}
}
}
好。配置完转换器后,再启动服务,访问接口,可以正常读写数据库了,传递Date对象也不怕报错了。