03-SpringBoot工程中MyBatis应用实践(1)

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class MyBatisApplication {//Application.class

public static void main(String[] args) {//Main Thread

SpringApplication.run(MyBatisApplication .class, args);

}

}

环境测试代码实现


在src/test/java目录中添加测试类,对mybatis框架整合进行基本测试,代码如下:

package com.cy.pj.sys.dao;

@SpringBootTest

public class MyBatisTests {

@Autowired

private SqlSession sqlSession;

@Test

public void testGetConnection() {

Connection conn=sqlSession.getConnection();

System.out.println(“connection=”+conn);

}

}

在SpringBoot脚手架工程中,Spring框架会基于MyBatis框架底层配置,创建SqlSessionFactory对象,然后再通过此工厂对象创建SqlSession,最后基于Springku框架为测试类注入SqlSession对象,接下来,我们可以通过SqlSession对象实现与数据库的会话了。

必看视频!获取2024年最新Java开发全套学习资料 备注Java

如图所示:

在这里插入图片描述

公告数据层MyBatis实践

========================================================================

业务描述


基于SpringBoot脚手架工程对MyBatis框架的整合,实现对通告数据的操作。

Pojo类设计


创建SysNotice类,借助此类对象封装公告(通知)数据。

package com.cy.pj.sys.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 String remark;

/** 创建时间 */

private Date createdTime;

/** 修改时间*/

private Date modifiedTime;

/** 创建用户 */

private String createdUser;

/** 修改用户*/

private String modifiedUser;

//自己添加set/get/toString方法

}

Dao接口及方法


第一步:定义通告业务数据层接口及业务方法。借助此类型的对象基于MyBatis技术实现与数据库的交互。

package com.cy.pj.notice.dao;

@Mapper

public interface SysNoticeDao {

/**

  • 基于条件查询公告信息

  • @param notice 用于封装查询参数

  • @return 基于查询条件查询到结果

*/

List selectNotices(SysNotice notice);

/**

  • 基于id删除公告信息

  • @param id

  • @return 删除了几行

  • 说明:在jdk8之前,对于接口方法,假如参数有多个或者参数是数组,是不可以

  • 直接在sql映射文件中使用参数名的,需要通过@Param这个注解定义参数名,然后

  • 在sql映射语句中使用@Param注解中的名字获取参数数据。对于数组而言在sql映射

  • 中可以直接使用array进行接收也可以。

*/

int deleteById(@Param(“ids”) Long… id);//array

/**

  • 持久化notice对象数据

  • @param notice (封装了要写入的数据)

  • @return 返回写入的行数。

*/

int insertNotice(SysNotice notice);

/**

  • 基于id查询notice对象

  • @param id 公告唯一标识id

  • @return 基于id查询到结果

  • 建议:简单sql映射语句可以直接写到接口方法上,复杂sql还是推荐写到xml映射文件

*/

@Select(“select * from sys_notices where id=#{id}”)

SysNotice selectById(Long id);

/**

  • 持久化notice对象数据

  • @param notice (封装了要更新的数据)

  • @return 返回更新的行数。

*/

int updateNotice(SysNotice notice);

}

其中:@Mapper是由MyBatis框架中定义的一个描述数据层接口的的注解(所有的注解只起到一个描述性的作用),用于告诉Spring框架此接口的实现由mybatis创建,并将其实现类对象存储到spring容器。当系统启动时,会对启动类所在包以及子包中的类进行扫描,假如发现接口上有@Mapper注解(mybatis提供),系统底层会基于接口创建其实现类(借助反射包中Proxy类进行创建),在实现类的内部,底层会又基于sqlsession对象实现数据访问和操作。

第二步:创建SysNoticeDao接口对应的SQL映射文件,名字为SysNoticeMapper.xml,存储在resources/mapper/sys目录下,同时定义xml文件头以及根元素,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>

第三步:在映射文件中添加insertNotice方法对应的Sql映射,关键代码如下:

insert into sys_notices

(title,type,content,status,remark,

createdTime,modifiedTime,createdUser,modifiedUser)

values

(#{title},#{type},#{content},#{status},#{remark},

now(),now(),#{createdUser},#{modifiedUser})

第四步:在映射文件中定义更新公告对应的SQL映射,关键代码如下:

update sys_notices

set title=#{title},

content=#{content},

type=#{type},

status=#{status},

remark=#{remark},

modifiedTime=now(),

modifiedUser=#{modifiedUser}

where id=#{id}

第五步:在映射文件中添加基于条件的SQL查询映射,关键代码如下:

<select id=“selectNotices”

parameterType=“com.cy.pj.sys.pojo.SysNotice”

resultType=“com.cy.pj.sys.pojo.SysNotice”>

select *

from sys_notices

type=#{type}

and title like concat(“%”,#{title},“%”)

and modifiedUser like concat(“%”,#{modifiedUser},“%”)

order by createdTime desc

第六步:在映射文件中定义删除操作对应的SQL映射,关键代码如下:

delete from sys_notices

id in

#{id}

or 1=2

单元测试实现及分析


第一步:在src/java/test目录下定义测试类,对NoticeDao对象进行应用测试。

package com.cy.pj.sys.dao;

@SpringBootTest

public class SysNoticeDaoTests {

@Autowired

private SysNoticeDao sysNoticeDao;

….

}

第二步:在单元测试类中添加insert操作的单元测试方法,代码如下:

@Test

void testInsertNotice(){

//创建SysNotice对象,通过此对象封装要写入到数据库的数据

SysNotice notice=new SysNotice();

notice.setTitle(“CGB2011结课时间”);

notice.setContent(“2021/3/20正式结课”);

notice.setStatus(“0”);

notice.setType(“1”);

notice.setCreatedUser(“tony”);

notice.setModifiedUser(“tony”);

//将SysNotice对象持久化到数据库

sysNoticeDao.insertNotice(notice);

//此方法的实现内部会通过SQLSession向表中写数据。

}

第三步:定义基于id进行查询的单元测试方法,代码如下:

@Test

void testSelectById(){

SysNotice notice=sysNoticeDao.selectById(1L);

System.out.println(notice);

}

第四步:定义基于id执行修改的单元测试方法,代码如下:

@Test

void testUpdateNotice(){

//基于id查询通知对象

SysNotice notice=sysNoticeDao.selectById(1L);

notice.setType(“2”);

notice.setContent(“2021/07/09 春节假期”);

notice.setModifiedUser(“json”);

//将更新以后的内容持久化到数据库

sysNoticeDao.updateNotice(notice);

}

第五步:定义单元测试方法,代码如下:

@Test

void testDeleteById(){

int rows=

sysNoticeDao.deleteById(1,3,4);

System.out.println(“rows=”+rows);

}

第六步:定义基于条件查询通过信息的单元测试方法,代码如下:

@Test

void testSelectNotices(){

SysNotice notice=new SysNotice();

notice.setType(“1”);

notice.setTitle(“开学”);

notice.setModifiedUser(“tony”);

List list=sysNoticeDao.selectNotices(notice);

for(SysNotice n:list){

System.out.println(n);

}

}

总结(Summary)

=====================================================================

重难点分析


  • MyBatis框架核心优势(简单、灵活、功能强大)

  • MyBatis框架应用架构及核心API(SqlSessionFactory,SqlSession,…)

  • MyBatis框架在SpringBoot工程中的整合(参考官网)

  • MyBatis框架与数据库会话的入口及会话过程

  • MyBatis框架中的动态SQL应用

FAQ分析


  • MyBatis是什么?(持久层框架,半成品-只解决了数据的持久化问题)

  • 为什么选择MyBatis?(开源,简单,功能强大,灵活,稳定,…)

  • MyBatis应用场景?(互联网软件应用都倾向于使用mybatis做数据持久化)

  • MyBatis框架实现与数据库交互的入口对象?SqlSession

  • SqlSession对象是如何创建的?SqlSessionFactory

  • 你了解哪些具体的SqlSession对象呢?(DefaultSqlSession,SqlSessionTemplate)

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料


灵活、功能强大)

  • MyBatis框架应用架构及核心API(SqlSessionFactory,SqlSession,…)

  • MyBatis框架在SpringBoot工程中的整合(参考官网)

  • MyBatis框架与数据库会话的入口及会话过程

  • MyBatis框架中的动态SQL应用

FAQ分析


  • MyBatis是什么?(持久层框架,半成品-只解决了数据的持久化问题)

  • 为什么选择MyBatis?(开源,简单,功能强大,灵活,稳定,…)

  • MyBatis应用场景?(互联网软件应用都倾向于使用mybatis做数据持久化)

  • MyBatis框架实现与数据库交互的入口对象?SqlSession

  • SqlSession对象是如何创建的?SqlSessionFactory

  • 你了解哪些具体的SqlSession对象呢?(DefaultSqlSession,SqlSessionTemplate)

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料

[外链图片转存中…(img-7WeUOAlA-1716376914487)]
[外链图片转存中…(img-jsr7JqRE-1716376914488)]

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值