mybatis 学习笔记 day01

简介

什么是 MyBatis?

**MyBatis 是一款优秀的持久层框架**,它支持自定义 SQL、存储过程以及高级
映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的
工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口
和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库
中的记录。	Mybtais是一个ORM框架,轻量级的ORM框架。mybatis将SQL
语句的定义控制权,完全交给了开发者,并且暴露一套API,对JDBC中:
事务,参数,查询结果等进行配置处理。**Mybatis也是基于ORM思想.** 

强烈建议学习 mybatis 先去看官方文档:mybatis中文网

什么是ORM呢??
简单理解是一个关系对应模型 ,数据库的表对应我们写的实体类

ORM : Object relation mapping
对象关系映射
将数据库信息和Java中实体类进行映射
users:  1  张三  20              User: id、uName、age

话不多说,使用mybatis 需要用到maven项目 规范来做就是7个步骤 :
代码结构目录 :
在这里插入图片描述

  1. 首先导入我们的jar包
    jar包地址:添加链接描述
    搜索需要的jar包 ,然后复制里面的maven代码到pom.xml 就好了

在这里插入图片描述

pom.xml 文件

 <dependencies>
        <!--导入mysql jar包 ,记住mysql的版本最好要跟我们的mysql 一致 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.12</version>
        </dependency>
        <!-- 导入mybatis jar包 版本不需要太高 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
 <!-- 导入 测试jar包 可以用来测试代码 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

  1. 第二步 写我们的resources 配置文件
<?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="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ums?serverTimezone=UTC&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="12345678"/>
            </dataSource>
        </environment>
        <!-- 这里还可以配置其他连接 ,<environment id ="mysql12" -->
    </environments>
    <!-- 配置到mapper下的xml 文件   ,引入局部配置文件-->
<mappers>
    <mapper resource="com/powernode/mapper/usermapper.xml"/>
</mappers>
</configuration>
  1. 第四步,写user实体类
package com.powernode.entity;

public class User {
    private String usercode;
    private String fullname;
    private int age;
    private String sex;
    private String email;
    private String address;

/* 
我们最好有参和无参构造 都写上
*/
    public User() {
    }

    public User(String usercode, String fullname, int age, String sex, String email, String address) {
        this.usercode = usercode;
        this.fullname = fullname;
        this.age = age;
        this.sex = sex;
        this.email = email;
        this.address = address;
    }

    public String getUsercode() {
        return usercode;
    }

    public void setUsercode(String usercode) {
        this.usercode = usercode;
    }

    public String getFullname() {
        return fullname;
    }

    public void setFullname(String fullname) {
        this.fullname = fullname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "usercode='" + usercode + '\'' +
                ", fullname='" + fullname + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", email='" + email + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

  1. 第四步
    写我们的mapper接口 ,也就是我们之前写的dao 层接口
import com.powernode.entity.User;

import java.util.List;
import java.util.Map;

public interface usermapper {
//增删改查操作
    List<User>getusers();

    User getoneuser(String id);

    int addusers(User user);

    /* 使用map */
    int addusers2(Map<String, Object> map);

    int updateusers(User user);

    int deleteusers(String id);
}

  1. 第五步 ,写我们的mapper.xml 这里就是写我们sql 语句的啦
<?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 要和mapper 同包绑定到指定mapper -->
<mapper namespace="com.powernode.mapper.usermapper">
    <!-- select 中的id 要和 mapper 里面的方法一致,绑定指定方法 -->
    <!-- resultType 是sql 语句执行的返回类型 -->
    <!-- parameterType=""  是参数类型 -->
    <select id="getusers" resultType="com.powernode.entity.User">
        select *
        from user
    </select>
    <select id="getoneuser" parameterType="String" resultType="com.powernode.entity.User">
        select *
        from user
        where usercode = #{id}
    </select>

    <insert id="addusers" parameterType="com.powernode.mapper.usermapper">
        insert into user (usercode,fullname,age,sex,email,address) values(#{usercode},#{fullname},#{age},#{sex},#{email},#{address})
    </insert>

    <update id="updateusers" parameterType="com.powernode.mapper.usermapper" >
        update user set fullname = #{fullname} ,age = #{age} where usercode = #{usercode}
    </update>

    <delete id="deleteusers" parameterType="String" >
        delete from user where usercode = #{usercode}
    </delete>

    <!-- map key 值可以自定义 ,value 里面的和user  区别,就是user需要按照实体类写法 ,map不需要-->
    <insert id="addusers2" parameterType="map">
        insert into user (usercode,fullname,age,sex,email,address) values(#{usercode},#{fullname},#{age},#{sex},#{email},#{address})
    </insert>
</mapper>
  1. 第六步就是写我们的 工具类 ,我们mybatis 创建会话工厂SqlSessionFactory 的地方

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 Mybatisutils {
  /* 会话工厂 创建SqlSession对象,SqlSessionFactory是全局对象
   static 保证全局唯一,我们这里都用static 修饰,让程序一开始就加载我们的SqlSessFactory
  */
  public static SqlSessionFactory sqlSessionFactory;

  static {
    try {
      // xml resource资源路径
      String resource = "mybatis.confing.xml";
      // 获得加载核心配置文件的inputStream流
      InputStream inputStream = Resources.getResourceAsStream(resource);
      // 通过SqlSessionFactoryBuilder对象的build方法创建SqlSessionFactory对象
      sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  // 获得 sqlsession
  public static SqlSession getSqlSession() {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    return sqlSession;
    // 也可以这样写return sqlSessionFactory.openSession();
  }
}

  1. 最后一步 ,写我们的mapper 接口的实现方法,就是我们以前的daoimpl

import com.powernode.entity.User;
import com.powernode.mapper.usermapper;
import com.powernode.util.Mybatisutils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class mapperTest {

  @Test
  public void test() {
    // 1、获取sqlsession对象
    SqlSession sqlSession = Mybatisutils.getSqlSession();
    try {
      // 2、执行语句,,相当于userdao userdao =new userdaoimpl()
      usermapper usermapper = sqlSession.getMapper(usermapper.class);
      // 3、 list<User> 接收返回值
      List<User> userList = usermapper.getusers();
      for (User user : userList) {
        System.out.println(user);
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      // 4、关闭sqlsession
      sqlSession.close();
    }
  }

  @Test
  public void testone() {
    SqlSession sqlSession = Mybatisutils.getSqlSession();
    usermapper usermapper = sqlSession.getMapper(usermapper.class);
    User user = usermapper.getoneuser("d94d16bc-099e-11ed-9004-0a0027000009");
    System.out.println(user);
    sqlSession.close();
  }

  @Test
  public void addusers() {
    SqlSession sqlSession = Mybatisutils.getSqlSession();
    usermapper usermapper = sqlSession.getMapper(usermapper.class);

    usermapper.addusers(new User("111", "hhh", 18, "男", "22@qq.com", "广东省"));
    // 提交事务,不然不会插入
    sqlSession.commit();
    sqlSession.close();
  }

  /*使用map */
  @Test
  public void addusers2() {
    SqlSession sqlSession = Mybatisutils.getSqlSession();
    usermapper usermapper = sqlSession.getMapper(usermapper.class);

    Map<String, Object> Map = new HashMap<>();
    Map.put("usercode","222");
    Map.put("fullname","HHH");
    Map.put("age",10);
    Map.put("sex","男");
    Map.put("email","2528@qq.com");
    Map.put("address","中国");
    usermapper.addusers2(Map);
    // 提交事务,不然不会插入
    sqlSession.commit();
    sqlSession.close();
  }


  @Test
  public void updateusers() {
    SqlSession sqlSession = Mybatisutils.getSqlSession();
    usermapper usermapper = sqlSession.getMapper(usermapper.class);

    usermapper.updateusers(new User("111", "小灰灰", 18000, "男", "22@QQ.com", "hhh"));
    // 提交事务,不然不会插入
    sqlSession.commit();
    sqlSession.close();
  }

  @Test
  public void deleteusers() {
    SqlSession sqlSession = Mybatisutils.getSqlSession();
    usermapper usermapper = sqlSession.getMapper(usermapper.class);

    usermapper.deleteusers("111");
    // 提交事务,不然不会插入
    sqlSession.commit();
    sqlSession.close();
  }
}

我们的增删改操作需要加上sqlSession.commit(); 这句话,提交业务,操作才会执行

我们的这些操作这三句代码是不需要改变的:

 SqlSession sqlSession = Mybatisutils.getSqlSession();
 usermapper usermapper = sqlSession.getMapper(usermapper.class);
/* -- 需要写的是中间的代码, 专注于我们的sql 语句,让我们的数据库操作
更加简便*/
 sqlSession.close();

最后 ,如果出现 配置文件写了但是代码加载不到的问题 ,我们在pom.xml 文件中加上这段代码:


    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>

            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.poroperties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huangshaohui00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值