springboot整合mybatis

目录

 

写的原因

整合过程

    导入jar包

    添加配置

    创建mapper.java文件

    创建mapper.xml文件

遇到的问题

   一、我不想用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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值