目录
MyBatis是什么
MyBatis的作用
MyBatis的优缺点
优点
缺点
MyBatis的环境搭建
pom.xml
连接数据库
修改web.xml文件
安装插件
配置文件
MyBatis的增删改查
MyBatis 是一个开源、轻量级的数据持久化框架,是 JDBC 和 Hibernate 的替代方案。MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身。
简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件。易于学习,易于使用。通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
提供映射标签,支持对象与数据库的ORM字段关系映射。
提供对象关系映射标签,支持对象关系组建维护。
提供xml标签,支持编写动态sql。
优点
- MyBatis 是免费且开源的。
- 与 JDBC 相比,减少了 50% 以上的代码量。
- MyBatis 是最简单的持久化框架,小巧并且简单易学。
- MyBatis 相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL 写在 XML 中,和程序逻辑代码分离,降低耦合度,便于同一管理和优化,提高了代码的可重用性。
- 提供 XML 标签,支持编写动态 SQL 语句。
- 提供映射标签,支持对象与数据库的 ORM 字段关系映射。
- 支持存储过程。MyBatis 以存储过程的形式封装 SQL,可以将业务逻辑保留在数据库之外,增强应用程序的可移植性、更易于部署和测试。
缺点
- 编写 SQL 语句工作量较大,对开发人员编写 SQL 语句的功底有一定要求。
- SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
首先先导入pom文件,再配置xml文件
4.0.0
com.xiaoxu
mybstis01
1.0-SNAPSHOT
war
mybstis01 Maven Webapp
http://www.example.com
1.8
1.8
junit
junit
4.12
javax.servlet
javax.servlet-api
4.0.0
provided
org.mybatis
mybatis
3.4.5
mysql
mysql-connector-java
5.1.44
org.apache.logging.log4j
log4j-core
2.9.1
org.apache.logging.log4j
log4j-api
2.9.1
org.apache.logging.log4j
log4j-web
2.9.1
mybstis01
src/main/java
**/*.xml
src/main/resources
jdbc.properties
*.xml
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
mysql
mysql-connector-java
5.1.44
true
maven-clean-plugin
3.1.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.8.0
maven-surefire-plugin
2.22.1
maven-war-plugin
3.2.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
下载要下载的四个插件
Free mybatis plugin:
有以下作用: 1.注解支持
2.XML映射文件支持
3. SQL语句智能提示
4. 代码生成器
5. 数据库连接和查询
Free MyBatis Plugin通过提供丰富的功能和工具,简化了 MyBatis开发过程中的各种操作,提高了开发效率和代码质量。
Mybatis generator:
有以下作用:1. 自动生成实体类
2. 自动生成Mapper接口(包含了常用的增删改查方法)
3. 生成XML映射文件(包含SQL语句的定义和参数映射关系)
4. 生成的代码可自定义
MyBatis Generator可以根据数据库表结构自动生成CRUD代码,减少手动编写重复代码的工作量,提高开发效率和代码质量。同时,生成的代码可根据需求进行自定义修改和扩展,以满足具体的业务需求
mybatis tools:
有以下作用:1. 代码生成(生成对应的实体类、Mapper接口和XML映射)
2. SQL语句编辑和调试
3. SQL语句执行和结果查看
4. 自动生成SQL语句
MyBatis Tools是一个集成在IDE中的插件,提供了一系列辅助开发的功能,如代码生成、SQL语句编辑和调试、SQL语句执行和结果查看等
maven helper :
有以下作用:1. 依赖架包分析
2. 快速搜索依赖
3. 优化依赖
4. 自动导入依赖
帮助开发人员更方便地管理和调试 Maven 项目。
mybatis.cfg.xml
generatorConfig.xml
最后就是生成代码
这样子,我们的坏境就搭建完成啦!!!!!!
先定义一个Book接口
package com.xiaoxu.biz;
import com.xiaoxu.mapper.BookMapper;
import com.xiaoxu.model.Book;
public interface BookBiz {
int deleteByPrimaryKey(Integer bid);
int insert(Book record);
int insertSelective(Book record);
Book selectByPrimaryKey(Integer bid);
int updateByPrimaryKeySelective(Book record);
int updateByPrimaryKey(Book record);
void setBookMapper(BookMapper mapper);
}
再写一个类实现接口
package com.xiaoxu.biz.impl;
import com.xiaoxu.biz.BookBiz;
import com.xiaoxu.mapper.BookMapper;
import com.xiaoxu.model.Book;
/**
* @author小徐
* @site www.veryedu.cn
* @company xu集团
* @create 2023-08-20 16:02
*/
public class BookBizImpl implements BookBiz {
private BookMapper bookMapper;
public BookMapper getBookMapper() {
return bookMapper;
}
public void setBookMapper(BookMapper bookMapper) {
this.bookMapper = bookMapper;
}
@Override
public int deleteByPrimaryKey(Integer bid) {
return bookMapper.deleteByPrimaryKey(bid);
}
@Override
public int insert(Book record) {
return bookMapper.insert(record);
}
@Override
public int insertSelective(Book record) {
return bookMapper.insertSelective(record);
}
@Override
public Book selectByPrimaryKey(Integer bid) {
return bookMapper.selectByPrimaryKey(bid);
}
@Override
public int updateByPrimaryKeySelective(Book record) {
return bookMapper.updateByPrimaryKeySelective(record);
}
@Override
public int updateByPrimaryKey(Book record) {
return bookMapper.updateByPrimaryKey(record);
}
}
再定义一个工厂类生成SqlSession
package com.xiaoxu.utils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* @author小徐
* @site www.veryedu.cn
* @company xu集团
* @create 2023-08-20 16:12
*/
public class SessionUtil {
private static SqlSessionFactory sessionFactory;
private static ThreadLocal threadLocal = new ThreadLocal();
static {
sessionFactory = new SqlSessionFactoryBuilder().build(SessionUtil.class.getResourceAsStream("/mybatis.cfg.xml"));
}
public static SqlSession openSession() {
SqlSession session = threadLocal.get();
if (null == session) {
session = sessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
public static void main(String[] args) {
SqlSession session = openSession();
System.out.println(session.getConnection());
session.close();
// System.out.println(session.getConnection());
}
}
最后写我们测试类
package com.xiaoxu.demo;
import com.xiaoxu.biz.BookBiz;
import com.xiaoxu.biz.impl.BookBizImpl;
import com.xiaoxu.mapper.BookMapper;
import com.xiaoxu.model.Book;
import com.xiaoxu.utils.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* @author小徐
* @site www.veryedu.cn
* @company xu集团
* @create 2023-08-20 16:16
*/
public class demo1 {
private SqlSession sqlSession;
private BookBiz bookBiz;
@Before
public void a(){
System.out.println("执行测试方法之前会执行的初始化代码块");
sqlSession = SessionUtil.openSession();
BookBiz bookBiz = new BookBizImpl();
BookMapper mapper = sqlSession.getMapper(BookMapper.class);
bookBiz.setBookMapper(mapper);
this.bookBiz = bookBiz;
}
@After
public void b(){
System.out.println("执行测试方法之后会执行");
sqlSession.commit();
}
@Test
public void Test1(){
System.out.println("测试方法");
Book book = bookBiz.selectByPrimaryKey(30);
System.out.println(book);
}
@Test
public void test2(){
bookBiz.deleteByPrimaryKey(25);
}
}
测试结果
ok,今天就到这里了!!!!!