JAVA--MyBatis的开发流程

        各位大家好,今天我给大家阐述一下MyBaits的开发流程,以及它的一些面试题,如有错误,请大家积极指正,下面我开始介绍一下MyBatis:

 MyBatis的简介:

  1. 是由半自动化的ORM实现
  2. 操作的是DAO层(数据访问层)
  3. 能够书写动态SQL
  4. 小巧灵活,简单易学

 MyBatis的开发流程:

  1. 通过Maven导入mybatis依赖

  2. 编写MyBatis核心配置文件(mybatis-config.xml)

  3. 创建实体类-POJO、编写UserMapper.java接口

  4. 创建DAO层(mapper )-SQL映射文件(UserMapper.xml)

  5. 创建工具类MybatisUtils.java

    ​ 读取核心配置文件mybatis-config.xml

    ​ 创建SqlSessionFactory对象

    ​ 创建getSqlSession方法

  6. 使用Junit进行测试

    ​ 创建SqlSession对象

    ​ 调用mapper文件进行数据操作

//1.通过Maven导入mybatis依赖

//通过这个maven仓库去找依赖,https://mvnrepository.com/

//三个依赖:mysql、mybatis、junit

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <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.29</version>
    </dependency>
    <!-- junit测试包 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
</dependencies>

//2.编写MyBatis核心配置文件

//mybatis-config.xml,官网提供的名字。

//在资源文件resources目录下,创建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">
<!--mybatis的核心配置文件-->
<configuration>
    <!--environments 数据库环境 1、开发环境  2、测试环境  3、生产环境-->
    <environments default="dev">
        <environment id="dev">
            <!--事务管理 采用JDBC的事务管理机制-->
            <transactionManager type="JDBC" />
            <!--数据源配置信息-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/news_db?useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments> 
    <!--映射器-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
    </mappers>
</configuration>
1.存数据时
数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。
2.取数据时
在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。

#### 3.创建实体类-POJO、创建Dao层,编写接口文件

实体类

package cn.hxzy.pojo;

public class User {
    private Integer userId;
    private String userName;
    private String userPwd;
    private Integer userGender;

    public User() {
    }

    public User(Integer userId, String userName, String userPwd, Integer userGender) {
        this.userId = userId;
        this.userName = userName;
        this.userPwd = userPwd;
        this.userGender = userGender;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPwd() {
        return userPwd;
    }

    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }

    public Integer getUserGender() {
        return userGender;
    }

    public void setUserGender(Integer userGender) {
        this.userGender = userGender;
    }
}
定义接口文件的后缀名为Mapper,UserMapper.java。
package cn.hxzy.dao;

import cn.hxzy.pojo.User;

import java.util.List;

/**
 * 用户的Mapper接口文件
 */
public interface UserMapper {
    /**
     * 查询全部用户信息
     * @return 用户集合
     */
    List<User> getUserList();
}

#### 4.编写-SQL映射文件

在resources资源目录下,创建一个专门用于mapper文件的管理目录,在mapper文件夹下,创建与接口文件保持一致的SQL映射文件

UserMapper.xml
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace-->
<mapper namespace="cn.hxzy.dao.UserMapper">
    <select id="getUserList" resultType="cn.hxzy.pojo.User">
        select * from user
    </select>
</mapper>
maven的强大体现在有个特性叫做依赖传递。

#### 5.创建工具类MybatisUtils.java

为了减少代码量,提高系统性能,把公共的操作封装在一起,方便代码的管理。
package cn.hxzy.utils;

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 {
    //静态的属性,是属于类级别
    public static SqlSessionFactory factory = null;

    static { //只在类加载的时候,执行一次
        String resource = "mybatis-config.xml";  //读取核心配置文件mybatis-config.xml
        InputStream is = null;
        try {
            is = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        factory = new SqlSessionFactoryBuilder().build(is); //创建SqlSessionFactory对象
    }

    public static SqlSession creatSqlSession() {//创建creatSqlSession方法
        return factory.openSession();
    }
}

#####6.代码测试
package cn.hxzy.dao;

import cn.hxzy.pojo.User;
import cn.hxzy.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserMapperTest1 {
    
    @Test
    public void getUserList() throws Exception{
        SqlSession sqlSession = MybatisUtils.creatSqlSession(); //创建SqlSession对象
        UserMapper userMapper =sqlSession.getMapper(UserMapper.class);//反射 调用mapper文件进行数据操作
        List<User> userList = userMapper.getUserList();
        for (User user:userList) {
            System.out.println(user.getUserId()+"=="+user.getUserName());
        }
        sqlSession.close();
    }

    @Test
    public void getUser(){
        SqlSession sqlSession = MybatisUtils.creatSqlSession(); //创建SqlSession对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//调用mapper文件进行数据操作
        User user = userMapper.getUser(12);
        System.out.println(user.getUserId()+"==="+user.getUserName());
        sqlSession.close();
    }
    
}

 MyBatis的相关面试题(3道):

1、什么是Mybatis?

        MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis可以通过XML、注解来配置映射信息,将java对象映射到数据库,或将数据库信息映射到java中。

        MyBatis同时也是半自动ORM映射工具,在查询关联对象或关联集合对象时,需要手动编写SQL语句来完成。

2、MyBatis的优缺点?

优点:

与传统数据库相比,半自动ORM优点:
  • 基于SQL语句编程,相对灵活
  • 封装在配置文件中,解除了SQL与程序代码的耦合(耦合度降低),便于管理,可以重复使用SQL
与JDBC相比:
  • 消除了JDBC大量冗余的代码,不需要手动连接
其他:
  • 提供了映射标签,支持对象与数据库的ORM关系映射,支持对象关系间组件的维护
  • 能与Spring有很好的集成

缺点:

  • SQL语句 的编写工作量较大,对开发人员编写SQL语句的功底有一定要求
  • SQL语句依赖与数据库,导致数据库移植性差,不能随意更换数据库

#{}与${}有什么区别:

  • #{}是占位符,预编译处理;${}是拼接符,字符串替换,没有预编译处理
  • #{}可以有效的防止SQL注入,提高代码的安全性;${}不能防止SQL注入
  • #{}的变量替换在DBMS中;${}的变量替换在DBMS外

我今天分享的内容结束,欢迎大家来提提建议。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

越过难题

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

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

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

打赏作者

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

抵扣说明:

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

余额充值