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