目录
1.1 什么是MyBatis?
2.1 MyBatis环境搭建步骤
3.1 基于ssm逆向工程的使用
MyBatis 是一款持久层框架,支持自定义 SQL、存储过程以及高级映射。
MyBatis 省略了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
简单直白的来说的话就是:
是一款ORM框架,即对象映射关系框架;
是一款关于数据库层面的框架;
2.1 MyBatis环境搭建步骤
2.1.1 创建maven工程
2.1.2导入相关pom依赖
这里放上一些我们需要导入的pom依赖:
建立一个用于我们数据库连接信息的配置文件:jdbc.properties
- jdbc.driver=com.mysql.jdbc.Driver
- jdbc.url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF-8
- jdbc.username=用户名
- jdbc.password=密码
2.1.3Mybatis相关插件安装
我们先把这四个插件下载好:
安装以下插件
Free mybatis plugin
Mybatis generator
mybatis tools
maven helper
2.1.4Mybatis.cfg.xml配置
导入框架的配置文件:mybatis.cfg.xml
- configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
- <properties resource="jdbc.properties"/>
-
- <settings>
- <setting name="logImpl" value="LOG4J2"/>
- settings>
-
-
- <typeAliases>
-
- typeAliases>
-
-
-
- <environments default="development">
- <environment id="development">
-
- <transactionManager type="jdbc"/>
-
-
-
-
-
- <dataSource type="POOLED">
- <property name="driver"
- value="${jdbc.driver}"/>
- <property name="url"
- value="${jdbc.url}"/>
- <property name="username" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
- dataSource>
- environment>
- environments>
-
- <mappers>
-
- mappers>
- configuration>
使用这个插件我们就可以自动生成增删改查的代码;
我们使用这个要使用MyBatis generator这个插件,需要做到的一些步骤:
- 安装Mybatis generator插件
- 配置generatorConfig.xml
- 配置maven运行generator命令
- 在pom中处理generatorConfig.xml不能编译问题
第一步的插件就放在我们上面要安装的那四个插件之中;
第二步:建立generatorConfig.xml配置文件:
- generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
- "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
- <generatorConfiguration>
- <properties resource="jdbc.properties"/>
-
- <classPathEntry location="D:\\initPath\\mvn_repository\\mysql\\mysql-connector-java\
第三步:配置maven运行这个插件的命令:
1、idea的工具栏 ---> 点击 Add Configuration...
2、点击添加命令 ---> 选择Maven
3、命令取 个名字 ---> 填入这一串:
mybatis-generator:generate -e
---> 选择要生成代码的项目
4、右键选择Run Maven ---> 选择我们刚刚配置好的命令
代码生成后:
然后我们看看生成的代码:
我们已经完成了自动生成增删改查的代码,但是现在我们还并不知道能不能成功使用,所以我们就通过几个增删改查的案例来测试一下!
4.1.2 sqlSession的作用:
① 可以拿到Mapper对象(二级缓存);② 作为缓存使用(一级缓存)也是默认开启的缓存;
③ 处于性能的考虑,会采用二级缓存,二级缓存需要手动开启。
生成Session的一个工具类:
SessionUtile.java:
- package com.leaf.util;
-
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
-
- /**
- * sqlSession
- * @author Leaf
- * @site 2977819715
- * @company 玉渊工作室
- * @create 2022-08-11 1:00
- */
- 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:
- package com.leaf.biz;
-
- import com.leaf.model.Book;
-
- /**
- * @author Leaf
- * @site 2977819715
- * @company 玉渊工作室
- * @create 2022-08-11 1:09
- */
- public interface BookBiz {
-
- //删除
- int deleteByPrimaryKey(Integer bid);
-
- //查询
- Book selectByPrimaryKey(Integer bid);
-
- }
然后我们实现这个接口:BookBizImpl ,快捷建立方法:
鼠标放在类名上面 ---> Alt + Enter ---> 选择implement interface
然后自己建立要存放的目录结构 ---> 点击OK
然后再次点击OK:
就自动帮我们创建实现方法啦:
一份快捷小技巧:
//Alt+Enter 快速构建实现类,填充代码的前半部分 Ctrl+1 //Alt+Insert 快速提供set/get/toString/构造方法
我们调用自动生成的代码,编写好的实现类代码:BookBizImpl
- package com.leaf.biz.impl;
-
- import com.leaf.biz.BookBiz;
- import com.leaf.mapper.BookMapper;
- import com.leaf.model.Book;
-
- /**
- * @author Leaf
- * @site 2977819715
- * @company 玉渊工作室
- * @create 2022-08-11 2:21
- */
- public class BookBizImpl implements BookBiz {
-
- private BookMapper bookMapper;
-
- //Alt+Enter 快速构建实现类,填充代码的前半部分 Ctrl+1
- //Alt+Insert 快速提供set/get/toString/构造方法
-
- 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 + Enter ---> 选择Create Test
然后我们把一些没有用的、报红的包都删掉,最后写好的测试类:
- package com.leaf.biz.impl;
-
- import com.leaf.biz.BookBiz;
- import com.leaf.mapper.BookMapper;
- import com.leaf.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 Leaf
- * @site 2977819715
- * @company 玉渊工作室
- * @create 2022-08-11 2:29
- */
- public class BookBizImplTest {
-
- private BookBiz 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.selectByPrimaryKey(45));
- }
- }
然后我们去到我们之前建立的MyBatis的配置文件:mybatis.cfg.xml 中,
把其中的关于 配置我们写的实现类 的那一行代码 注释打开:
由于项目开发中,一般会集成日志框架,可以帮助程序猿在开发的过程中快熟排查问题,所以我们还需要建立一个日志框架的配置文件:log4j2.xml
-
- <Configuration status="WARN" monitorInterval="30">
- <Properties>
-
- <Property name="LOG_HOME">/root/workspace/lucenedemo/logsProperty>
- <property name="ERROR_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/errorproperty>
- <property name="WARN_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/warnproperty>
- <property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%nproperty>
- Properties>
-
- <Appenders>
-
- <Console name="Console" target="SYSTEM_OUT">
-
- <ThresholdFilter level="trace" onMatch="ACCEPT"
- onMismatch="DENY" />
-
-
- <PatternLayout pattern="${PATTERN}" />
- Console>
-
-
-
- <File name="log" fileName="logs/test.log" append="false">
- <PatternLayout
- pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
- File>
-
- <RollingFile name="RollingFileInfo" fileName="${LOG_HOME}/info.log"
- filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
-
- <ThresholdFilter level="info" onMatch="ACCEPT"
- onMismatch="DENY" />
- <PatternLayout
- pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
- <Policies>
-
-
-
- <TimeBasedTriggeringPolicy interval="1"
- modulate="true" />
-
-
- Policies>
- RollingFile>
-
- <RollingFile name="RollingFileWarn" fileName="${WARN_LOG_FILE_NAME}/warn.log"
- filePattern="${WARN_LOG_FILE_NAME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
- <ThresholdFilter level="warn" onMatch="ACCEPT"
- onMismatch="DENY" />
- <PatternLayout
- pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
- <Policies>
- <TimeBasedTriggeringPolicy />
- <SizeBasedTriggeringPolicy size="2 kB" />
- Policies>
-
- <DefaultRolloverStrategy max="20" />
- RollingFile>
-
- <RollingFile name="RollingFileError" fileName="${ERROR_LOG_FILE_NAME}/error.log"
- filePattern="${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.log">
- <ThresholdFilter level="error" onMatch="ACCEPT"
- onMismatch="DENY" />
- <PatternLayout
- pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
- <Policies>
-
- <TimeBasedTriggeringPolicy interval="1"
- modulate="true" />
-
- Policies>
- RollingFile>
-
- Appenders>
-
-
- <Loggers>
-
- <logger name="org.springframework" level="INFO">logger>
- <logger name="org.mybatis" level="INFO">logger>
-
-
- <logger name="org.springframework" level="ERROR" />
- <logger name="org.hibernate" level="ERROR" />
- <logger name="org.apache.struts2" level="ERROR" />
- <logger name="com.opensymphony.xwork2" level="ERROR" />
- <logger name="org.jboss" level="ERROR" />
-
-
-
- <root level="all">
- <appender-ref ref="Console" />
- <appender-ref ref="RollingFileInfo" />
- <appender-ref ref="RollingFileWarn" />
- <appender-ref ref="RollingFileError" />
- root>
-
- Loggers>
-
- Configuration>
然后我们来测试一下查询(无事务):
选择Run...
运行结果:
然后我们再测试一下删除方法:
方法是执行成功了,然后我们又去数据库看看:
我们呢发现数据库中还是没有删除!
所以我们联想到增删改都是有事务的,于是我们添加两行代码:
- @After
- public void tearDown() throws Exception {
- System.out.println("方法测试结束...");
- //在结束方法里面添加提交事务的代码
- sqlSession.commit();
- sqlSession.close();
- }
然后再次测试:
这一次数据库也删除成功啦!
OK,以上就是Leaf今天带来的MyBatis环境搭建以及一些插件的使用,我们下期再见!!!