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.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

<?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的更多相关文章

  1. Springboot项目搭建(1)-创建,整合mysql/oracle,druid配置,简单的CRUD

    源码地址:https://github.com/VioletSY/article-base 1:创建一个基本项目:https://blog.csdn.net/mousede/article/detai ...

  2. 8天掌握EF的Code First开发系列之2 简单的CRUD操作

    本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 创建控制台项目 根据.Net中的类来创建数据库 简单的CRUD操作 数据库模式更改介绍 本章小结 本人的实验环境 ...

  3. Mongodb系列- java客户端简单使用(CRUD)

    Mongodb提供了很多的客户端: shell,python, java, node.js...等等. 以 java 为例实现简单的增删改查 pom文件: <dependencies> & ...

  4. springboot + mybatis 的项目,实现简单的CRUD

    以前都是用Springboot+jdbcTemplate实现CRUD 但是趋势是用mybatis,今天稍微修改,创建springboot + mybatis 的项目,实现简单的CRUD  上图是项目的 ...

  5. 简单的CRUD(二)

    一.重构简单的CRUD 1.JDBC工具类 1.因为在crud中都包含一些相同的代码所以可以提取出来,抽取代码重构为工具类. 2.将工具类设置为static静态类,方便调用,不需要new对象. pub ...

  6. 简单的CRUD(一)

    一.JDBC的概述--(来源于百度) JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问, ...

  7. ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作

    前言: 本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例.关于 ...

  8. spring集成mongodb封装的简单的CRUD

    1.什么是mongodb         MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. mongoDB MongoDB是一个介 ...

  9. 【tmos】spring data jpa 创建方法名进行简单查询

    参考链接 spring data jpa 创建方法名进行简单查询:http://www.cnblogs.com/toSeeMyDream/p/6170790.html

  10. 【SSH三大框架】Hibernate基础第五篇:利用Hibernate完毕简单的CRUD操作

    这里利用Hibernate操作数据库完毕简单的CRUD操作. 首先,我们须要先写一个javabean: package cn.itcast.domain; import java.util.Date; ...

随机推荐

  1. 工具之cut

    转自http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html cut:正如其名就是“剪”,和sed一样,一行为单位,对数据进行 ...

  2. 解决SpringMvc后台接收json数据中文乱码问题

    原因分析 使用ajax从前台页面传输数据到后台controller控制器的时候,出现中文乱码 其实乱码问题出现的原因,就是由于默认的tomcat配置,接收请求是以ISO-8859-1来转码,导致中文出 ...

  3. JDK源码之Byte类分析

    一 简介 byte,即字节,由8位的二进制组成.在Java中,byte类型的数据是8位带符号的二进制数,以二进制补码表示的整数 取值范围:默认值为0,最小值为-128(-2^7);最大值是127(2^ ...

  4. springIOC源码接口分析(九):Environment

    先贴一下接口继承关系图,spring容器启动的时候会初始化环境,所以此接口相关接口非常有必要进行了解: 一 PropertyResolver接口 Environment继承了该接口,PropertyR ...

  5. C语言I作业1

    1 你对软件工程专业或计算机科学与技术专业了解是怎样的? 软件工程顾名思义就是工程化的方法生产软件的一门学科.涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面. 2 你了解c语 ...

  6. 机器学习总结-sklearn参数解释

    本文转自:lytforgood 机器学习总结-sklearn参数解释 实验数据集选取: 1分类数据选取 load_iris 鸢尾花数据集 from sklearn.datasets import lo ...

  7. Linux密码策略--设置随机密码

    #!/bin/bash # @Author: HanWei # @Date: -- :: # @Last Modified by: HanWei # @Last Modified -- :: # @E ...

  8. React+wangeditor+node富文本处理带图片上传

    最近有个需求出现在我的视野中,因为我的另外的博客需要上传文章,但是我不想每次都在我的数据库中慢慢的修改格式,所以我另做了一个后台去编辑文本后发送给服务器,那么这里就涉及到两点,一个是富文本,一个是需要 ...

  9. sqlserver partitition and partition table --- partition show

    I can not believe that I had done this about two years Now we know there is totally different betwee ...

  10. 【TensorFlow】TensorFlow基础 —— 模型的保存读取与可视化方法总结

    TensorFlow提供了一个用于保存模型的工具以及一个可视化方案 这里使用的TensorFlow为1.3.0版本 一.保存模型数据 模型数据以文件的形式保存到本地: 使用神经网络模型进行大数据量和复 ...