目录
一、我不想用template,但是创建的项目中没有静态文件夹,我的前端文件应该放在哪
二、我想用StringUtils.isNotEmpty()方法,但是类里没有这个方法
三、我想格式化输出的时间,但是又不想为每个都写一遍格式化代码,连工具类都懒得写或者找,有什么更简单的方法么
四、mapper.xml文件中,每个都写resultMap好烦,而且有的还重复了,能不能提取到一个类中,或者有没有继承这一说
写的原因
好久没用Springboot+mybatis了,公司分配了个新的项目,公司的技术架构就是这个,所以自己从头搭建一个项目,来熟悉一下,顺便给自己做个记录遇到的问题
整合过程
导入jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- springboot整合mybatis包 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
添加配置
spring:
#配置别名
profiles: dev
datasource:
url: jdbc:mysql://XXXXXXXXX?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
username: root
password: admin
driver-class-name: com.mysql.cj.jdbc.Driver
server:
port: 8080
#mybatis相关配置
mybatis:
#设置mapper.xml路径
mapper-locations: classpath:mapper/*Mapper.xml
#设置批量别名路径
type-aliases-package: com.example.chat.entity
创建mapper.java文件
创建mapper.xml文件
可以使用文件模板来创建,右键需要左侧文件夹
选择other,选择栏拉倒最下,选择mybatis并打开mybatis Mapper.xml,复制右侧文本框中的内容
不要关闭弹窗,点击files标签,然后点击“+”创建一个新的模板,并为模板命名,将刚刚复制的文本粘贴到右侧
点击保存,就可以在右键新建中看到你所创建的模板了,注:xml文件只能在resources文件中创建
遇到的问题
一、我不想用template,但是创建的项目中没有静态文件夹,我的前端文件应该放在哪
springboot会默认去找以下文件夹下的静态文件,你只需要在resource中创建对应的文件夹就行
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
二、我想用StringUtils.isNotEmpty()方法,但是类里没有这个方法
这个方法是在常用工具包下的StringUtils中,而常用工具包需要额外的引入
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
三、我想格式化输出的时间,但是又不想为每个都写一遍格式化代码,连工具类都懒得写或者找,有什么更简单的方法么
可以使用fastJSON的注释格式化
1.引入jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.41</version>
</dependency>
2.添加配置
spring:
jackson:
#格式化公式
date-format: yyyy-MM-dd HH:mm:ss
#标识时区
time-zone: GMT+8
3.在你想格式化的字段上添加注释
@JSONField//数据库导出页面时json格式化
private Date createDate;
四、mapper.xml文件中,每个都写resultMap好烦,而且有的还重复了,能不能提取到一个类中,或者有没有继承这一说
mapper.xml中有继承的说法,也可以将所有的resultMap提取到一个mapp.xml中统一管理
resultMap中的“extends”字段就是用来继承的,需要添加父resultMap的id
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.chat.mapper.CommonMapper">
<resultMap id="baseEntityMap" type="com.example.chat.entity.BaseEntity">
<id property="id" column="id"/>
<result property="createAccount" column="create_account"/>
<result property="createDate" column="create_date"/>
<result property="updateAccount" column="update_account"/>
<result property="updateDate" column="update_date"/>
<result property="deleted" column="is_delete" javaType="boolean"/>
</resultMap>
<resultMap id="systemUserEntityMap" type="com.example.chat.entity.SystemUserEntity" extends="baseEntityMap">
<result property="username" column="username"/>
<result property="password" column="password"/>
<result property="email" column="email"/>
<result property="tel" column="tel"/>
<collection property="roleList" select="com.example.chat.mapper.SystemRoleMapper.querySystemRoleByUserId" column="id"/>
</resultMap>
</mapper>
resultMap可以提取到一个类中,来方便管理,他不需要存在Mapper.java类来对应,使用时直接根据路径调用就可以
<select id="querySystemMenusList" resultMap="com.example.chat.mapper.CommonMapper.systemMenusEntityMap">
select * from system_menus
limit ${(currentPage - 1) * pageSize},${pageSize}
</select>
五、单向一对多中间表存储时,如何不用写迭代代码又快速的插入
可以使用mybatis的<foreach>标签,
如:我想要为用户添加角色,向中间表中插入用户id和多个角色id
int insertMiddleTableData(@Param("userId")String userId,@Param("roleList") List<SystemRoleEntity> roleList);
<insert id="insertMiddleTableData">
insert into system_user_role_mapper(user_id,role_id)
value
<foreach collection="roleList" item="role">
(#{userId},#{role.id})
</foreach>
</insert>
当方法有多个参数时,最好添加@Param来为参数设置别名
六、分页查询我写的没问题啊,为什么还报错
<select id="querySystemUserList" resultMap="com.example.chat.mapper.CommonMapper.systemUserEntityMap">
select * from system_user
limit (#{currentPage} - 1) * #{pageSize},#{pageSize}
</select>
不能这么写,mysql不识别这种“ (1-1)* 10 ”的写法,limit后面必须直接跟两个数字,不能为计算公式;
而且分页mybatis不支持预编译,或者说预编译“#{}”中只能放字段,不能放计算公式,所以需要使用“${}”
<select id="querySystemUserList" resultMap="com.example.chat.mapper.CommonMapper.systemUserEntityMap">
select * from system_user
limit ${(currentPage - 1) * pageSize},${pageSize}
</select>