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

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

2、编写项目代码
编写配置文件pom.xml,添加依赖项如下,然后IDE出现提示信息,选择 reimport changes即可,随后Maven开始下载需要的包到本项目中。
本项目使用的jdbc驱动版本为5.1.18,使用较新的版本,需要注意后面mysql.properties配置文件的编写,两者有区别。
 <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
    </dependencies>
编写实体类 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文件
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace设置格式:包名+SQL映射文件名-->
<mapper namespace="com.mybatis.mapper.UserInfoMapper">
    <!--根据用户ID查询用户信息-->
    <select id="findUserInfoById" parameterType="int" resultType="UserInfo">
        select * from userinfo where id = #{id}
    </select>
    <!--根据用户名模糊查询用户-->
    <select id="findUserInfoByUserName" parameterType="String" resultType="UserInfo">
        select * from userinfo where username like CONCAT(CONCAT('%',#{username}),'%')
    </select>
    <!--添加用户-->
    <insert id="addUserInfo" parameterType="UserInfo">
        insert into userinfo(id,username,password) values(#{id},#{username},#{password})
    </insert>
    <!--修改用户信息-->
    <update id="updateUserInfo" parameterType="UserInfo">
        update userinfo set password = #{password} where id = #{id}
    </update>
    <!--删除用户信息-->
    <delete id="deleteUserInfo" parameterType="int">
        delete from userinfo where id = #{id}
    </delete>
</mapper>
在resource文件夹下,新建两个属性文件:mysql.properties、log4j.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
<?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>
    <!--加载文件属性-->
    <properties resource="mysql.properties"></properties>
    <!--给包中的类注册别名-->
    <typeAliases>
        <typeAlias type="org.example.UserInfo" alias="UserInfo"/>
    </typeAliases>
    <!--配置环境-->
    <environments default="development">
        <!--配置一个id为development的环境-->
        <environment id="development">
            <!--使用JDBC事务-->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据库连接池-->
            <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
            <!-- POOLED 表示支持JDBC数据源连接池 -->
            <!-- UNPOOLED 表示不支持数据源连接池 -->
            <!-- JNDI 表示支持外部数据源连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--引用映射文件-->
    <mappers>
        <mapper resource="mapper/UserInfo.xml"/>
    </mappers>
    <!-- Continue going here -->
</configuration>
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<UserInfo> 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、控制台输出验证
使用用户名模糊查询用户的结果,结果正确。

5、Demo源码https://github.com/sdifv/JavaWebDemo/tree/master/SSM/mybatisDemo
IDEA创建mybatisDemo,并实现简单的CRUD的更多相关文章
- Springboot项目搭建(1)-创建,整合mysql/oracle,druid配置,简单的CRUD
		
源码地址:https://github.com/VioletSY/article-base 1:创建一个基本项目:https://blog.csdn.net/mousede/article/detai ...
 - 8天掌握EF的Code First开发系列之2 简单的CRUD操作
		
本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 创建控制台项目 根据.Net中的类来创建数据库 简单的CRUD操作 数据库模式更改介绍 本章小结 本人的实验环境 ...
 - Mongodb系列- java客户端简单使用(CRUD)
		
Mongodb提供了很多的客户端: shell,python, java, node.js...等等. 以 java 为例实现简单的增删改查 pom文件: <dependencies> & ...
 - springboot + mybatis 的项目,实现简单的CRUD
		
以前都是用Springboot+jdbcTemplate实现CRUD 但是趋势是用mybatis,今天稍微修改,创建springboot + mybatis 的项目,实现简单的CRUD 上图是项目的 ...
 - 简单的CRUD(二)
		
一.重构简单的CRUD 1.JDBC工具类 1.因为在crud中都包含一些相同的代码所以可以提取出来,抽取代码重构为工具类. 2.将工具类设置为static静态类,方便调用,不需要new对象. pub ...
 - 简单的CRUD(一)
		
一.JDBC的概述--(来源于百度) JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问, ...
 - ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作
		
前言: 本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例.关于 ...
 - spring集成mongodb封装的简单的CRUD
		
1.什么是mongodb MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. mongoDB MongoDB是一个介 ...
 - 【tmos】spring data jpa 创建方法名进行简单查询
		
参考链接 spring data jpa 创建方法名进行简单查询:http://www.cnblogs.com/toSeeMyDream/p/6170790.html
 - 【SSH三大框架】Hibernate基础第五篇:利用Hibernate完毕简单的CRUD操作
		
这里利用Hibernate操作数据库完毕简单的CRUD操作. 首先,我们须要先写一个javabean: package cn.itcast.domain; import java.util.Date; ...
 
随机推荐
- CTF--HTTP服务--PUT上传漏洞
			
开门见山 1. 扫描靶机ip,发现PCS 192.168.31.48 2. 用nmap扫描靶机的开放服务和版本信息 3. 再扫描全部信息 4. 用nikto探测靶机http服务敏感信息 5. 再用di ...
 - Kubernetes 服务自动发现CoreDNS
			
前言 Service服务,是一个概念,逻辑通过selector标签代理指定后端pod.众所周知,pod生命周期短,状态不稳定,pod错误异常后新生成的Pod IP会发生变化,之前Pod的访问方式均不可 ...
 - yield 伪并发例子
			
import timedef custumer(name): print('%s 准备吃饺子了'%name) while True: curry = yield print('饺子%s来了 ,被%s吃 ...
 - pyhon学习Day18--继承
			
[知识点] 面向对象的三大特性:继承.多态.封装 [继承] (1)继承:class Person(Animal): ——括号里的:父类,基类,超类 括号外的:子类,派生类 class Animal ...
 - 关于C语言数组的小练习--笔记
			
#include <stdio.h> #include <windows.h> #include <mmsystem.h> #include <string. ...
 - eclipse导入项目时的一些准备
			
导入前的工作: 1.因为别人项目的运行环境可能和我们不一样,所以首先要在要导入的项目里面找到.setting文件,修改下面的xml文件,这个文件里面是关于服务器的一些配置的信息,你可以改成与你电脑一样 ...
 - 【搞定面试官】- Synchronized如何实现同步?锁优化?(1)
			
前言 说起Java面试中最高频的知识点非多线程莫属.每每提起多线程都绕不过一个Java关键字--synchronized.我们都知道该关键字可以保证在同一时刻,只有一个线程可以执行某个方法或者某个代码 ...
 - [terminal]终端仿真程序
			
char * szCommAry[COMM_NUM]={ //屏幕属性命令,23 "\x1b[12h",//禁止本端回显,键盘数据仅送给主机 "\x1b[12l" ...
 - HDU_2084_DP
			
http://acm.hdu.edu.cn/showproblem.php?pid=2084 简单dp,从下到上,从左到右,依次更新每个位置最大值. #include<iostream> ...
 - css 浏览兼容问题及解决办法 (2)
			
1.div的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了.缺点是要控制内容不要换行 2. ...