Mybatis方式完成CRUD操作

这篇具有很好参考价值的文章主要介绍了Mybatis方式完成CRUD操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mybatis方式完成CRUD操作

Java开发在以前做数据库连接的时候通过JDBC来完成,非常麻烦。

现在引入了MyBatis这个框架,Mybatis是简化数据库操作的持久层框架。

使用Mybatis的好处:

  • mybatis 可以将对数据表的操作(sql,方法)等等直接剥离,写到 xml 配置文件,实现和 java 代码的解耦
  • MyBatis 在 java 和 sql 之间提供更灵活的映射

1、java以Mybatis方式操作DB

Mybatis方式完成CRUD操作

1.1、配置数据源-创建 resources/mybatis-config.xml

Mybatis方式完成CRUD操作

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!--    配置mybatis自带的日志输出-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!--    配置类型别名-->
    <typeAliases>
        <typeAlias type="com.linghu.entity.Monster" alias="Monster"/>
    </typeAliases>

    <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://127.0.0.1:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <!--               数据库的用户名和密码-->
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--    这里设置我们需要管理的mapper.xml文件-->
    <!--    可以通过快捷键copy这个地址-->
    <mappers>
        <mapper resource="com/linghu/mapper/MonsterMapper.xml"/>
    </mappers>


</configuration>

1.2、创建java bean-Monster

创建bean的时候要对照自己设计的数据库表字段进行设计,要一一对应!

package com.linghu.entity;

import java.util.Date;

/**
 * @author 令狐荣豪
 * @version 1.0
 * Monster类和monster表有对应关系,字段要对应
 * 体现oop
 */
public class Monster {
    private Integer id;
    private Integer age;
    private String name;
    private String email;
    private Date birthday;
    private double salary;
    private Integer gender;

    public Monster() {
    }

    public Monster(Integer id, Integer age, String name, String email, Date birthday, double salary, Integer gender) {
        this.id = id;
        this.age = age;
        this.name = name;
        this.email = email;
        this.birthday = birthday;
        this.salary = salary;
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Monster{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", birthday=" + birthday +
                ", salary=" + salary +
                ", gender=" + gender +
                '}';
    }

    public Integer getId() {
        return id;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }
}

1.3、配置Mapper接口声明方法

package com.linghu.mapper;

import com.linghu.entity.Monster;

import java.util.List;

/**
 * @author 令狐荣豪
 * @version 1.0
 * 定义增删改查的接口方法
 */
public interface MonsterMapper {
//    添加monster
    public void addMonster(Monster monster);

    //根据id删除一个Monster
    public void delMonster(Integer id);
    //修改 Monster
    public void updateMonster(Monster monster);
    //查询-根据 id
    public Monster getMonsterById(Integer id);

    //查询所有的 Monster
    public List<Monster> findAllMonster();
}

1.4、配置xxMapper,完成SQL配置,实现CRUD操作

Monstermapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.linghu.mapper.MonsterMapper">

<!--    <select id="selectBlog" resultType="Blog">-->
<!--        select * from Blog where id = #{id}-->
<!--    </select>-->
<!--    private Integer id;
    private Integer age;
    private String name;
    private String email;
    private Date birthday;
    private double salary;
    private Integer gender;-->
        <insert id="addMonster" parameterType="com.linghu.entity.Monster">
            insert into `monster`
            (`age`,`birthday`,`email`,`gender`,`name`,`salary`)
<!--            values(10,null,'linghu@qq.com',1,'kate',1000),修改成活数据-->
<!--            下面的名称对应的Monster对象的属性名-->
            values(#{age},#{birthday},#{email},#{gender},#{name},#{salary})
        </insert>

    <delete id="delMonster" parameterType="Integer">
        delete from `monster` where id=#{id};
    </delete>

<!--    这里的入参类型最好不要简写!-->
<!--    配置类型别名后这里可以简写Monster-->
<!--    <update id="updateMonster" parameterType="com.linghu.entity.Monster">-->
    <update id="updateMonster" parameterType="Monster">
        update `monster` set `age`=#{age},`birthday`=#{birthday},`email`=#{email},
        `gender`=#{gender},`name`=#{name},`salary`=#{salary}
        where id=#{id}
    </update>

<!--     resultType是个别名-->
    <select id="getMonsterById" parameterType="Integer" resultType="Monster">
        select * from `monster` where id=#{id};
    </select>

<!--    查询全部结果-->
    <select id="findAllMonster" resultType="Monster">
        select * from `monster`;
    </select>

</mapper>

1.5、Test测试

package com.linghu.mapper;

import com.linghu.entity.Monster;
import com.linghu.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;

import java.util.Date;
import java.util.List;

/**
 * @author 令狐荣豪
 * @version 1.0
 */
public class MonsterMapperTest {
    private SqlSession sqlSession;
    private MonsterMapper monsterMapper;

    @Before
    public void init(){
        //通过SqlSessionFactory获取一个SqlSession会话
        sqlSession= MyBatisUtils.getSqlSession();
        //获取MonsterMapper接口对象,该对象实现了MonsterMapper
        monsterMapper=sqlSession.getMapper(MonsterMapper.class);
        System.out.println(monsterMapper.getClass());
    }

//    @Test
//    public void t1(){
//        System.out.println("t1()。。。");
//    }

    @Test
    public void addMonster(){
        for (int i=0;i<3;i++){
            Monster monster = new Monster();
            monster.setAge(10+i);
            monster.setBirthday(new Date());
            monster.setEmail("lignhu@qq.com");
            monster.setGender(1);
            monster.setName("松鼠精"+i);
            monster.setSalary(1000+i*10);
//            id不用设置
            monsterMapper.addMonster(monster);
            System.out.println("添加对象-"+monster);
        }
        //如果是增删改,需要提交事务
        if (sqlSession!=null){
            sqlSession.commit();
            sqlSession.close();
        }
        System.out.println("保存成功···");
    }

    @Test
    public void delMonster(){
        monsterMapper.delMonster(2);

        //如果是增删改,需要提交事务
        if (sqlSession!=null){
            sqlSession.commit();
            sqlSession.close();
        }
        System.out.println("删除成功···");
    }

    @Test
    public void updateMonster(){
        Monster monster = new Monster();
        monster.setAge(200);
        monster.setBirthday(new Date());
        monster.setEmail("hspedu@sohu.com");
        monster.setGender(2);
        monster.setName("狐狸精");
        monster.setSalary(9234.89);
        monster.setId(4);
        monsterMapper.updateMonster(monster);
        if (sqlSession != null) {
            sqlSession.commit();
            sqlSession.close();
        }
        System.out.println("修改 ok");
    }

    @Test
    public void getMonsterById(){
//        Monster monster = new Monster();
        Monster monster=monsterMapper.getMonsterById(6);
        System.out.println("monster="+monster);


        if (sqlSession != null) {
            sqlSession.commit();
            sqlSession.close();
        }
        System.out.println("查询 ok");
    }

    @Test
    public void findAllMonster(){ //查询全部结果
        List<Monster> allMonster = monsterMapper.findAllMonster();
        for (Monster monster :allMonster) {
            System.out.println(monster);
        }

        if (sqlSession != null) {
            sqlSession.close();
        }
        System.out.println("查询 ok");

    }
}

2、需要的Utils工具类

工具类MyBatisUtils.java

package com.linghu.util;

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 javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;

/**
 * @author 令狐荣豪
 * @version 1.0
 * 这是一个工具类,可以得到Sqlsession会话,这个会话提供了执行SQL命令的方法CRUD
 */
public class MyBatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

    static {//静态代码块-初始化sqlSessionFactory对象
        try {
            /**
             * 指定资源文件
             */
            String resource="mybatis-config.xml";
            //指定资源文件流
            InputStream inputStream = Resources.getResourceAsStream(resource);
            //获取SqlSession实例
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 返回一个SQLSession会话,这个会话提供了执行SQL命令的方法CRUD
     * @return
     */
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

3、pom基础依赖

<?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.linghu</groupId>
    <artifactId>Linghu_Mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
<!--        这里可以看到父项目下有哪些子项目-->
        <module>mybatisqucikstart</module>
    </modules>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <!-- 导入依赖 -->
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

<!--    配置resources-->
<!--    配置目的:将src/main/java目录和子目录和src/main/resources目录和子目录的
资源文件xml和properties在build项目时,导出到对应的target目录下
-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>

</project>

4、数据库建表操作

CREATE DATABASE `mybatis`
CREATE TABLE `monster` (
	`id` INT NOT NULL AUTO_INCREMENT, 
    `age` INT NOT NULL, 
    `birthday` DATE DEFAULT NULL, 
    `email` VARCHAR(255) NOT NULL , 
    `gender` TINYINT NOT NULL, 
    `name` VARCHAR(255) NOT NULL, 
    `salary` DOUBLE NOT NULL,
	PRIMARY KEY (`id`)
) CHARSET=utf8

Mybatis方式完成CRUD操作
Mybatis方式完成CRUD操作文章来源地址https://www.toymoban.com/news/detail-449901.html

到了这里,关于Mybatis方式完成CRUD操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis案例 | 使用映射配置文件实现CRUD操作——动态SQL优化条件查询

    本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥JavaWeb Java入门篇: 🔥Java基础学习篇 Java进阶学习篇(持续更新中):🔑Java进阶学习篇 本系列文章会将讲述有关

    2024年02月02日
    浏览(66)
  • 4、Elasticsearch7.6.1 Java api操作ES(CRUD、两种分页方式、高亮显示)和Elasticsearch SQL详细示例

    1、介绍lucene的功能以及建立索引、搜索单词、搜索词语和搜索句子四个示例实现 2、Elasticsearch7.6.1基本介绍、2种部署方式及验证、head插件安装、分词器安装及验证 3、Elasticsearch7.6.1信息搜索示例(索引操作、数据操作-添加、删除、导入等、数据搜索及分页) 4、Elasticsearch7

    2024年02月16日
    浏览(66)
  • SpringMVC的整合完成CRUD

    目录 一.前期准备 1.1.相关依赖  1.2.配置文件 1.2.1.generatorConfig.xml  1.2.2.jdbc.properties 1.2.3. log4j2.xml 1.2.4.spring-mvc.xml 1.2.5.spring-mybatis.xml 1.2.6. spring-context.xml 二.后端代码 三.前台代码  四.功能测试 最后实战SpringMVC之CRUD就到这里,祝大家在敲代码的路上一路通畅! 感谢大家的观看

    2024年02月09日
    浏览(31)
  • myBatis-CRUD

    上接入门案例(看之前的《mybatis基本介绍及入门案例》篇)

    2024年02月04日
    浏览(36)
  • Django 4.2.7 ORM 连接MySQLServer 完成单表CRUD

    Django 模型使用自带的 ORM。 对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。 ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。 ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化

    2024年02月02日
    浏览(46)
  • MyBatis入门配置及CRUD实现

    目录 一、MyBatis简介 1. 什么是 MyBatis ?  2. MyBatis的特性 3. 什么是持久层框架? 二、MyBatis环境配置 2.1 创建maven工程 2.2 导入相关pom依赖 2.3 导入jdbc配置文件 2.4 Mybatis相关插件安装 3.5 Mybatis-cfg.xml 核心配置 2.6 引入Log4j2日志文件 2.7 generatorConfig.xml 配置代码生成器 三、MyBatis实现

    2024年02月09日
    浏览(38)
  • Mybatis-Plus CRUD

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 通用 Service CRUD 封装 IService 接口,进一步封装 CRUD 采用 get 查询 、 remove 删除 、 list 查询集合 、 page 分页 的前缀命名方式区分 Mapper 层避免混淆 泛型 T 为任意实体对象 如果自定义通用 Service 方法,可以创建自己的 I

    2024年02月08日
    浏览(30)
  • mybatis-plus update更新操作(三种方式)

    MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 愿景 我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。 方式一(UpdateWrapper 条件构造器) 方

    2024年02月11日
    浏览(49)
  • 第一个mybatis程序,实现增删改查CRUD

    mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache迁移到了googlecode,并且改名为MyBatis,2013年11月迁移到Github。 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis 可

    2024年02月02日
    浏览(31)
  • Springboot整合mybatis实现增删改查(crud)

    今天我们来学习一个Springboot案例!! 那么什么是SpringBoot技术呢? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 Spring Boot致力于在蓬

    2024年01月22日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包