IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 使用Mybatis框架实现CRUD(基础必备) -> 正文阅读

[大数据]使用Mybatis框架实现CRUD(基础必备)

前言

1.分析JDBC操作问题:

public class JdbcDome01 {
    public static void main(String[] args) throws Exception {
        //1导入驱动jar包有两步
        //1.复制jar包到libs目录下2.右键add as library

        //2注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //3获取数据库连接对象
        Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db2","root","******");

        //4定义sql语句
        String sql="update student set age=101 where stu_id=1";

        //5获取执行sql的对象Statement
         Statement stmt=conn.createStatement();

         //6执行sql
        int age = stmt.executeUpdate(sql);

        //7处理结果
        System.out.println(age);

        //8释放资源
        stmt.close();
        conn.close();
    }
}

2.JDBC问题总结:

原始jdbc开发存在的问题如下:
1、 数据库连接创建、释放频繁造成系统资源浪费,从而影响系统性能。
2、 Sql语句在代码中硬编码,造成代码不易维护,实际应用中sql变化的可能较大,sql变动需要改变
java代码。
3、 使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能
多也可能少,修改sql还要修改代码,系统不易维护。
4、 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据 库
记录封装成pojo对象解析比较方便。

一、Mybatis相关概念

1.1 什么是Mybatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

1.2 对象/关系数据库映射(ORM)

ORM全称Object/Relation Mapping:表示对象-关系映射的缩写
ORM完成面向对象的编程语言到关系数据库的映射。当ORM框架完成映射后,程序员既可以利用面向
对象程序设计语言的简单易用性,又可以利用关系数据库的技术优势。ORM把关系数据库包装成面向对
象的模型。ORM框架是面向对象设计语言与关系数据库发展不同步时的中间解决方案。采用ORM框架
后,应用程序不再直接访问底层数据库,而是以面向对象的放松来操作持久化对象,而ORM框架则将这
些面向对象的操作转换成底层SQL操作。ORM框架实现的效果:把对持久化对象的保存、修改、删除 等
操作,转换为对数据库的操作

1.3 Mybatis历史

原是apache的一个开源项目iBatis, 2010年6月这个项目由apache software foundation 迁移到了
google code,随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis ,代码于2013年11
月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框
架包括SQL Maps和Data Access Objects(DAO)。

1.4 Mybatis优势

Mybatis是一个半自动化的持久层框架,对开发人员开说,核心sql还是需要自己进行优化,sql和java编
码进行分离,功能边界清晰,一个专注业务,一个专注数据。
分析图示如下:
在这里插入图片描述

二、开发步骤

①添加MyBatis的坐标
②创建user数据表
③编写User实体类
④编写映射文件UserMapper.xml
⑤编写核心文件SqlMapConfig.xml
⑥编写测试类

2.1 添加MyBatis的坐标

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.kuang</groupId>
    <artifactId>mybatis-Study</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
  
    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                    <includes>
                       <include> **/*.properties</include>
                       <include>**/*.xml</include>
                    </includes>
                    <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include> **/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>

2.2 创建user数据表

CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE user(
 id INT(20) NOT NULL,
 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')

2.3 编写User实体类

/**
 * @Author huang.bX
 * @Date 2021/4/21
 */
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 void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getPwd() {
        return pwd;
    }

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

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

2.4 编写Mybatis工具类

/**
 * @Author huang.bX
 * @Date 2021/4/21
 */
public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;
    static{
        try {
            //访问mybatis 读取User数据
            //定义mybatis主配置文件名称
            String resource = "mybatis-config.xml";
            //读取这个resource表示的文件
            InputStream inputStream = Resources.getResourceAsStream(resource);

            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     *既然有了SqlSessionFactory顾名思义,我们可以从其中获得SqlSession的实例了
     * Session完全包含了面向数据库执行sql命令的所有方法
     */
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

2.5 编写dao层接口

/**
 * @author huang.bX
 * @Date  2021/4/21
 */
public interface UserMapper{
    /**
     *查询全部用户
     */
    List<User> getUserList();


    /**
     *根据id查询用户 传递参数id
     */
    User getUserById(int id);

    User getUserById2(Map<String,Object> map);

    /**
     *insert一个用户
     */
    int addUser(User user);

    void addUser2(Map<String,Object> map);

    /**
     *修改用户
     */
    void updateUser(User user);

    /**
     *删除用户
     */
    void deleteUser(int id);

    List<User> getUserLike(String value);
}

2.6 编写映射文件UserMapper.xml

<?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.kuang.dao.UserMapper">
<!-- id就是UserDao中的方法名  resultType sql语句的返回值类型  parameterType参数类型-->
    <select id="getUserList" resultType="com.kuang.pojo.User">
        select *from mybatis.user;
    </select>
    
    <select id="getUserById" parameterType="int" resultType="com.kuang.pojo.User">
        select *from mybatis.user where id = #{id};
    </select>

    <select id="getUserById2" parameterType="map" resultType="com.kuang.pojo.User">
        select *from mybatis.user where id = #{id} and name #{name};
    </select>

    <update id="updateUser" parameterType="com.kuang.pojo.User" >
        update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id};

    </update>

    <insert id="addUser" parameterType="com.kuang.pojo.User">
       insert into mybatis.user (id,name,pwd) values(#{id},#{name},#{pwd});
    </insert>

    <insert id="addUser2" parameterType="map">
        insert into mybatis.user (id,name,pwd) values(#{userid},#{username},#{password});
    </insert>

    <delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id=#{id};
    </delete>

    <select id="getUserLike" resultType="com.kuang.pojo.User">
        select *from mybatis.user where name like "%"#{value}"%";
    </select>
</mapper>

2.5 编写核心文件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">

<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&amp;useUnicode=false&amp;
                characterEncoding=utf8;serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="1264595604hbx"/>
            </dataSource>
        </environment>
    </environments>
<!--    每一个Mapper.xml都需要在mybatis核心配置文件中注册-->
    <mappers>
<!--    resource要用 /-->
        <mapper resource="com/kuang/dao/UserMapper.xml"/>
    </mappers>
</configuration>

2.6 编写测试类

public class UserDaoTest {

    @Test
    public void test() {
        //获得SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try{
            //方式一:获得getMapper
            UserMapper userDao = sqlSession.getMapper(UserMapper.class);
            List<User> userList = userDao.getUserList();
            //2
            // List<User> userList = sqlSession.selectList("com.kuang.dao.UserMapper.getUserList");
            for (User user : userList) {
                System.out.println(user);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //关闭sql
            sqlSession.close();
        }
    }

    @Test
    public void getUserById(){
        //获得SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //UserMapper mapper = new UserMapperImpl();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        User user = mapper.getUserById(3);
        System.out.println(user);
        //关闭sql
        sqlSession.close();
    }
    //增删改需要提交事务

    @Test
    public void getUserById2(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String,Object> map= new HashMap<String,Object>();

        map.put("hello",1);
        sqlSession.close();
    }

    @Test
    public void addUser(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        int num = mapper.addUser(new User(12, "小b崽子","555555"));
        if(num>0){
            System.out.println("插入成功!");
       }
        //增删改需要提交事务
        sqlSession.commit();
        //关闭sql
        sqlSession.close();


    }
    @Test
    public void addUser2(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        Map<String,Object> map = new HashMap<String,Object>();
        map.put("userid",66);
        map.put("username","hello2");
        map.put("password",5555555);
        mapper.addUser2(map);
        sqlSession.close();
        System.out.println("添加成功");
    }
    @Test
    public void updateUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //  SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

      mapper.updateUser(new User(10,"宝贝","9999999"));

        //提交事务
        sqlSession.commit();
        //关闭sql
        sqlSession.close();
    }
    @Test
    public void deleteUser(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        mapper.deleteUser(11);

        //提交事务
        sqlSession.commit();
        //关闭sql
        sqlSession.close();
    }

    @Test
    public void getUserLike(){
        //获得SqlSession对象
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        List<User> userList = mapper.getUserLike("J");

        for (User user : userList) {
            System.out.println(user);
        }
        //关闭sql
        sqlSession.close();
    }
}

查询全部用户:
在这里插入图片描述
通过Id查询用户:
在这里插入图片描述
增加用户:
在这里插入图片描述
在这里插入图片描述
更新用户信息:
在这里插入图片描述
在这里插入图片描述
通过Id删除用户:
在这里插入图片描述
在这里插入图片描述
模糊查询:
在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 21:14:25  更:2022-02-14 21:14:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:49:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码