当前位置: 首页 > news >正文

【MyBatis】安装 + 框架搭建 + 优化 + 增删改查(全程一条龙服务讲解~)

目录

前言

一、准备工作

1.1、下载MyBatis

1.2、数据库设计

二、搭建框架

2.1、创建Maven项目

2.2、jar包、引入依赖

2.3、创建MyBatis核心配置文件

2.4、映射文件

2.5、通过junit测试功能

2.6、框架优化

三、增删改查+优化

四、小结——注意事项


前言

        本篇全程从0到1搭建MyBatis框架,连接MySQL,以向数据库中插入一条信息为例进行使用,再到最后的优化,绝对的一条龙服务~


一、准备工作

1.1、下载MyBatis

MyBatis下载地址:GitHub - mybatis/mybatis-3: MyBatis SQL mapper framework for Java

 注意:这里的mybatis版本之间差异不是很大,可以自己选择版本,本篇以3.5.7为例;安装位置就放在一个你能找到的地方就ok;

1.2、数据库设计

这里以向用户表插入信息为例,搭建MyBatis框架;

(1)、用MySQL创建一个库名为:ssm;

(2)、在ssm数据库下创建一个表,名为user的用户表,sql语句如下:

create table user(id int, username varchar(20), password varchar(20));

二、搭建框架

2.1、创建Maven项目

创建Maven项目基本上就是把项目名自定义一下,然后一路next就完事了;

2.2、jar包、引入依赖

都是在pom.xml的project中加入:

jar包:

    <packaging>jar</packaging>

 引入依赖:

    <dependencies><!-- Mybatis核心 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!-- junit测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- MySQL驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency></dependencies>

2.3、创建MyBatis核心配置文件

        习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring之后,这个配置文件可以省略;

用处:用来连接数据库以及全局配置信息;

核心配置文件存放的位置是src/main/resources目录下,如下:

注意:所有的配置文件都放在resources文件下

文件配置内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--配置连接数据库的环境--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="1111"/></dataSource></environment></environments><!--这里需要引入映射文件--><mappers><mapper resource="mappers/UserMapper.xml"/> </mappers>
</configuration>

这里直接复制粘贴即可,别忘记输入你的数据库名称和密码以及url,如下图:

2.4、映射文件

这里需要映射什么呢,就是我们所要插入信息的用户表,所以还需要在java中创建一个用户表,如下:

public class User {private int id;private String username;private String password;public User(int id, String username, String password) {this.id = id;this.username = username;this.password = password;}public User() {}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

那怎么样才能通过mybatis实现与数据库的交互呢?我们可以提供一个公开的接口供MyBatis使用,如下:

解释:

        MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要 提供实现类;

        为什么可以这么做呢,还记得JDBC实现与数据库的连接吗,咱们用MyBatis就可以不用像JDBC那一套那么繁琐,按照规定,我们只需要提供一个接口即可;

如何将这个接口和刚刚创建的映射文件关联起来呢?接着往下看!

映射文件UserMapper.xml内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bite.mybatis.mapper.UserMapper"> <!--这里建立映射关系-->
<!--mapper接口和映射文件要保证两个一致1.mapper接口的全类名和映射文件的namespace一致2.mapper接口中的方法的方法名要和映射文件的sql的id一致
--><!--int insertUser();--><insert id="insertUser">insert into user values(null, "admin", "123");</insert>
</mapper

解释:

        这里的<mapper namespace="com.bite.mybatis.mapper.UserMapper"> 就是在建立映射关系(注意看代码中的注释,那是我们需要格外注意的地方,否则就会报错!),然后将你想要写的sql语句写在这个标签下即可,仔细观察你会发现,不是直接将sql语句写入其中,而是通过一个inser的标签,实际上这个标签就表明了你要对这个表进行一个什么操作,MyBatis不仅提供了这个insert,还有很多其他方法,如下图:

咱们只需要将我们所要实现的逻辑(sql语句), 写入对应功能的标签下即可,例如select标签就是查询功能,那咱们只需要在这个标签下写查询的sql语句即可;

这里我的是插入功能,那么这里所需要的sql代码就是插入逻辑,向user表中插入数据;

insert标签后面的id熟悉是什么?

        这便是我们需要像MyBatis提供的接口;

2.5、通过junit测试功能

在java文件下创建如下目录结构,用于测试;

测试代码如下:(解释都在注释中)


import com.bite.mybatis.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;public class MyBatisTest {@Testpublic void testInsert() throws IOException {//获取核心配置文件的输入流InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//获取SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();//获取sqlSessionFactory对象SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);//获取sql的会话对象SqlSession,是MyBatis提供操作数据库的对象SqlSession sqlSession = sqlSessionFactory.openSession();//获取UserMapper类的代理实现类对象UserMapper mapper = sqlSession.getMapper(UserMapper.class);//调用mapper接口中的方法,实现添加用户信息的功能int result = mapper.insertUser();System.out.println("结果:" + result);//提交事务(若没有commit,只会插入表中,但是不显示插入结果)sqlSession.commit();//关闭会话sqlSession.close();}
}

执行结果:

 

2.6、框架优化

优化一:自动提交事务(commit)

        上面我们提到,若不写commit方法,是不会自动提交sql语句的,并且每次此提交都要写是很麻烦的,实际上我们在创建SqlSession会话的时候是可以指定是否自动提交的,只需要在openSession构造参数中填写true,即可实现自动提交事务~

如下代码:


import com.bite.mybatis.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;public class MyBatisTest {@Testpublic void testInsert() throws IOException {//获取核心配置文件的输入流InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//获取SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();//获取sqlSessionFactory对象SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);//获取sql的会话对象SqlSession(不会自动提交事务,如下),是MyBatis提供操作数据库的对象//SqlSession sqlSession = sqlSessionFactory.openSession();//获取sql的会话对象SqlSession(会自动提交事务,如下),是MyBatis提供操作数据库的对象SqlSession sqlSession = sqlSessionFactory.openSession(true);//获取UserMapper类的代理实现类对象UserMapper mapper = sqlSession.getMapper(UserMapper.class);//调用mapper接口中的方法,实现添加用户信息的功能int result = mapper.insertUser();System.out.println("结果:" + result);//提交事务(若没有commit,只会插入表中,但是不显示插入结果)//sqlSession.commit();//关闭会话sqlSession.close();}
}

优化二:日志功能

        日志功能就是可以在我们执行代码后,会给打印一些日志信息,如:执行的sql代码,修改了几行...等等;

(1)首先先向pom.xml中加入log4j依赖

        <!-- log4j日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>

(2)向resources中添加如下配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><param name="Encoding" value="UTF-8" /><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
%m (%F:%L) \n" /></layout></appender><logger name="java.sql"><level value="debug" /></logger><logger name="org.apache.ibatis"><level value="info" /></logger><root><level value="debug" /><appender-ref ref="STDOUT" /></root>
</log4j:configuration>

注意:如下图,这里标红,是没事的,直接点击运行没有关系:

执行效果: 


三、增删改查+优化

        框架优化中讲到MyBatisTest的设计,你每写一个增加、删除等功能,都需要把获取SqlSession这套流程再写一遍,相当麻烦,因此我们可以把这条流程封装成一个方法getSqlSession()专门用来获取SqlSession对象;对应的,如果我们需要实现某一功能,例如删除功能,我们就可以另外写一个@Test测试方法进行测试,方法中,通过代理实现类对象UserMapper实现对应功能即可;

如下代码:(增删改查)

SqlSessionUtil.java中实现获取SqlSession流程,以及对应的测试方法,如下:

import com.bite.mybatis.mapper.UserMapper;
import com.bite.mybatis.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import javax.xml.ws.RequestWrapper;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class SqlSessionUtil {public static SqlSession getSqlSession() {SqlSession sqlSession = null;try {//获取核心配置文件的输入流InputStream in = Resources.getResourceAsStream("mybatis-config.xml");//获取建造工厂方法SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();//获取工厂对象SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(in);//获取SqlSession对象(设置参数为true,自动提交)sqlSession = sqlSessionFactory.openSession(true);} catch (IOException e) {e.printStackTrace();}return sqlSession;}//修改数据功能@Testpublic void testUpdate() {SqlSession sqlSession = SqlSessionUtil.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.updateUser();sqlSession.close();}//删除数据@Testpublic void testDelete() {SqlSession sqlSession = SqlSessionUtil.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.deleteUser();sqlSession.close();}//查询@Testpublic void testGetUserById() {SqlSession sqlSession = SqlSessionUtil.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.getUserById();System.out.println(user);sqlSession.close();}//查询所有@Testpublic void testGetAllUser() {SqlSession sqlSession = SqlSessionUtil.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> list = mapper.getAllUser();list.forEach(System.out::println);}
}

UserMapper.java中实现对应功能的接口


import com.bite.mybatis.pojo.User;import java.util.List;public interface UserMapper {//添加用户信息int insertUser();//修改用户信息void updateUser();//删除用户信息void deleteUser();//查找数据User getUserById();//查询所有用户信息List<User> getAllUser();
} 

UserMapper.xml通过对应功能写入sql语句(注意查询功能有些不一样,注意看注释!)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bite.mybatis.mapper.UserMapper"> <!--这里建立映射关系-->
<!--mapper接口和映射文件要保证两个一致1.mapper接口的全类名和映射文件的namespace一致2.mapper接口中的方法的方法名要和映射文件的sql的id一致
--><!--int insertUser();--><insert id="insertUser">insert into user values(null, "admin", "123");</insert><!--void updateUser--><update id="updateUser">update user set username='root',password='123' where id = 2;</update><!--void deleteUser--><delete id="deleteUser">delete from user where id = 1;</delete><!--User getUserById--><!--resultType: 设置结果类型,即查询的数据要转换为的java类型resultMap:自定义映射,处理多对一或一对多的银蛇关系--><select id="getUserById" resultType="com.bite.mybatis.pojo.User">select * from user where id = 2;</select><!--List<User> getAllUser--><!--注意这里为什么不直接写List,因为我们还是需要先转化为实体类对象,再放入List--><select id="getAllUser" resultType="com.bite.mybatis.pojo.User">select * from user;</select></mapper>

四、小结——注意事项

注意:mapper接口和映射文件要保证两个一致

1.mapper接口的全类名和映射文件的namespace一致;

2.mapper接口中的方法的方法名要和映射文件的sql的id一致;

以上两点一定要注意,否则就会失败;


http://www.xdnf.cn/news/845821.html

相关文章:

  • Node快速入门
  • 管理系统中layui的一些常规操作,增加、修改、删除、查询
  • 超全能,MobaXterm远程工具,网工、运维这样用就对了
  • 1、nacos功能简介
  • 一文了解 2024 美国流媒体行业动态
  • SQL是什么?它能做什么?SQL的基本书写规则
  • 用例图、类图、包图
  • VLOOKUP函数16种经典用法(史上最全,记得收藏)
  • VUE基础知识九 ElementUI项目
  • 最全的git命令(详细)和对常见git操作流程讲解
  • MySQL安装和配置(超详细)
  • 【Element入门】2、Element UI 的基本使用
  • 2010年最骚最有深度的100句话!
  • vue基础教程(5)——十分钟吃透vue路由router
  • html设计
  • 各个版本Microsoft Visual C++运行库下载
  • 3D 日本游戏模型 MOD 工具 SB3Utility 和 3D Object Converter 汉化版
  • Vc++安装包_Visual C++ 6.0中文版安装与配置入门教程(非常详细),从零基础入门到精通,看完这一篇就够了(附安装包)
  • 计算机毕业设计题目大全(论文+源码)_kaic
  • 什么是SPEC基准测试?
  • 【Nuvoton干货分享】LCD开发篇 3 ——N9H30 RGB彩屏软件调试(一)
  • python面试题合集(一)
  • 国内外知名PT站点最全汇总,含各站内截图及站点链接【转载】
  • Js-JavaScript-三种弹出提示框-alert-confirm-prompt-ai插件
  • 值得分享的几个免费数据采集软件
  • 一个古诗文起名工具
  • Hash的基本原理
  • 三维弹球c++求解
  • win7安装camera raw13.0.2详解。
  • VMware虚拟机磁盘分区图文教程