SSM框架-MyBatis基础
创始人
2024-02-17 16:51:21

1. MyBatis简介

1.1 MyBatis历史

MyBatis最初是Apache的一个开源项目iBatis,2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。

iBatis一词来源于“internet”和“abatis”的组合,是一个基于ava的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects (DAO)。

1.2 MyBatis的特性

MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久化框架

MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集

MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(普通java对象)映射成数据库中的记录

MyBatis是一个半自动的ORM框架

1.3 和其他持久化层的对比

  • JDBC
    • SQL夹杂在Java代码中,耦合度高,导致硬编码内伤
    • 维护不易且实际开发需求中SQL有变化,频繁修改的情况很多
    • 代码冗长,开发效率低
  • Hibernate 和 JPA
    • 操作简单,开发效率高
    • 程序中的长难复杂 SQL 需要绕过框架
    • 内部自动产生的SQL不容易做特殊优化
    • 基于全映射的自动框架,大量字段的POJO进行部分映射时比较困难
    • 反射操作太多,导致数据库性能下降
  • MyBatis
    • 轻量级,性能突出
    • SQL和Java分开编码,功能边界清晰,Java代码专注业务,SQL语句专注数据
    • 开发效率稍逊于Hibernate,但是完全能接受

2. 搭建MyBatis

2.1 创建maven工程

(1)创建项目

        a. 新建一个空项目,项目名为SSM;

        b. 在项目SSM中新建一个maven模块,名为MyBatis_Demo;

        c. 在该模块中,test文件夹中存放测试用代码,main文件夹中的java文件夹存放开发代码,main文件夹中的recourse文件夹存放配置文件;

        d. 在MySQL数据库中创建一个数据库ssm,创建一个表t_user;表结构如下(id自增):

(2)打包方式:jar

        在maven项目的pom.xml文件中添加:jar

(3)引入依赖

          在pom.xml文件中添加如下代码:

org.mybatismybatis3.5.7junitjunit4.12testmysqlmysql-connector-java5.1.3org.projectlomboklombok1.16.10provided

(4)创建实体类

        在src/main/java目录下,创建一个java类,命名:com.wsl.mybatis.pojo.User.java(命名可根据自己情况随意起,前面的com.wsl.mybatis.pojo表示文件目录,User.java是文件名)

import lombok.Data;@Data
public class User {private Integer id;private String username;private String password;private Integer age;private String gender;private String email;}

(5)创建mapper接口

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

        在src/main/java目录下,创建一个java类,命名:com.wsl.mybatis.mapper.UserMapper.java文件。

import com.wsl.mybatis.pojo.User;
import java.util.List;public interface UserMapper {// 添加用户int insertUser();// 更新用户void updateUser();// 删除用户void delUser();// 根据id查找用户User getUserById();// 查找所有用户List  getAllUser();}

(5)创建MyBatis的映射文件

        在src/main/recourse目录下,创建com.wsl.mybatis.mapper.UserMapper.xml

    注意:

       1. MyBatis中可以面向接口操作数据,要保证两个一致:

                mapper接口的全类名和映射文件的命名空间(namespace)保持一致

                mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

        2.查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系:

                resultType:自动映射,用于属性名和表中字段名一致的情况

                resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况

        3.当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常 TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值



insert into t_user values(null,'张三','123',23,'女','2436@qq.com');update t_user set username='李四',password='abc' where id=3;delete from t_user where id=4;

(6)创建MyBatis核心配置文件:application.xml

        核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息

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



(7)创建测试类

        在src/test/java目录下,创建com.wsl.mybatis.MyBatisTest.java文件

        SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的 会话)

        SqlSessionFactory:是“生产”SqlSession的“工厂”。

        工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的 相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。

import com.wsl.mybatis.mapper.UserMapper;
import com.wsl.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 java.io.IOException;
import java.io.InputStream;
import java.util.List;public class MyBatisTest {// 增加一列@Testpublic void testInsert() throws IOException {// 获取配置文件的输入流InputStream is = Resources.getResourceAsStream("application.xml");// 获取SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();// 获取sqlSessionFactoryBuilder对象SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);// 获取SQL的会话对象,是MyBatis提供的操作数据库的对象,true表示自动提交commitSqlSession sqlSession = sqlSessionFactory.openSession(true);// 方法1:// 获取UserMapper的代理实现类对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 调用userMapper接口中的方法,实现添加操作int result = userMapper.insertUser();// // 方法2:提供sql以及唯一标识找到sql并执行,唯一标识是namespace.sqlId// int result=sqlSession.insert("com.wsl.mybatis.Mapper.UserMapper.insertUser");System.out.println("结果是:"+result);// 关闭会话sqlSession.close();}// 修改@Testpublic void TestUpdate(){InputStream is = Resources.getResourceAsStream("application.xml");SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);UserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.updateUser();sqlSession.close();}// 删除@Testpublic void TestDel(){InputStream is = Resources.getResourceAsStream("application.xml");SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);UserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.delUser();sqlSession.close();}// 根据id查找User@Testpublic void TestFindById(){InputStream is = Resources.getResourceAsStream("application.xml");SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.getUserById();System.out.println(user);sqlSession.close();}// 查询所有的User@Testpublic void TestGetAllUsers(){InputStream is = Resources.getResourceAsStream("application.xml");SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);UserMapper mapper = sqlSession.getMapper(UserMapper.class);List users = mapper.getAllUser();// 循环输出List里面的内容users.forEach(System.out::println);sqlSession.close();}}

接下来就可以通过每个@Test注释来启动每个测试代码,验证是否正确。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...