Mybatis学习

为什么会有mybatis?:

图片来自b站的黑马网课 截图  懒得自己打字了hh  帅气的人都要注明出处

相信在学习框架之前 都学习了JDBC

 因为Mybatis可以解决旧的JDBC存在的一些问题

什么是mybatis?: 

 ORM框架原理:

Mybatis是一个ORM框架,即object relation mapping,对象关系映射架构,让Java的对象与数据库的对象一一对应。能自动保存对象到数据表。

 
 搭建Mybatis的环境:

  1. 创建工程
  2. 引入依赖
  3. 准备数据库
  4. 编写数据库连接信息配置文件
  5. 编写核心数据库配置以及映射

 创建工程:

idea创建一个maven项目 

添加依赖:

在pom.xml 中加入下面的依赖项:

2023年应该都是最新版本的。

 <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

 创建数据库:

create  database  mybatis;

创建连接配置:

创建

db.properties连接配置

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimeZone=utc&CharacterEncoding=utf8
mysql.username=root
mysql.password=Zxd123456789.

创建核心配置

导入写好的 连接配置

<?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>
    <!-- 配置文件信息 -->
    <properties resource="properties/db.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 从配置文件中加载属性 -->
                <property name="driver" value="${db.driver}"/>
                <property name="url" value="${db.url}"/>
                <property name="username" value="${db.user}"/>
                <property name="password" value="${db.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 加载前面编写的SQL语句的文件 -->
        <mapper resource="StudentMapper.xml"/>
    </mappers>

</configuration>

到这里环境就搭建完毕了 

搭建完毕之后   我们就来  用一下mybatis   

mybatis入门程序:

准备数据库:

上面的例子中我们已经创建好了数据库 现在我们新建一张表  

create table user
(
    id   int         null,
    name varchar(10) null,
    age  int         null,
    constraint table_name_pk
        primary key (id)
);

create unique index table_name_id_uindex
    on table_name (id);

插入数据:

insert  into user (id, name, age) values ('0','老李',12)

建立一个包mypojo 在包里新建一个pojo类

让他和数据库的字段一一对应

pojo.java

package mypojo;

public class pojo {
    private  String name;
    private  int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

新建usermapping.xml 在资源resourse下面

这里用来查询 

<?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 namespace="mypojo.pojo">
    <!--
      select  用于查询
      id      与接口中方法的名字同名 即调用接口中方法的时候 该方法会找到该配置文件中对应的SQL
      resultType 返回值数据类型 或 泛型为该数据类型的集合
    -->

    <!--查询用户列表 resultType-->
    <select id="find" resultType="mypojo.pojo">
//设置唯一的id 与数据类型
      select * from user where id =#{id}
    </select>
</mapper>

加载sql文件

在核心配置文件mybatis-config.xml里 映射  我们的查询


    <mappers>
        <!-- 加载前面编写的SQL语句的文件 -->
        <mapper resource="usermapping.xml"/>
    </mappers>
<?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>
    <!-- 配置文件信息 -->
    <properties resource="db.properties">

    </properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 从配置文件中加载属性 -->
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 加载前面编写的SQL语句的文件 -->
        <mapper resource="usermapping.xml"/>
    </mappers>

</configuration>

 测试类:

新建个测试类 

test.java


import mypojo.pojo;
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 test {
    public static void main(String[] args) throws IOException {


        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取核心配置
        SqlSessionFactory sqlf = new SqlSessionFactoryBuilder().build(is);
//开启sql
      SqlSession sqs = sqlf.openSession();
        pojo p=  sqs.selectOne("mypojo.pojo.find",1);
//加载sql
        System.out.println(p.getName()+p.getAge());
//获取到数据库信息
        sqs.close();
//释放资源
//从这里也可以看出   mybatis对于jdbc的补充

    }
}

运行结果:

成功获取了信息

 

亲手做了上面的练习  能很好的看出mybatis的工作原理。

mybatis工作原理:

 图是b站黑马的  注明出处  不过这不影响帅气的人自学

 由核心配置文件加载映射文件 也就是上面将数据库与Java对象对应起来的文件

然后构造会话工厂   创建会话对象  创建执行器 由 mybatis为我们自动封装映射数据库中的类型到Java对象上

 


Mybaties配置文件

mybatis-config.xml

下面这个配置文件的顺序是固定的不能随意更改  全部给了注释  

<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 配置文件信息 -->
    <properties resource="db.properties">
   </properties>
<settings>
  <setting>//这里配置一些设置</setting>
</settings>
    <typeAliases>
        <package name=""/>
        <!--对Java的实体 进行别名的映射 默认是类名-->
    </typeAliases>
    <environments default="development">
        <!-- 配置环境 事物以及数据源
        ts  是配置多个数据库环境
        -->
        <environment id="development">
            <!--单个数据库环境  id 就是默认的数据库环境名-->
            <transactionManager type="JDBC"/>
            <!--设置事务管理器  -->
            <dataSource type="POOLED">
                <!--配置数据源 从db的依赖文件中导入-->
                <!-- 从配置文件中加载属性 -->
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 加载前面编写的SQL语句的文件 配置maper sql映射文件-->
        <mapper resource="usermapping.xml"/>
        <!--
        加载映射文件有很多种方式
        1.相对路径
        2.url绝对路径
        3.接口开发 映射文件和接口必须同名 且文件要在同包下  接口的方法名对应映射文件名
        4.包扫描
        最方便的还是packge包扫描
        -->

    </mappers>

</configuration>


mybatis动态sql

在之前拼接sql使用的是   程序员去手动的拼接   

举个例子:select  xx from  table  where   xxx  and xxx 

非常繁琐 且不方便 而且存在问题  如果条件不成立  关键字就会多余出来

mybatis提供了动态sql拼接

有以下几组标签 来拼接sql

以if和where为例子 

 

这里的select语句   如果按照之前的静态的写法  将会很麻烦  这里我们用where和if 组合起来

进行了条件判断  其他几个标签也可以自行去尝试 语法差不多  有Java基础是可以很快理解的

下面主要将一下 trim标签

tirm

可以看到下面的代码   tirm标签可以代替where  可以添加前缀where 以及自动的去除where后面的and 【根据and和where后面的条件是否成立来决定是否剔除关键字】

update:

用法也是比较简单

在更新语法后

<set>

这里写条件即可

</set>

提供了set标签   当set与if连用  要确保set标签内部不为空 否则会有问题


mybatis查询

数据库关系映射:

1:1        一对一          一个人 一张身份证

1:n   一对多   一个人很多个朋友

m:n   多对多     每个人都会有很多朋友

一对一查询:

association标签

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

沐风清扬

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

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

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

打赏作者

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

抵扣说明:

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

余额充值