先讲些废话###
- 距离发表上一篇SpringBoot的文章已经时隔一年多了,在那之后再也没在实际项目中用到过SpringBoot,基本上在公司里面用的都是普通的SSM,在这之间也换了几家公司,第二家真的是呆了两个月就呆不下去了(Spring+xwork+Hibernate以及 JSP+ExtJS 这么老的东西真的受不了)这些都是题外话,反正就是想说基本接触不到SpringBoot。现在回头看我一年前写的那篇文章真的是乱七八糟的23333,不知道那么多看了的人是什么想法,被误导了不少吧哈哈哈哈。
- 好了,现在开始重新写一篇简单的SpringBoot+MyBatis整合当然基于Maven来管理项目。重新开始写这篇文章的原因是我想自己做一套属于自己的账单管理系统,思来想去如果在业余时间用普通的SSM来开发比较费时,而且部署的时候也比较麻烦。何不用轻量化的SpringBoot呢,这样一来业余时间也能学到不少新知识,毕竟
大部分公司不太喜欢用这种新技术。废话那么多,下面开始正题。 - 本文尽量精简,保证能运行且功能都有。后续新增也有可能的哟
SpringBoot+MyBatis整合篇##
1. 首先是pom文件配置,引入必须的jar依赖-应该是最简化了:###
billing
com.tony.billing
1.0-SNAPSHOT
4.0.0
jar
com.tony.billing.Application
1.0-SNAPSHOT
UTF-8
1.5.3.RELEASE
1.3.0
6.0.6
web
org.springframework.boot
spring-boot-starter-web
${spring-boot.version}
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybatis-spring-boot.version}
mysql
mysql-connector-java
${mysql-connector.version}
org.springframework.boot
spring-boot-maven-plugin
1.5.1.RELEASE
repackage
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.7
UTF-8
2. 然后是application.yml配置[这个YAML配置还不是特别熟悉,只是做做基本的介绍]详细的可以再查阅其他资料
# Server settings
server:
port: 8080
address: localhost
tomcat:
uri-encoding: utf-8
# SPRING PROFILES
spring:
# HTTP ENCODING
http:
encoding.charset: UTF-8
encoding.force: true
encoding.enabled: true
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# 需要说明的是mysql-jdbc 6.0+需要添加serverTimezone=UTC不然会因为时区问题报错,这里用了CTT中国台湾时区避免产生8小时时差
url: jdbc:mysql://localhost:3306/my_2017_cost?serverTimezone=CTT&characterEncoding=utf8&useUnicode=true&useSSL=false
username: root
password: password
# MyBatis
mybatis:
#指定实体类地址
typeAliasesPackage: com.tony.billing.entity
#指定SqlMap映射文件位置
mapperLocations: classpath:/sqlMapper/*SqlMap.xml
#指定mysql-config配置文件
configLocation: classpath:/mybatis-config.xml
3. mybatis-config.xml 没啥特别的 依旧照搬老的
- 这里不再用自动代码生成了,为了方便维护还是老老实实的自己写比较好哦,当然也可以偷懒自己写一个代码生成工具这里不再详述。
4. Logback.xml配置 目前来看logback是替代log4j的存在,很多方面比后者好。
- 具体配置也是基本照搬网上的,为了尽量精简也没有对不同类别的内容进行区分。深入的内容依旧是不再详述,请自行查阅资料 【傲娇脸】
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
${LOG_PATH}/TestWeb.log.%d{yyyy-MM-dd}.log
15
30MB
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
10MB
0
500
后面自上而下说明Java代码
5. Application.java 主方法
@SpringBootApplication // 注释为SpringBoot启动类
@ComponentScan // 自动扫描
@MapperScan("com.tony.billing.dao.mapper") // 自动隐射sqlMap到com.tony.billing.dao.mapper下面,不用再写更多的代码配置mybatis很方便
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
// 这个方法还是比较实用的,就是在@ResponseBody转换json的时候不打印null的内容
@Bean
public ObjectMapper jsonMapper() {
ObjectMapper objectMapper = new ObjectMapper();
// null 不输出
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return objectMapper;
}
}
6. HelloWorldController.java 实现最基本的登陆功能
- 调用AdminService
@RestController // 这个是@ResponseBody和@Controller的合并,不用再在每个方法上面重复写@ResponseBody
public class HelloWorldController extends BaseController {
@Resource
private AdminService adminService;
@RequestMapping(value = "/user/login", method = RequestMethod.POST)
public BaseResponse login(@ModelAttribute("request") AdminLoginRequest request, HttpServletResponse httpServletResponse) {
BaseResponse response = new BaseResponse();
try {
Admin loginAdmin = new Admin();
loginAdmin.setUserName(request.getUserName());
loginAdmin.setPassword(Md5Util.md5(request.getPassword()));
Admin admin = adminService.login(loginAdmin);
if (admin != null) {
ResponseUtil.success(response);
} else {
ResponseUtil.error(response);
}
} catch (Exception e) {
logger.error("/user/login error", e);
ResponseUtil.sysError(response);
}
return response;
}
@RequestMapping(value = "/hello/world", method = RequestMethod.GET)
public BaseResponse helloWorld() {
BaseResponse response = new BaseResponse();
response.setMsg("HelloWorld");
response.setCode("1024");
return response;
}
}
7. AdminServiceImpl.java 实现最基本的登陆功能,AdminService接口内容就不贴了一眼就能看出来是啥
- 调用AdminDao
@Service
public class AdminServiceImpl implements AdminService {
@Resource
private AdminDao adminDao;
@Override
public Admin login(Admin admin) {
// 正常来说,这里应该是控制在一个事务里面的需要注意
Admin checkUser = adminDao.preLogin(admin);
if (checkUser != null) {
if (adminDao.doLogin(checkUser) > 0) {
return checkUser;
}
}
return null;
}
}
8. AdminDaoImpl内容 实现登陆校验和执行登陆操作
@Service("adminDao")
public class AdminDaoImpl implements AdminDao {
@Resource
private AdminMapper adminMapper;
@Override
public Long doLogin(Admin admin) {
return adminMapper.doLogin(admin);
}
@Override
public Admin preLogin(Admin admin) {
admin.setLastLogin(new Date());
return adminMapper.preLogin(admin);
}
}
9. AdminMapper的话就是个接口 对应到SqlMap.xml文件
@Repository // 需要加上注释,其实就是组件
public interface AdminMapper {
Long doLogin(Admin admin);
Admin preLogin(Admin admin);
}
10. AdminSqlMap.xml
id id,
tokenId tokenId,
tokenVerify tokenVerify,
code code,
userName userName,
password password,
lastLogin lastLogin,
createTime createTime,
modifyTime modifyTime,
version version,
isDeleted isDeleted
UPDATE t_admin
SET lastLogin = #{lastLogin,jdbcType=TIMESTAMP},
WHERE
userName = #{userName,jdbcType=VARCHAR}
AND password = #{password,jdbcType=VARCHAR}
AND isDeleted = 0
至此,基本的配置和代码都已经完成。
在ide中运行或者maven打包后 java -jar运行
然后可以访问http://localhost:8080/hello/world,得到喜闻乐见的内容:
{"msg":"HelloWorld","code":"1024"}
也可以用post方法试试登陆,当然需要自己在数据库建表并里面插入相应一条能登陆的数据【太过简单内容丢失了~】
致辞
- 感谢各位读者不嫌弃我一年前写的那篇乱七八糟的文章,鞠躬~
- 虽然过了一年多,我依旧还是个初学者,本文如有错误欢迎指正。
- 更多源码详见GitHub:https://github.com/TonyJiangWJ/BillingServer 尚处于开发状态!
- ...