Mybatis学习笔记

1.简介

1.1、什么是Mybatis

MyBatis logo
  • MyBatis是一款优秀的持久层框架
  • 它支持定制化SQL、存储过程以及高级映射
  • MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集
  • MyBatis 可以使用简单的XML或注解来配置和映射原生类型,接口和Java的POJO(Plain Old Java Object,普通老师java对象)为数据库中的记录
  • MyBatis本是apache的一个开源项目iBatis,2010年这个项目有apache software foundation迁移到了google code,并且改名为MyBatis
  • 2013年11月迁移到了Github

如何获得MyBatis

  • maven仓库:

    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
    
    
  • Github:https://github.com/mybatis/mybatis-3

  • 中文文档:https://mybatis.org/mybatis-3/zh/index.html

1.2、持久化

数据持久化:

  • 持久化就是将程序的数据在持久状态和瞬时状态的转化过程
  • 内存:断电即失
  • 数据库(JDBC)、IO文件持久化

为什么需要持久化

  • 有一些对象不能让他丢掉
  • 内存太贵

1.3、持久层

Dao层、Service层、Controller层、、、

  • 完成持久化工作的代码块
  • 层界限十分明显

1.4为什么需要MyBatis?

  • 方便
  • 传统的JDBC代码太复杂——>简化——>框架——>自动化
  • 不用Mybatis也可以,技术没有高低之分
  • 优点:
    • 简单易学
    • 灵活
    • SQL和代码的分离,提高了可维护性
    • 提供映射标签、支持对象与数据库的orm字段的关系映射
    • 提供了对象关系映射标签,支持对象关系组维护
    • 提供了XML标签,支持编写动态SQL

最重要的一点:使用的人多

2、第一个Mybatis程序

思路:搭建环境—>导入Mybatis–>编写代码—>测试!

2.1、搭建环境

搭建数据库

CREATE DATABASE mybatis;

USE mybatis;
CREATE TABLE user
(
id INT(20) NOT NULL PRIMARY KEY,
name VARCHAR(30) DEFAULT NULL,
pwd VARCHAR(30) DEFAULT NULL

)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO user(id, name, pwd) VALUES
(1, '狂神', '123456'),
(2, '张三', '123456'),
(3, '李四', '123456')

新建项目:

  1. 新建一个普通的maven项目
  2. 删除src目录 :这样处理的结果是,在全局pom.xml中导入maven依赖之后,在之后创建的每个module中,子工程都有有相应的依赖,而父工程的pom.xml文件中,也会多出的一module
  3. 导入maven
<!--导入依赖-->
    <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>

        </dependency>

        <!--mybatis-->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>

        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>

        </dependency>

    </dependencies>

4.配置idea的JDK版本,如果不配置的话,每次maven项目重新编译,JDK版本就会变回到1.5

<properties>
    <maven.compiler.source>14</maven.compiler.source>
    <maven.compiler.target>14</maven.compiler.target>
</properties>

2.2、创建一个模块

  • 编写mybatis的核心配置文件
<?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核心配置文件-->
<configuration>
    <environments default="development">
        <environment id="development">
            <!--transactionManager事务管理-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?userSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="dyk160513140."/>
            </dataSource>
        </environment>
    </environments>
</configuration>
  • userSSL=true&am:

​ Mysql在高版本需要指明是否进行SSL连接:

​ SSL协议提供服务主要:

​ 1)认证用户服务器,确保数据发送到正确的服务器

​ 2)加密数据,防止数据传输途中被窃取

​ 3)维护维护数据完整性,验证数据在传输的途中是否丢失

  • useUnicode=true&characterEncoding=UTF-8

    添加的作用:指定字符编码、解码格式

    ​ 1:存数据时:

    ​ 数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中

    ​ 2:取数据时:

    ​ 在从数据中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端

  • 编写mybatis工具类
public class MybatisUtils {
   
    private static SqlSessionFactory sqlSessionFactory;//提升作用域
    static {
   
        try {
   
            //使用Mybatis第一步:获取sqlSessionFactory对象
            String resource = "org/mybatis/example/mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
   
            e.printStackTrace();
        }
    }
    //既然有了sqlSessionFactory,顾名思义,我们救可以从中获得SqlSession的实例了
    //SqlSession 定义包含了面向数据库执行SQL命令所需的所有方法

    public static SqlSession getSqlSession(){
   
        return  sqlSessionFactory.openSession();
    }
}

2.3、编写代码

  • 实体类
//实体类
public class User {
   
    private int id;
    private String name;
    private String pws;

    public User() {
   

    }

    public User(int id, String name, String pws) {
   
        this.id = id;
        this.name = name;
        this.pws = pws;
    }

    public int getId() {
   
        return id;
    }

    public void setId(int id) {
   
        this.id = id;
    }

    public String getName() {
   
        return name;
    }

    public void setName(String name) {
   
        this.name = name;
    }

    public String getPws() {
   
        return pws;
    }

    public void setPws(String pws) {
   
        this.pws = pws;
    }
}

  • Dao接口:
public interface UserDao {
   
   public List<User> getUserList();
}
  • 接口实现类由原来的UserDaoImpl转变为一个Mapper排至文件
<?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">
<!--namespace:绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.kuang.dao.UserDao">
    <!--select查询语句, id相当于原来实现接口的方法名字 -->
    <select id="getUserList" resultType="com.kuang.pojo.User"></select>
</mapper>

2.4、测试

遇到的问题

注意点:

Type interface com.kuang.dao.UserDao is not known to the MapperRegistry.

MapperRegistry是什么?

核心配置文件中注册mapper

  • Junit测试
public class UserDaoTest {
   
    @Test
    public void test(){
   
        //第一不:过去Sqlsession对象
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        //执行SQL
        UserDao mapper = sqlSession.getMapper(UserDao.class
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小普罗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值