文章目录
什么是 MyBatis?
一、搭建mybatis框架环境
1️⃣导入相关pom.xml依赖
2️⃣mybatis相关插件安装
3️⃣mybatis.cfg.xml配置
二、基于ssm逆向工程的使用
1️⃣安装mybatis generator插件
2️⃣配置generatorConfig.xml
3️⃣配置maven运行generator命令
Mybatis generator插件使用步骤小结
4️⃣在pom中处理generatorConfig.xml不能编译问题
三、Mybatis增删改查案例
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录
一款ORM框架,即对象映射关系框架;是一款关于数据库层面的框架
搭建mybatis框架环境之前,我们先创建一个maven项目
1.8
1.8
junit
junit
4.12
test
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
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
连接数据库
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/sys?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
Free mybatis plugin
Mybatis generator
mybatis tools
maven helper
这边搜索了一个博主,详细讲解了idea插件的作用,大家可以看看
Intellij Idea Mybatis 插件(plugin和tools插件)_yangshijin1988的博客-CSDN博客_idea mapper 插件
导入web.xml
注意改动,找到自己的本地仓库地址并拷贝替换喔 ❗❗
小结:
1.修改jar包驱动位置
2.修改实体类生成位置
3.修改dao层生成位置
4.修改配置文件生成位置
5.要生成哪些或那个表的增删改查 比如t_mvc_Book t_oa_permission
右键Run Maven-->这些都是Maven自带的命令,接下来我们自己加一个命令
点击加号-->找到Maven
添加命令行 mybatis-generator:generate -e
看这边,代码就下载生成好了
给大家看一个我在这个过程中所犯的一个小错误
Mybatis generator插件使用步骤小结:
1.添加配置文件
1.2.修改5.1.44的jar的路径
1.3.修改实体类生成地址
1.4.修改SQL对应的配置文件的生成地址
1.5.修改dao层的生成地址
1.6.指定需要生成增删改查的表
2.配置Maven的逆向生成代码的命令
commond line
3.在pom文件中使用配置好的命令
SQLSession的作用: 1.可以mapper对象 2.作用缓存使用--一级缓存,默认会开启
3.出于性能的考虑,会采用二级缓存,二级缓存需要手动开启
package com.xiaokun.util;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* @author 小坤
* @create 2022-08-10-18:39
*/
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());
}
}
测试逆向生成的代码是否正确
分析:有事务:增加删除修改
无事务:查询
结论:测试查询删除没问题那么代码就没问题 创建一个BookBiz测试类
在其中写上我们需要测试方法
int deleteByPrimaryKey(Integer bid);
Book selectByPrimaryKey(Integer bid);
实现接口实现类
package com.xiaokun.biz.impl;
import com.xiaokun.biz.BookBiz;
import com.xiaokun.mapper.BookMapper;
import com.xiaokun.model.Book;
/**
* @author 小坤
* @create 2022-08-10-19:14
*/
public class BookBizImpl implements BookBiz {
//dao层
private BookMapper bookMapper;
//alt+insert快速提供set/get/toString/构造方法
//alt+enter快速构建实现类,填充代码的前半部分 Ctrl+1
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 Book selectByPrimaryKey(Integer bid) {
return bookMapper.selectByPrimaryKey(bid);
}
}
创建测试类 alt+回车键
这个测试类刚创建,其中的代码会报错
看个测试类小错误
在项目开发中,一般会集成日志框架,日志框架的作用是帮助程序员在开发的过程中快速排查问题,定位问题
先创建一个日志配置文件⬇⬇⬇
/root/workspace/lucenedemo/logs
/root/workspace/lucenedemo/logs/error
/root/workspace/lucenedemo/logs/warn
%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%n
查询方法
导入日志配置文件后的查询结果
测试类BookBizImplTest
package com.xiaokun.biz.impl;
import com.xiaokun.biz.BookBiz;
import com.xiaokun.mapper.BookMapper;
import com.xiaokun.model.Book;
import com.xiaokun.util.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* @author 小坤
* @create 2022-08-10-19:46
*/
public class BookBizImplTest {
private BookBizImpl bookBiz;
private SqlSession sqlSession;
@Before
public void setUp() throws Exception {
System.out.println( "初始化方法...");
BookBizImpl bookBiz=new BookBizImpl();
//从工具类中拿session
sqlSession = SessionUtil.openSession();
//从session对象中获取mapper对象
BookMapper mapper = sqlSession.getMapper(BookMapper.class);
bookBiz.setBookMapper(mapper);
this.bookBiz=bookBiz;
}
@After
public void tearDown() throws Exception {
System.out.println("方法测试结束...");
sqlSession.commit();//提交会话
sqlSession.close();//关闭
}
@Test
public void deleteByPrimaryKey() {
bookBiz.deleteByPrimaryKey(44);
}
@Test
public void selectByPrimaryKey() {
System.out.println("测试的业务方法...");
/*System.out.println(bookBiz.getBookMapper());*/
System.out.println(bookBiz.selectByPrimaryKey(44));
}
}
小编有话说:近期有很多小伙伴在看这篇文章,小编大致检查一遍,发现有很多部分还需改进,所以做了一点代码上的修改。欢迎各位在评论区留言!