• mybatis单框架实现数据库新增、删除、修改


    mybatis单框架实现数据库新增、删除、修改

    1 准备工作

    1.1 导入依赖

    <dependencies>
            <dependency>
                <groupId>org.mybatisgroupId>
                <artifactId>mybatisartifactId>
                <version>3.5.9version>
            dependency>
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>8.0.29version>
            dependency>
            
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
                <version>1.18.24version>
            dependency>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.13.2version>
                
                <scope>testscope>
            dependency>
            
            <dependency>
                <groupId>log4jgroupId>
                <artifactId>log4jartifactId>
                <version>1.2.17version>
            dependency>
        dependencies>
    
    • 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

    1.2 配置java文件夹和resource资源文件夹都能输出到target目录中

     <build>
            
            <resources>
                <resource>
                    <directory>src/main/javadirectory>
                    <includes>
                        
                        <include>**/**include>
                    includes>
                resource>
                <resource>
                    <directory>src/main/resourcesdirectory>
                    <includes>
                        
                        <include>**/**include>
                    includes>
                resource>
            resources>
        build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    1.3 创建需要查询的实体类(全部引用数据类型)

    package entity;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    //属性必须是引用数据类型 数据库Null值 动态sql都是判断属性是否为空
    public class Emp {
        private Integer empno;
        private String ename;
        private String job;
        private Integer mgr;
        private String hiredate;
        private Double sal;
        private Double comm;
        private Integer deptno;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    1.4 在resource资源文件夹下面创建jdbc.properties文件

    # key-value 形式的文件 笔者使用的是mysql8
    jdbc.driver=com.mysql.cj.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3306/数据库名称
    jdbc.username=账户
    jdbc.password=密码
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.5 在resource资源文件夹下创建log4j.properties文件

    #代表root节点整个工程下所有输出日志的地方配置的输出的级别和输出的位置。
    log4j.rootLogger=DEBUG,Console,D
    #代表配置控制台的类。
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    log4j.logger.org.apache=INFO
    
    log4j.logger.java.sql.ResultSet=INFO
    log4j.logger.java.sql.Connection=DEBUG  
    log4j.logger.java.sql.Statement=DEBUG  
    log4j.logger.java.sql.PreparedStatement=DEBUG
    ### 输出到日志文件 ###
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.D.File = logs/mybatis.log
    log4j.appender.D.Append = true
    log4j.appender.D.Threshold = DEBUG
    log4j.appender.D.layout = org.apache.log4j.PatternLayout
    log4j.appender.D.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}  [ %t\:%r ] - [ %p ]  %m%n
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    1.6 在resource资源文件夹下面创建mybatis-config.xml文件

    
    DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        
        <properties resource="jdbc.properties">properties>
        
        <typeAliases>
            <package name="entity"/>
        typeAliases>
        
        <environments default="mysql">
            
            <environment id="mysql">
                
                <transactionManager type="JDBC"/>
                
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.username}"/>
                    <property name="password" value="${jdbc.password}"/>
                dataSource>
            environment>
        environments>
        
        <mappers>
        
            
            <package name="mapper"/>
        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
    注意: mybatis-config.xml文件中导入jdbc.properties文件的指令
    
    <properties resource="jdbc.properties">properties>
    
    
    • 1
    • 2
    • 3

    1.7 创建SqlSessionFactoryFactory工具类

    package util;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import java.io.InputStream;
    
    public class SqlSessionFactoryUtil {
        /*加载主配置文件*/
        private static String resource = "mybatis-config.xml";
        /*定义在外面*/
        private static SqlSessionFactory sf=null;
        static {
            /*加载主配置文件 得到SqlSessionFactory对象
            * 该对象是一个连接工厂对象
            * */
            try {
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sf = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static SqlSessionFactory sf(){
           return sf;
        }
    
    }
    
    • 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

    1.8 创建EmpMapper接口和EmpMapper.xml文件

    在这里插入图片描述

    1.9 主配置文件引入其他配置文件(扫描该配置文件的根目录)

    
    <mappers>
        <package name="mapper"/>
    mappers>
    
    • 1
    • 2
    • 3
    • 4

    2 新增insert

    2.1 在EmpMapper接口中的方法名

    int add(Emp e);
    
    • 1

    2.2 在EmpMapper.xml中准备的sql语句

       
        <insert id="add" useGeneratedKeys="true" keyProperty="empno">
            insert into emp values(null,#{ename},#{job},#{mgr},#{hiredate},#{sal},#{comm},#{deptno})
        insert>
    
    • 1
    • 2
    • 3
    • 4

    2.3 在test文件夹下写的测试代码

    @org.junit.Test
        public void t3(){
        //连接工厂
        SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
        /*打开一个连接对象 默认是自动提交 类似与connection 它的方法很难用不用*/
        SqlSession sqlSession = sf.openSession();
        //调用mapper中的sql 参数写命名空间.id
        /*调用自己的mapper 后面写接口.class*/
        EmpMapper em = sqlSession.getMapper(EmpMapper.class);
        Emp emp=new Emp(null,"小王","经理",1234,null,5000D,null,10);
        /*点击这个后就提交了*/
        em.add(emp);
        System.out.println("添加后:"+emp);
        sqlSession.commit();
        sqlSession.close();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.4 新增结果

    2.4.1 添加之前 emp表截图

    在这里插入图片描述

    2.4.2 运行截图

    在这里插入图片描述

    2.4.3 添加之后emp表截图

    在这里插入图片描述

    2.5 知识点总结

    注意:新增时若某一字段设置了自动增长,那么插入的是null值的,得到的结果就算最新的自动增长的那个数字
    设置了useGeneratedKeys="true" keyProperty="empno"就会自动回填到你填写的参数中
    另外你传入的是实参是对象,那么可以通过#{}的方式去获取实参里面的每一个属性值
    
    • 1
    • 2
    • 3

    3 删除delete

    3.1 在EmpMapper接口中的方法名

    int delete(int id);
    
    • 1

    3.2 在EmpMapper.xml中准备的sql语句

    
    <insert id="delete">
        delete from emp WHERE empno=#{id}
    insert>
    
    • 1
    • 2
    • 3
    • 4

    3.3 在test文件夹下写的测试代码

    public void t4(){
        //连接工厂
        SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
        /*打开一个连接对象 默认是自动提交 类似与connection 它的方法很难用不用*/
        SqlSession sqlSession = sf.openSession();
        //调用mapper中的sql 参数写命名空间.id
        /*调用自己的mapper 后面写接口.class*/
        EmpMapper em = sqlSession.getMapper(EmpMapper.class);
        /*点击这个后就提交了*/
        em.delete(8889);
        sqlSession.commit();
        sqlSession.close();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3.4 删除结果

    3.4.1 删除之前

    在这里插入图片描述

    3.4.2 运行截图

    在这里插入图片描述

    3.4.2 删除之后

    在这里插入图片描述

    3.5 知识点总结

     sqlSession.commit();这是设置了该事务提交,因为transactionManager type="JDBC"是默认是手动提交的
     不写这句话的话,数据库是不会产生任何变化的
    
    • 1
    • 2

    4 修改update

    4.1 在EmpMapper接口中的方法名

     int update(Emp e);
    
    • 1

    4.2 在EmpMapper.xml中准备的sql语句

    
        <update id="update">
            update emp set ename=#{ename},job=#{job},mgr=#{mgr},hiredate=#{hiredate},sal=#{sal},
            comm=#{comm},deptno=#{deptno}
             where empno=#{empno}
        update>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.3 在test文件夹下写的测试代码

     /*这个是修改方法的sql*/
        @org.junit.Test
        public void t5(){
            //连接工厂
            SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
            /*打开一个连接对象 默认是自动提交 类似与connection 它的方法很难用不用*/
            SqlSession sqlSession = sf.openSession();
            //调用mapper中的sql 参数写命名空间.id
            /*调用自己的mapper 后面写接口.class*/
            EmpMapper em = sqlSession.getMapper(EmpMapper.class);
            /*点击这个后就提交了*/
            Emp emp=new Emp(8890,"张三","哈哈哈",1234,"2019-08-03",8888d,6666d,20);
            em.update(emp);
            sqlSession.commit();
            sqlSession.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4.4 修改结果

    4.4.1 修改之前

    在这里插入图片描述

    4.4.2 运行截图

    在这里插入图片描述

    4.4.2 修改之后

    在这里插入图片描述

    3.5 知识点总结

    若你传入的参数是实体类的对象,对应的xml文件中的update标签中可以通过#{实体类属性名}来获取里面的对应的值
    ${实体类属性名}也是可以获取的值,正如之前所提到的,这个因为安全性的问题,使用场景一般是模糊查找
    
    • 1
    • 2
  • 相关阅读:
    面试阿里被吊打,158天吃透这“16个”核心技术栈,拿到了25k
    [CC2642R1][VSCODE+Embedded IDE+Cortex-Debug] TI CC2642R1 快速搭建VsCode开发环境
    Ag44团簇以及衍生团簇(直径1-2nm)
    某金融企业核心存储POC测试及选型经验
    springboot中自定义JavaBean返回的json对象属性名称大写变小写问题
    Visual Studio使用——vs解决方案显示所有文件
    JS数组方法总结
    邀好友一起刷算法之合并两个有序链表
    简单实现,在nodejs中简单使用kafka
    GoLong的学习之路(十一)语法之标准库 fmt.Printf的使用
  • 原文地址:https://blog.csdn.net/SSS4362/article/details/127712240