• Mybatis方式完成CRUD操作


    Mybatis方式完成CRUD操作

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

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

    使用Mybatis的好处:

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

    1、java以Mybatis方式操作DB

    在这里插入图片描述

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

    在这里插入图片描述

    
    DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "https://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    
        
        <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&useUnicode=true&characterEncoding=UTF-8"/>
                    
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                dataSource>
            environment>
        environments>
    
        
        
        <mappers>
            <mapper resource="com/linghu/mapper/MonsterMapper.xml"/>
        mappers>
    
    
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

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

    Monstermapper.xml:

    
    DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.linghu.mapper.MonsterMapper">
    
    
    
    
    
            <insert id="addMonster" parameterType="com.linghu.entity.Monster">
                insert into `monster`
                (`age`,`birthday`,`email`,`gender`,`name`,`salary`)
    
    
                values(#{age},#{birthday},#{email},#{gender},#{name},#{salary})
            insert>
    
        <delete id="delMonster" parameterType="Integer">
            delete from `monster` where id=#{id};
        delete>
    
    
    
    
        <update id="updateMonster" parameterType="Monster">
            update `monster` set `age`=#{age},`birthday`=#{birthday},`email`=#{email},
            `gender`=#{gender},`name`=#{name},`salary`=#{salary}
            where id=#{id}
        update>
    
    
        <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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    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");
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114

    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();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    3、pom基础依赖

    
    <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.0modelVersion>
    
        <groupId>com.linghugroupId>
        <artifactId>Linghu_MybatisartifactId>
        <version>1.0-SNAPSHOTversion>
        <packaging>pompackaging>
    
        <modules>
    
            <module>mybatisqucikstartmodule>
        modules>
    
        <properties>
            <maven.compiler.source>8maven.compiler.source>
            <maven.compiler.target>8maven.compiler.target>
            <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        properties>
        
        <dependencies>
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>5.1.49version>
            dependency>
            <dependency>
                <groupId>org.mybatisgroupId>
                <artifactId>mybatisartifactId>
                <version>3.5.7version>
            dependency>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.12version>
            dependency>
        dependencies>
    
    
    
        <build>
            <resources>
                <resource>
                    <directory>src/main/javadirectory>
                    <includes>
                        <include>**/*.xmlinclude>
                    includes>
                resource>
                <resource>
                    <directory>src/main/resourcesdirectory>
                    <includes>
                        <include>**/*.xmlinclude>
                        <include>**/*.propertiesinclude>
                    includes>
                resource>
            resources>
        build>
    
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Java ~ Reference ~ WeakReference
    常见的面试算法题:阶乘、回文、斐波那契数列
    干了外包3个月,技术退步明显...
    搭建Flink集群、集群HA高可用以及配置历史服务器
    PHP MYSQLi OOP式准备好语句
    NodeJs 中 eval的替代函数
    README文档模板
    Java简历与面试
    如何说服技术老大用 Redis ?
    常见的浏览器跨域解决方法
  • 原文地址:https://blog.csdn.net/weixin_43891901/article/details/130508040