MyBatis的基本使用

一,MyBatis的主要作用:

简化数据库访问操作:MyBatis通过提供自动映射CRUD(创建、读取、更新、删除)操作的能力,使得开发者可以更加专注于业务逻辑,而不需要过多地关心数据库访问的繁琐细节。开发者只需编写SQL语句,就可以完成数据库操作,大大简化了数据访问层代码的编写。


提高开发效率:MyBatis将数据库操作和SQL语句与Java代码解耦,使得代码更加清晰和易于维护。通过XML或注解的方式配置SQL语句,降低了数据转换的复杂性,提高了开发效率。
 

支持动态SQL:MyBatis支持原生SQL、动态SQL和存储过程,使得开发者可以根据不同的条件生成不同的SQL语句,提高了SQL语句的复用性和灵活性。

二,ORM框架

MyBatis是ORM框架典型的代表之一,ORM框架,即对象关系映射(Object-Relational Mapping)框架,是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。简而言之,ORM框架在编程中充当了“翻译”的角色,把对象模型表示的对象映射到基于SQL的数据库系统上。

三,引入

原来连接操作数据库有七个操作

①导入jar包,加载驱动

②创建连接

③创建执行者对象

④编写sql语句

⑤执行sql语句

⑥处理结果集

⑦释放资源

缺点:sql语句硬编码,从结果集映射到pojo比较麻烦

解决:sql语句写到配置文件中,解决硬编码文件,简化pojo的映射

四,MyBatis的使用

这边下面的例子使用之前需要在数据库中定义一个表alluser用户表

(1)引入MyBatis的依赖,在pom.xml文件中

 <!--    引入mybatis依赖    -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>

(2)写mapper接口

创建一个UserMapper接口类

package com.cykj.mapper;

import com.cykj.pojo.Alluser;
import org.apache.ibatis.annotations.Param;

public interface UserMapper {
    //定义了一个登录的方法,然后@Param是指明参数的
    Alluser login(@Param("account") String acc, @Param("pwd") String pwd);
    //定义了一个更新数据库密码的方法
    int updateUserPwd(@Param("id") String id,@Param("pwd") String pwd);
}

(3)mapper映射文件(写sql语句)

这边是在resources下面创建一个专门写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">
<mapper namespace="com.cykj.mapper.UserMapper">
    <!-- 编写登录用的 -->
    <select id="login" resultType="com.cykj.pojo.Alluser">
        select * from alluser where account = #{account} and pwd = #{pwd}
    </select>
    <!-- 查询用户条数 -->
    <select id="getCount" resultType="java.lang.Integer">
        select count(*) from alluser
    </select>
    <!-- 更新密码 -->
    <update id="updateUserPwd">
        update alluser set pwd = #{pwd} where userId = #{id}
    </update>
</mapper>

在写sql语句中,你会发现我们这边写的是pwd = #{pwd},其实也可以使用pwd = ${pwd},

#与$两个的区别就是:

用 # 字号打印出来的sql语句是用“?”代替了,这就是占位符,比如

update alluser set pwd = ? where userId = ?

用 $ 符号打印出来就是值的拼接,比如

update alluser set pwd = "123" where userId = "003"

这边比较支持用 # 写哦

(4)将mapper映射文件(写sql的那个文件)给他注册到mybatis中(写在mybatis-config.xml中)

在resources中建一个mybatis-config.xml,来写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>
    <settings>
        <!--        开启mybatis的日志打印-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!--    开启驼峰式命名,跟pojo做映射    -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <environments default="jdbc">
        <environment id="jdbc">
            <!--    数据库事务,使用JDBC的事务    -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据库:POOLED,C3P0,Druid(都是连接池) -->
            <dataSource type="POOLED">
                <!--写数据库的加载驱动-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <!--数据库路径,3306为端口号,在数据库中查看,mooc是数据库名-->
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mooc"/>
                <!--写账号密码-->
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 将mapper映射文件注册进来 -->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
    </mappers>
</configuration>

(5)mapper如果有多个参数的话,需要增加@Param,如第二部方法中的参数

然后注意点就是一一对应,为了更好的看,我就截图下来

6)写SqlSession

这边建一个测试类,来测试

package com.cykj.main;

import com.cykj.mapper.UserMapper;
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 Main {
    public static void main(String[] args) {
        //1.获取配置文件
        try {
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
            //2.创建sqlSession工厂建造器
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            //3.通过工厂建造器创建连接工厂
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
            //4.获取数据库连接sqlSession
            SqlSession sqlSession = sqlSessionFactory.openSession();//默认不提交事务
            //5.获取mapper映射接口
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //6.传递参数
            int i = mapper.updateUserPwd("003", "123");
            //打印结果
            System.out.println(i);
    }
}

五,开启事务

注意点:myabtis默认开启事务,但默认不提交事务

(1)事务提交:只有提交了才能对数据库进行操作!!!

(2)何时用到提交事务?

        查询操作:不需要使用事务

        数据更新:增删改操作就需要使用事务提交对数据进行更新!

(3)事务开启:手动/自动

手动:添加一个sqlSession.commit();//提交事务

自动: 在第四点中赋值为true

六,运行结果

  • 32
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值