Mybatis的介绍及使用

一,什么是Mybatis?

        

官方文档: https://mybatis.org/mybatis-3/zh/index.html
百度百科:
MyBatis 本是 apache 的一个 开源项目 iBatis, 2010 年这个 项目 apache software foundation 迁移到了
google code ,并且改名为 MyBatis 2013 11 月迁移到 Github
iBATIS 一词来源于 “internet” “abatis” 的组合,是一个基于 Java 持久层 框架。 iBATIS 提供的持久层框
架包括 SQL Maps Data Access Objects DAOs
当前,最新版本是 MyBatis 3.5.7 ,其发布时间是 2021 4 21 日。
官网 :
MyBatis 是一款优秀的 持久层框架 ,它支持自定义 SQL 、存储过程以及高级映射。 MyBatis 免除了几乎
所有的 JDBC 代码以及设置参数和获取结果集的工作。 MyBatis 可以通过简单的 XML 或注解来配置和映
射原始类型、接口和 Java POJO Plain Old Java Objects ,普通老式 Java 对象)为数据库中的记录。

二,为什么需要Mybatis?

简化传统的JDBC代码,能够实现自动化映射
简单,容易上手
大部分公司都在用
优点:
        简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+
        置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的
        设计思路和实现。
        灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,
        便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
        解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系
        统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
        提供映射标签,支持对象与数据库的orm字段关系映射
        提供对象关系映射标签,支持对象关系组建维护
        提供xml标签,支持编写动态sql

三,制作第一个mybatis程序

1.搭建数据库

创建一个父类的项目,里面创建module项目,在子类的pom.xml文件中创建一个<parent></parent>

<parent>
    <groupId>org.example</groupId>
    <artifactId>mybatisPractice</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

parent里面的三行是从父类的pom.xml文件中复制过来就好

2.创建项目,导入依赖

        导入mybatis依赖还有mysql依赖

        <dependency>
        <groupId> org.mybatis </groupId>
        <artifactId> mybatis </artifactId>
        <version> 3.5.7 </version>
        </dependency>
        <dependency>
        <groupId> mysql </groupId>
        <artifactId> mysql-connector-java </artifactId>
        <version> 5.1.47 </version>
        </dependency>
        <dependency>
        <groupId> org.junit </groupId>
        <artifactId> junit </artifactId>
        <version> 4.11 </version>
        </dependency>

        mybatis依赖去百度mybatis官网上搜索,复制下来就好

3.编写配置文件mybatis-config.xml    

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//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="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

官网上搜即可

4.搭建框架

        

 在resources下创建db.properties文件

        

 注意,写命令时不能加空格和分号

在mybatis-config.xml文件中引入db.properties文件

        

然后在resources下创建directory目录Mapper下创建UserMapper.xml文件(名字随意.xml)

创建好后去官网上复制

        

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

这个,然后这个和上面mybatis-config.xml要连接起来,

        

        

 

      在创建一个接口,用来连接刚才新建的那个.xml文件

         

         现在我们这三个就连接起来了

5.创建工具类

        

package com.util;

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 java.io.IOException;
import java.io.InputStream;

public class BaseDaoUtil {
    private static SqlSessionFactory sessionFactory;
    static {
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取SqlSession对象
    public static SqlSession sqlSession(){
        return sessionFactory.openSession();
    }
}

写入静态代码块里是为了更好的被其他类调用

6.创建实体类

        创建一个pojo包下创建一个实体类(User  名字随意),写上n个属性,获取getter/setter方法,获取有参无参函数,

        

 1-1,查找数据库所有信息

        在接口中写入方法        

        List<User> queryUserList();

        然后去新建的UserMapper.xml文件中写sql语句

        

 <select id="queryUserList" resultType="user">
        select * from user;
    </select>

       这里面的id就是接口中的方法名,resultType需要映射返回值User,因为接口中写的要返回User对象,所以要映射

       

7.创建测试类test

        创建一个测试类UserMapperTest(类名随意),

        

        这样就可以查到所有的数据了

      

      1-2,增加信息

          还是一样在接口中写方法

        int addUser(User user);

          然后去UserMapper.xml文件中写sql语句

        

 <insert id="addUser" parameterType="com.yhzz.pojo.User">
        insert into user (id,userName,pwd)
        values (#{id},#{userName},#{pwd});
    </insert>

        接口中参数是user类,所以parameterType是接收参数类型的,parameterType=“User实体类的路径地址”

        然后去测试类测试

        

 @Test
    public void addUser(){
        SqlSession sqlSession = BaseDaoUtil.sqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int rows = mapper.addUser(new User(1, "张紫怡", "250"));
        System.out.println("新增数据"+rows+"条");
        sqlSession.commit();
        sqlSession.close();
    }

       ok搞定!

        1-3修改信息

        写接口

        

int updateUser(User user);

        接着去写sql语句

        

 <update id="updateUser" parameterType="com.yhzz.pojo.User">
        update user set userName = #{userName},pwd = #{pwd} where id = #{id};
    </update>

然后测试类写

        

 @Test
    public void updateUser(){
        SqlSession sqlSession = BaseDaoUtil.sqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int name = mapper.updateUser(new User(3, "zhuang", "200"));
        System.out.println("修改成功"+name+"条");
        sqlSession.commit();
        sqlSession.close();
    }

1-4  删除信息

        写接口

        

  int deleteUser(@Param("id") int id);

        写sql语句,在这里参数是int,parameterType=“这里直接写int,与前面的参数要对应”

        

  <delete id="deleteUser" parameterType="int">
        delete from user where id = #{id};
    </delete>

                写测试

        

@Test
    public void deleteUser(){
        SqlSession sqlSession = BaseDaoUtil.sqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.deleteUser(6);
        System.out.println("删除"+i+"条数据");
        //增删改需要提交事务
        sqlSession.commit();
        sqlSession.close();
    }

        在这里会有人说,为啥有的里面有sqlSession.commit();有的没有

        因为查找数据的时候是不需要提交事务的

        增删改都需要手动提交事务,sqlSession.commit();手动提交事务

     

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值