IDEA创建mybatisDemo,并实现简单的CRUD

Mybatis 是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。在Java或者Java Web项目中,添加Mybatis必须的核心包,就能对数据表进行增删改查操作了。下面以MySQL数据库oa中的数据表userinfo为例,使用Mybatis实现数据的增删改查。

准备工作

为了方便,我是用IDEA+Maven来解决项目的包管理工作,IDEA配置Maven的方法,参考链接,本Demo使用的开发版本如下:

  • IDE:IntelliJ IDEA 2019.3.1 x64
  • Maven: apache-maven-3.3.9

1、新建项目

File->new->project,选择左侧的maven,设置项目的project SDk:jdk 1.8,勾选Create from archetype,在列表中勾选maven-archetype-quickstart

IDEA创建mybatisDemo,并实现简单的CRUD_第1张图片

然后,填写项目名mybatisDemo,项目位置,配置Maven(此处的User settings file 和 local repository均勾选Override),finish创建项目,初始化目录结构如下图a,完整运行的项目目录结构如下图b

IDEA创建mybatisDemo,并实现简单的CRUD_第2张图片

2、编写项目代码

编写配置文件pom.xml,添加依赖项如下,然后IDE出现提示信息,选择 reimport changes即可,随后Maven开始下载需要的包到本项目中。
本项目使用的jdbc驱动版本为5.1.18,使用较新的版本,需要注意后面mysql.properties配置文件的编写,两者有区别。

 
        
            org.mybatis
            mybatis
            3.4.6
        

        
            mysql
            mysql-connector-java
            5.1.18
        
        
            junit
            junit
            4.12
        
        
            log4j
            log4j
            1.2.17
        
        
            org.slf4j
            slf4j-log4j12
            1.7.25
        
    

编写实体类 UserInfo.java,同时在MySQL数据库中创建对应的数据表userinfo,如上图c

package org.example;

import java.io.Serializable;

public class UserInfo implements Serializable {
    private int id;
    private String username;
    private String password;

    public UserInfo(){}

    public UserInfo(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

在src/main目录下创建java的同级文件夹resource,并右键 Mark Directory as -> Sources Root,在resource下新建mapper包,新建SQL映射的UserInfo.xml文件




    
    

    
    

    
    
        insert into userinfo(id,username,password) values(#{id},#{username},#{password})
    

    
    
        update userinfo set password = #{password} where id = #{id}
    

    
    
        delete from userinfo where id = #{id}
    

在resource文件夹下,新建两个属性文件:mysql.propertieslog4j.properties,用于配置MySQL和log4j

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/oa
username=root
password=8636hyh
### 设置Logger输出级别和输出目的地 ###
log4j.rootLogger=debug,stdout,logfile

### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

### 把日志信息输出到文件:jbit.log ###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=jbit.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n

### 显示SQL语句部分
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

最后,添加mybatis的核心配置文件mybatis-config.xml




    
    
    
    
        
    
    
    
        
        
            
            
            
            
            
            
            
            
                
                
                
                
            
        
    
    
    
        
    
    

3、编写测试文件

编写测试类AppTest.java,使用单元测试来逐项检查“增删改查”功能,只需要在各方法名上右键运行,即可进行测试;
其中注解的含义:在测试类中,每一个用@Test注解修饰的方法称为测试方法,它们的调用顺序为@Before->@Test->@After。因此,每次执行一个单元测试方法,都会先运行init()方法初始化,建立数据库会话,然后运行测试函数,最后调用destroy()释放资源。

package org.example;

import static org.junit.Assert.assertTrue;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLOutput;
import java.util.List;

/**
 * Unit test for simple App.
 */
public class AppTest {
    /**
     * Rigorous Test :-)
     */
    private SqlSessionFactory sqlSessionFactory;
    private SqlSession sqlSession;

    @Before
    public void init() {
        //读取mybatis配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream;
        try {
            //得到配置文件流
            inputStream = Resources.getResourceAsStream(resource);
            //根据配置文件信息,创建会话工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //通过工厂得到Sqlsession
            sqlSession = sqlSessionFactory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //根据id查询用户
    @Test
    public void testFindUserInfoById() {
        //通过sqlSession执行映射文件中定义的SQL,并返回映射结果
        UserInfo ui = sqlSession.selectOne("findUserInfoById", 101);
        //打印输出结果
        System.out.println(ui.toString());
    }

    //根据用户名模糊查询用户
    @Test
    public void testFindUserInfoByUserName() {
        //执行映射文件中定义的SQL,并返回结果集
        List uis = sqlSession.selectList("findUserInfoByUserName", "ang");
        for (UserInfo ui : uis) {
            System.out.println(ui);
        }
    }

    //添加用户
    @Test
    public void testAddUserInfo() {
        //创建UserInfo对象ui
        UserInfo ui = new UserInfo(104, "xia", "12334");
        int res = sqlSession.insert("addUserInfo", ui);
        if (res > 0) {
            System.out.println("insert successfully!");
        } else {
            System.out.println("insert failed!");
        }
    }

    //修改用户
    @Test
    public void testUpdateUserInfo(){
        //加载编号为103的用户
        UserInfo ui = sqlSession.selectOne("findUserInfoById",103);
        ui.setPassword("13345");
        int res = sqlSession.update("updateUserInfo",ui);
        if(res > 0){
            System.out.println("update successfully!");
        }else{
            System.out.println("update failed!");
        }
    }

    @Test
    public void testDeleteUserInfo(){
        //执行sqlSession的delete方法,返回结果受影响的行数
        int res = sqlSession.delete("deleteUserInfo",102);
        if(res > 0){
            System.out.println("delete successfully!");
        }else{
            System.out.println("delete failed!");
        }
    }

    @After
    public void destroy() {
        //提交事务
        sqlSession.commit();
        //关闭sqlSession
        sqlSession.close();
    }
}

4、控制台输出验证

使用用户名模糊查询用户的结果,结果正确。

IDEA创建mybatisDemo,并实现简单的CRUD_第3张图片

5、Demo源码https://github.com/sdifv/JavaWebDemo/tree/master/SSM/mybatisDemo

你可能感兴趣的:(IDEA创建mybatisDemo,并实现简单的CRUD)