1.mybatis持久化实现
http://mybatis.org/mybatis-3/
MyBatis框架
1、是什么?(一个用于简化JDBC操作的持久层框架)
2、应用的优势?(简单、开源、稳定、功能强大、灵活的sql定制、参数映射、结果映射)
3、SpringBoot工程中的应用?
Mybatis 是一个优秀的持久层框架,底层基于 JDBC 实现与数据库的交互。并在 JDBC操作的基础上做了封装和优化,它借助灵活的 SQL 定制,参数及结果集的映射方式,更好的适应了当前互联网技术的发展。Mybatis 框架的简单应用架构,如图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210322184752661.png
在当今的互联网应用中项目,mybatis 框架通常会由 spring 框架进行资源整合,作为数据层技术实现数据交互操作。
–
4、SpringBoot工程中mybatis应用快速实践(操作sys_notice表中数据)
1)第一步:定义POJO对象SysNotice(用于在内存中封装通知信息)
2)第二步:创建Dao接口SysNoticeDao并使用@Mapper进行描述
3)第三步:在Dao接口中添加insertObject(Notice noyice)方法
4)第四步:定义Dao接口对应的映射文件,并添加insert()对应sql的映射文件
5)第五步:定义单元测试SysNoticeTests,并对insertObjcet方法进行分析
1.1添加依赖
第一步:添加 mybatis 启动依赖。
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.3
我们添加了 mybatis 依赖以后,spring 框架启动时会对 mybatis 进行自动配置。例如 SqlSessionFactory 工厂对象的创建。
第二步:Mybatis 简易配置实现。
假如需要对 mybatis 框架进行简易配置,可以打开 application.properties 文件,在此文件中进行基本配置(可选,暂时可以不配置),例如:
配置sql超时
mybatis.configuration.default-statement-timeout=30
驼峰命名规则
mybatis.configuration.map-underscore-to-camel-case=true
映射文件路径
mybatis.mapper-locations=classpath:/mapper//.xml
配置 mybatis 中的 sql 日志的输出:(com.cy 为我们写的项目的根包)
logging.level.com.cy=DEBUG
1.2测试实现代码
在测试类实现代码如下:
package com.cy.pj.sys.dao;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.sql.Connection;
@SpringBootTest
public class MyBatisTests {
//SqlSession是mybatis框架中实现与数据库进行会话的入口对象
@Autowired
private SqlSession sqlSession;
@Test
void testGetConnection(){
Connection conn=sqlSession.getConnection();
System.out.println("conn="+conn);
}
}
结果如下:
conn=HikariProxyConnection@1790430792 wrapping com.zaxxer.hikari.pool.ProxyConnection.ClosedConnection
在 SpringBoot 脚手架工程中,Spring 框架会基于 MyBatis 框架底层配置,创建SqlSessionFactory 对象,然后再通过此工厂对象创建 SqlSession,最后基于 Springku框架为测试类注入 SqlSession 对象,接下来,我们可以通过 SqlSession 对象实现与数据库的会话了。
1.3通告业务设计及实现
1.3.1业务描述:
基于 SpringBoot 脚手架工程对 MyBatis 框架的整合,实现对通告数据的操作。
1.3.2 pojo类设计
package com.cy.pj.sys.pojo;
import java.util.Date;
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
}
1.3.3 Dao 接口及方法
第一步:定义通告业务数据层接口及业务方法。
package com.cy.pj.sys.dao;
import com.cy.pj.sys.pojo.SysNotice;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface SysNoticeDao {
List<SysNotice> selectNotices(SysNotice notice);
int deleteById(Long... id);
@Select("select * from sys_notice where id=#{id}")
SysNotice selectById(Integer id);
int insertNotice(SysNotice notice);
int updateNotice(SysNotice notice);
}
其中:@Mapper 是由 MyBatis 框架中定义的一个描述数据层接口的的注解(所有的注解只起到一个描述性的作用),用于告诉 Spring 框架此接口的实现由 mybatis 创建,并将其实现类对象存储到 spring 容器。
第二步:创建 NoticeDao 接口对应的 SQL 映射文件,名字为 SysNoticeMapper.xml,
存储在 resources/mapper/sys 目录下,同时定义 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.cy.pj.sys.dao.NoticeDao">
</mapper>
第三步:在映射文件中添加 insertNotice 方法对应的 Sql 映射,关键代码如下:
<insert id="insertNotice">
insert into sys_notice
(title,type,content,status,remark,
createdTime,modifiedTime,createdUser,modifiedUser)
values
(#{title},#{type},#{content},#{status},#{remark},
now(),now(),#{createdUser},#{modifiedUser})
</insert>
1.3.4单元测试实现及分析
在 src/java/test 目录下定义测试类,对 NoticeDao 对象进行应用测试
package com.cy.pj.sys.dao;
import com.cy.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 testInserNotice(){
SysNotice notice=new SysNotice();
notice.setTitle("cgb2011");
notice.setContent("2021/3/22测试");
notice.setStatus("0");
notice.setType("1");
notice.setCreatedUser("tony");
notice.setModifiedUser("tony");
sysNoticeDao.insertNotice(notice);
}
}
数据库内容如下:
这里只写了添加一种方法,还未加上其他的修改删除、更新方法;