MyBatis01:第一个程序

在这里插入图片描述
转载自:狂神说MyBatis01:第一个程序

起意

最近在学习MyBatis,看了狂神的教程,感觉简单易懂。
这篇文章在狂神的文章上,加了一点自己的认识。
希望之后可以慢慢养成写博客的习惯。

什么是MyBatis?

  • MyBatis 是一款优秀的持久层框架

  • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程(和jdbc比较)

  • MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。

  • MyBatis 本是apache的一个开源项目ibatis, 2010年这个项目由apache 迁移到了google code,并且改名为MyBatis 。

  • 2013年11月迁移到Github .

  • Mybatis官方文档 : 官方文档(文档可以仔细看看)

  • GitHub : github

为什么用MyBatis?

  • Mybatis就是帮助程序猿将数据存入数据库中 , 和从数据库中取数据 .

  • 传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等… , 通过框架可以减少重复代码,提高开发效率 .

  • MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射

  • 所有的事情,不用Mybatis依旧可以做到,只是用了它,所有实现会更加简单!技术没有高低之分,只有使用这个技术的人有高低之别

  • MyBatis的优点

    • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件就可以了,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

    • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。

    • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

    • 提供xml标签,支持编写动态sql。

最重要的一点,使用的人多!公司需要!

MyBatis和JDBC的比较

MyBatis01:第一个程序_第1张图片
上面代码的问题总结:

1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。

解决方案:使用数据库连接池管理数据库连接。

2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。

解决方案:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。

3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。

解决方案:将sql语句及占位符号和参数全部配置在xml中。

4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。

解决方案:将查询的结果集,自动映射成java对象。

MyBatish和hibernate比较

  • hibernate:是一个标准ORM框架(对象关系映射),入门门槛较高的,不需要程序写sql,sql语句自动生成了,对sql语句进行优化、修改比较困难的。

    应用场景:

    适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。

  • mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。

    应用场景:

    适用与需求变化较多的项目,比如:互联网项目。

第一个MyBatis程序

  • 入门程序环境说明

    • jdk8
    • MySql 8.0.16
    • maven 3.6.3
    • IDEA
  • IDEA项目结构
    MyBatis01:第一个程序_第2张图片

  1. 数据库搭建
CREATE DATABASE `mybatis`;

USE `mybatis`;

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
`id` int(20) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert  into `user`(`id`,`name`,`pwd`) values (1,'狂神','123456'),(2,'张三','abcdef'),(3,'李四','987654');

2.导入MyBatis相关jar包

<dependency>
   <groupId>org.mybatisgroupId>
   <artifactId>mybatisartifactId>
   <version>3.5.2version>
dependency>
<dependency>
   <groupId>mysqlgroupId>
   <artifactId>mysql-connector-javaartifactId>
   <version>5.1.47version>
dependency>

3.编写MyBaits工具类—从 XML 中构建 SqlSessionFactory

  • 参考官方文档入门
package com.mao.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 {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //获取SqlSession连接
    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }

}

4.编写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>
    <!--核心配置文件-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/mao/dao/userMapper.xml"/>

    </mappers>

</configuration>

5.创建实体类

package com.mao.pojo;

public class User {
    private int id;
    private String name;
    private String pwd;

    public User() {
    }

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

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getPwd() {
        return pwd;
    }

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

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

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}

6.编写Mapper接口类

package com.mao.Dao;

import com.mao.pojo.User;
import org.apache.ibatis.annotations.Param;

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

public interface userMapper {
    //查询所有用户
    List<User> getUserList();
}

7.编写Mapper.xml配置文件



<mapper namespace="com.mao.Dao.userMapper">
    <select id="getUserList" resultType="com.mao.pojo.User">
        select * from mybatis.user;
    select>
mapper>

8。编写测试类

  • Junit测试包
package com.mao.Dao;

import com.mao.pojo.User;
import com.mao.utils.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 UserMapperTest {
    //查询所有用户
    @Test
    public void getUserList(){
        //第一步,获取SqlSesion对象
        SqlSession sqlSession = MybatisUtils.getSession();
        //第二步,执行SQL
        userMapper userDao = sqlSession.getMapper(userMapper.class);
        List<User> userList = userDao.getUserList();
        for(User user:userList){
            System.out.println(user);
        }
        //关闭sqlSession
        sqlSession.close();

    }
}

9.测试成功

问题说明

可能出现问题说明:Maven静态资源过滤问题

<resources>
   <resource>
       <directory>src/main/javadirectory>
       <includes>
           <include>**/*.propertiesinclude>
           <include>**/*.xmlinclude>
       includes>
       <filtering>falsefiltering>
   resource>
   <resource>
       <directory>src/main/resourcesdirectory>
       <includes>
           <include>**/*.propertiesinclude>
           <include>**/*.xmlinclude>
       includes>
       <filtering>falsefiltering>
   resource>
resources>

MyBatis使用步骤总结

  1. 导入jar包,配置pom.xml
  2. 配置mybatis-config.xml 核心配置文件 (1、数据源,2、外部的mapper)
  3. 编写MyBaits工具类—从 XML 中构建 SqlSessionFactory,SqlSession
  4. 创建实体类
  5. 编写Mapper接口类
  6. 编写Mapper.xml配置文件
  7. 使用,通过SqlSession操作数据库 CRUD
  8. 调用session.commit()提交事务(增删改)
  9. 调用session.close()关闭会话

你可能感兴趣的:(Spring系列)