springboot整合mybatis

springboot工程中mybatis应用快速实践

步骤:

1、导入依赖

2、连接数据库

4、定义pojo对象SysNotice(用于在内存中封装通知信息)

5、创建Dao接口SysNoticeDao并使用@Mapper进行描述

6、在dao接口中添加insertObject(Notice notice)方法

7、定义dao接口对应的映射文件,并添加insertObject方法对应的sql映射

8、定义单元测试SysNoticeTests,并对insertObject方法进行单元测试

 

springboot工程中mybatis框架实现修改,删除,查询具体业务的逻辑

步骤:

第一步:接口中添加方法

第二步:方法或文件中定义sql映射

第三步:写单元测试,对测试结果分析

 

依赖导入

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

 

1、yml文件

#spring datasource

spring.datasource.url=jdbc:mysql:///db_notice?serverTimezone=GMT%2B8&charactterEncoding=uft8
spring.datasource.username=root
spring.datasource.password=123456

#spring mybatis
#配置sql超时
mybatis.configuration.default-statement-timeout=30
#驼峰命名规则
mybatis.configuration.map-underscore-to-camel-case=true
#映射文件路径
mybatis.mapper-locations=classpath:/mapper/*/*.xml

#配置日志
logging.level.com.cy=debug

2、pojo 实体类

sysnotice.java

package com.zy.pj.sys.pojo;

import java.util.Date;
/*sysnotice对象用于存储通知数据
* java中的对象可以简单分为两大类型
*   一类:适用于执行逻辑(控制逻辑,业务逻辑,数据持久逻辑)
*   二类:用于存储数据(pojo对象)
*
* */
public class SysNotice {
    /** 公告 ID */
    private Long id;
    /** 公告标题 */
    private String title;
    /** 公告类型(1 通知 2 公告) */
    private String type;
    /** 公告内容 */
    private String content;
    /** 公告状态(0 正常 1 关闭) */
    private String status;
    /** 创建时间 */
    private Date createdTime;
    /** 修改时间*/
    private Date modifiedTime;
    /** 创建用户 */
    private String createdUser;
    /** 修改用户*/
    private String modifiedUser;
    /*备注*/
    private String remark;
    //生成set/get/tostring方法   快捷键:alt+insert
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Date getCreatedTime() {
        return createdTime;
    }

    public void setCreatedTime(Date createdTime) {
        this.createdTime = createdTime;
    }

    public Date getModifiedTime() {
        return modifiedTime;
    }

    public void setModifiedTime(Date modifiedTime) {
        this.modifiedTime = modifiedTime;
    }

    public String getCreatedUser() {
        return createdUser;
    }

    public void setCreatedUser(String createdUser) {
        this.createdUser = createdUser;
    }

    public String getModifiedUser() {
        return modifiedUser;
    }

    public void setModifiedUser(String modifiedUser) {
        this.modifiedUser = modifiedUser;
    }

    @Override
    public String toString() {
        return "SysNotice{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", type='" + type + '\'' +
                ", content='" + content + '\'' +
                ", status='" + status + '\'' +
                ", createdTime=" + createdTime +
                ", modifiedTime=" + modifiedTime +
                ", createdUser='" + createdUser + '\'' +
                ", modifiedUser='" + modifiedUser + '\'' +
                ",rmark="+remark+'\''+
                '}';
    }
}

3、接口类 dao

sysnticedao.java

package com.zy.pj.sys.dao;

import com.zy.pj.sys.pojo.SysNotice;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

/*
* @Mapper注解是由mybatis框架定义,用于描述数据持久层接口*/
@Mapper
public interface SysNoticeDao {
    /*
    基于条件查询通告信息
    * 返回查询到的通过信息
    * 根据多个字段进行查询
    * */

    List<SysNotice> selectNotices(SysNotice notice);
    
    /*
    * 基于多个id执行记录删除操作
    * ids  :要删除的记录id,这里的语法为可变参数
    * 可变参数主要用于简化名字相同,参数类型也下昂同,但个数不同的这样的一系列方法
    * */

    int deleteById(Long... ids);


    //将内存中的notice对象,持久化到数据库中
    int insertNotice(SysNotice notice);

    /*
    * 基于id查询notice信息
    * 简单的sql映射可以直接将sql语句写到方法上面,以注解进行声明
    * */
    @Select("select * from sys_notice where id=#{id}")
    SysNotice selectByID(@Param("id") Integer id);

    /*
    * 更新语句*/
    int updateNotice(SysNotice notice);
}

4、sysnoticemapper.xml

<?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.zy.pj.sys.dao.SysNoticeDao">
   <select id="selectNotices" parameterType="com.zy.pj.sys.pojo.SysNotice" resultType="com.zy.pj.sys.pojo.SysNotice">
            select * from sys_notice
            <where>
                <if test="type !=null and type !=''">
                    type =#{type}
                </if>
                <if test="title !=null and title !=''">
                       and  title like concat("%",#{title},"%")
                </if>
                <if test="modifiedUser !=null and modifiedUser !=''">
                    and modifiedUser like concat("%",#{modifiedUser},"%")
                </if>

                order by createdTime desc
            </where>
    </select>
    
    <!--mybatis框架中在系统启动时,会对映射文件中的呢欧容进行解析,每个
        元素会封装为一个mappedStatement对象,多个这样的对象会存储到map集合
        key为元素id,值为mappedStatement对象map<String,mappedStatement>
        -->
    <!--基于id执行顺序-->
    <delete id="deleteById" parameterType="com.zy.pj.sys.pojo.SysNotice">
            delete from sys_notice where id in /*(1,2,3,4,5)*/
            /*foreach 用于迭代一个数组或者集合*/
            <foreach collection="ids" open="(" close=")" separator="," item="id">
                #{id}
            </foreach>
    </delete>
   <!-- 另外的一种删除语法:<delete id="deleteById">
        delete from sys_notice
        <where>
            <if test="ids !=null and ids.length>0">
            id in
            <foreach collection="ids" open="(" close=")" separator="," item="id">
                #{id}
            </foreach>
            </if>
            or 1=2
        </where>
    </delete>-->
    <insert id="insertNotice" parameterType="com.zy.pj.sys.pojo.SysNotice">
        insert into sys_notice
            (title,type,content,status,remark,
            createdTime,modifiedTime,createdUser,modifiedUser)
        values
            (#{title},#{type},#{content},#{status},#{remark},
            now(),now(),#{createdUser},#{modifiedUser})
    </insert>
    <!--更新sql语句-->
    <update id="updateNotice" parameterType="com.zy.pj.sys.pojo.SysNotice">
        update sys_notice
        set title=#{title},type=#{type},content=#{content},
            status=#{status},remark=#{remark},modifiedTime=now(),
            modifiedUser=#{modifiedUser}
        where id=#{id}
    </update>

</mapper>

5、测试

package com.zy.pj.sys.dao;

import com.zy.pj.sys.pojo.SysNotice;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class SysNoticeDaoTests {
    @Autowired
    private SysNoticeDao sysNoticeDao;
    
     /*
    * 根据多个字段进行查询*/
    @Test
    void testSelectNotices(){
        SysNotice notice = new SysNotice();
        notice.setType("1");
        notice.setTitle("通知");
        notice.setModifiedUser("tony");
        List<SysNotice> list = sysNoticeDao.selectNotices(notice);
        for (SysNotice sysNotice : list) {
            System.out.println(sysNotice);
        }

    }

    @Test
    void testDelteById(){
     /*   int rows=sysNoticeDao.deleteById(4L); 删除一条语句*/
        int rows = sysNoticeDao.deleteById(5L, 6L);   //删除多条语句
        System.out.println("rows="+rows);
    }

    /*更新*/
    @Test
    void testupdateNotice(){
        //基于id查询通知对象
        // 先查询具体内容要更新的内容
        SysNotice notice = sysNoticeDao.selectByID(1);
        //更新字段名里面的内容
        notice.setType("2");
        notice.setContent("2021/4/18 星期天");
        notice.setModifiedUser("zy");
        //将更新一行的内容持久化到数据库
        sysNoticeDao.updateNotice(notice);
    }
    /*根据id查询*/
    @Test
    void testSelectById(){
        SysNotice notice = sysNoticeDao.selectByID(1);
        System.out.println(notice);
    }
    /*插入数据*/
    @Test
    void testInsertNotice(){
        //创建sysnotice对象
        SysNotice notice = new SysNotice();
        notice.setTitle("今天星期六");
        notice.setContent("2021/4/17");
        notice.setStatus("0");
        notice.setType("1");
        notice.setCreatedUser("zy");
        notice.setModifiedUser("zy");
        //将Sysnotice对象持久化到数据库
        sysNoticeDao.insertNotice(notice); //此方法的实现内部会通过sqlsession向表中提交数据
    }
}

 更多的代码详情请点击:https://gitee.com/zhaoyuanq994/code

上一篇:nginx 代理websocket


下一篇:实验记录 | 6/1