MyBatis是一个开源的Java持久化框架,它可以帮助开发人员简化数据库访问的过程。它提供了一种将SQL语句与Java代码进行映射的方式,使得开发人员可以通过简单的配置文件来定义SQL语句,而无需编写繁琐的JDBC代码。MyBatis支持多种数据库,包括MySQL、Oracle、SQL Server等。它还提供了一些高级特性,如缓存机制、动态SQL、延迟加载等,以提高应用程序的性能和灵活性。
MyBatis的主要作用是简化Java应用程序与数据库之间的交互过程。它提供了一种将SQL语句与Java代码进行映射的方式,使得开发人员可以通过简单的配置文件来定义SQL语句,而无需编写繁琐的JDBC代码。通过使用MyBatis,开发人员可以更加方便地进行数据库操作,包括插入、更新、删除和查询数据等。此外,MyBatis还提供了一些高级特性,如缓存机制、动态SQL、延迟加载等,以提高应用程序的性能和灵活性。总的来说,MyBatis可以帮助开发人员提高开发效率,减少代码量,并且提供了灵活性和可维护性。
MyBatis有以下几个优点:
简化数据库访问:MyBatis提供了一种将SQL语句与Java代码进行映射的方式,使得开发人员可以通过简单的配置文件来定义SQL语句,而无需编写繁琐的JDBC代码。这样可以减少开发人员的工作量,提高开发效率。
灵活性:MyBatis支持动态SQL,可以根据不同的条件生成不同的SQL语句,从而实现灵活的数据库操作。开发人员可以根据具体需求来动态构建SQL语句,而不需要预先定义所有可能的SQL语句。
易于维护:MyBatis使用简单的XML或注解配置来定义SQL语句,这使得代码更加清晰可读,并且易于维护。开发人员可以通过修改配置文件来修改SQL语句,而不需要修改Java代码。
性能优化:MyBatis提供了缓存机制和延迟加载等高级特性,可以提高应用程序的性能。缓存机制可以减少数据库访问次数,延迟加载可以减少不必要的数据加载,从而提高系统的响应速度。
然而,MyBatis也有一些缺点:
学习曲线较陡:相比于其他ORM框架,MyBatis的学习曲线可能较陡峭。开发人员需要了解SQL语句和XML或注解配置的使用,以及MyBatis的一些高级特性。
配置复杂:MyBatis的配置文件相对较复杂,需要开发人员熟悉其配置规则和语法。配置错误可能导致应用程序无法正常运行。
需要手动编写SQL语句:相比于全自动的ORM框架,MyBatis需要开发人员手动编写SQL语句。这对于一些简单的数据库操作可能会增加一些开发工作量。
综上所述,MyBatis在简化数据库访问、提供灵活性和易于维护方面具有优势,但在学习曲线较陡和配置复杂等方面存在一些缺点。开发人员在选择使用MyBatis时需要权衡其优缺点,并根据具体需求做出决策。
创建一个maven项目,名为mybatis01,如下:
代码如下:
4.0.0
org.example
mybatis01
1.0-SNAPSHOT
war
mybatis01 Maven Webapp
http://www.example.com
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
mybatis01
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
jdbc.properties配置文件:用于输入数据库的用户密码(注意:该配置文件的首字母不能大写)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://47.100.191.44:3308/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8
jdbc.username=test01
jdbc.password=test01
其中localhost:3306是连接名称,mybatis_ssm是里面的数据库,username,password就是
连接的账号及密码。
找到maven项目中webapp下WEB-INF的web.xml配置JSP文件修改为:3.1
代码如下:
Archetype Created Web Application
下载这些插件前都需要先选中File,之后再点击Settings,进入到以下界面:
在输入框里面输入关键字即可,找到MyBatisX后点击install进行插件下载,如图:
输入关键字,找到Mybatis generator点击install进行插件下载,如图:
输入关键字,找到mybatis tools点击install进行插件下载,如图:
输入关键字,找到maven helper点击install进行插件下载,如图:
这个插件的作用是查看项目里面引用的所有引用文件,由引用冲突还可以进行解决.
下载安装这些插件后,需要idea重启才能进行使用
在resources文件中创建mybatis.cfg.xml配置文件 ,如下:
在resources文件中创建generatorConfig.xml配置文件,如下:
注意:
1 、
location的目录
这里的jar包目录是你本地下载maven引用文件的地址
在里面查找mysql-connector-java-5.1.44.jar的文件
2、
targetPackage中的字符串
这里要将指定生成的model在该项目中的指定包名,如果没有该包会自动创建
3、
targetPackage的字符串
这里是你想将要生成的Sql映射文件放到哪个包下,如果没有该包会自动创建
4、
targetPackage中的字符串
这里是你想将要生成的独立的Mapper接口放到哪个包下,如果没有该包会自动创建
5、
tableName中的字符串
这里是填写要自动生成的实体类对哪个数据表进行创建实体(对象)
domainObjectName 是要生成的实体名称
如果想创建多个只需复制这段在进行粘贴
修改其中的数据表名称及实体类名称即可
在这里配置完成之后就可以自动生成增删改查的代码了
打开右侧的Maven点击我们引用的插件进行双击后将自动生成,如下:
注意: 需要选中本次创建的项目进行查找该架包。
创建BookService这个工具类:进行数据库访问以及SqlSession的赋值,如下:
package com.Kissship.utils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* @author Kissship
* @site www.Kissship.com
* @company xxx公司
* @create 2023-08-15-15:42
*/
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.Kissship.biz;
import com.Kissship.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);
}
BookBizImpl实现类:
package com.Kissship.biz.impl;
import com.Kissship.biz.BookBiz;
import com.Kissship.mapper.BookMapper;
import com.Kissship.model.Book;
/**
* @author Kissship
* @site www.Kissship.com
* @company xxx公司
* @create 2023-08-20-19:54
*/
public class BookBizImpl implements BookBiz {
private BookMapper 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);
}
}
/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
Demo1测试类:
package com.Kissship.demo;
import com.Kissship.biz.BookBiz;
import com.Kissship.biz.impl.BookBizImpl;
import com.Kissship.mapper.BookMapper;
import com.Kissship.model.Book;
import com.Kissship.utils.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* @author Kissship
* @site www.Kissship.com
* @company xxx公司
* @create 2023-08-20-20:07
*/
public class Demo1 {
private SqlSession sqlSession;
private BookBiz bookBiz;
@Before
public void a(){
System.out.println("执行测试方法之前会执行的初始化代码块(类似于前置通知)");
sqlSession = SessionUtil.openSession();//获取session对象
BookBizImpl 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 test01(){
System.out.println("测试方法。。。");
Book book = bookBiz.selectByPrimaryKey(29);//查询id为29的第二十九章节
System.out.println(book);
}
@Test
public void test02(){
bookBiz.deleteByPrimaryKey(29);//删除id为29的第二十九章节
}
}
执行其中的text01查看方法,测试结果:
执行其中的text02删除方法,测试结果:
为删除前的表内容:
删除后的效果:
最后mybatis入门环境搭建及CRUD就到这里,祝大家在敲代码的路上一路通畅!
感谢大家的观看 !