mybatis简单案例源码详细【注释全面】——前期准备

mybatis 是个什么东西,这里就不必说了,大家去网上搜搜看就行了,在这里我主要是分享一下最基本的增删改查案例以及配置信息,测试信息。

首先我们创建个数据库:

/*
SQLyog 企业版 - MySQL GUI v8.14 
MySQL - 5.5.40 : Database - smbms
*********************************************************************
*//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`smbms` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;USE `smbms`;DROP TABLE IF EXISTS `smbms_role`;CREATE TABLE `smbms_role` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`roleCode` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色编码',`roleName` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色名称',`createdBy` bigint(20) DEFAULT NULL COMMENT '创建者',`creationDate` datetime DEFAULT NULL COMMENT '创建时间',`modifyBy` bigint(20) DEFAULT NULL COMMENT '修改者',`modifyDate` datetime DEFAULT NULL COMMENT '修改时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;/*Data for the table `smbms_role` */insert  into `smbms_role`(`id`,`roleCode`,`roleName`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`) values (1,'SMBMS_ADMIN','系统管理员',1,'2016-04-13 00:00:00',NULL,NULL),(2,'SMBMS_MANAGER','经理',1,'2016-04-13 00:00:00',NULL,NULL),(3,'SMBMS_EMPLOYEE','普通员工',1,'2016-04-13 00:00:00',NULL,NULL);/*Table structure for table `smbms_user` */DROP TABLE IF EXISTS `smbms_user`;CREATE TABLE `smbms_user` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`userCode` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户编码',`userName` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户名称',`userPassword` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户密码',`gender` int(10) DEFAULT NULL COMMENT '性别(1:女、 2:男)',`birthday` date DEFAULT NULL COMMENT '出生日期',`phone` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '手机',`address` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '地址',`userRole` int(10) DEFAULT NULL COMMENT '用户角色(取自角色表-角色id)',`createdBy` bigint(20) DEFAULT NULL COMMENT '创建者(userId)',`creationDate` datetime DEFAULT NULL COMMENT '创建时间',`modifyBy` bigint(20) DEFAULT NULL COMMENT '更新者(userId)',`modifyDate` datetime DEFAULT NULL COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;/*Data for the table `smbms_user` */insert  into `smbms_user`(`id`,`userCode`,`userName`,`userPassword`,`gender`,`birthday`,`phone`,`address`,`userRole`,`createdBy`,`creationDate`,`modifyBy`,`modifyDate`) values (1,'admin','系统管理员','1234567',1,'1983-10-10','13688889999','北京市海淀区成府路207号',1,1,'2013-03-21 16:52:07',NULL,NULL),(2,'liming','李明','0000000',2,'1983-12-10','13688884457','北京市东城区前门东大街9号',2,1,'0000-00-00 00:00:00',NULL,NULL),(5,'hanlubiao','韩路彪','0000000',2,'1984-06-05','18567542321','北京市朝阳区北辰中心12号',2,1,'2014-12-31 19:52:09',NULL,NULL),(6,'zhanghua','张华','0000000',1,'1983-06-15','13544561111','北京市海淀区学院路61号',3,1,'2013-02-11 10:51:17',NULL,NULL),(7,'wangyang','王洋','0000000',2,'1982-12-31','13444561124','北京市海淀区西二旗辉煌国际16层',3,1,'2014-06-11 19:09:07',NULL,NULL),(8,'zhaoyan','赵燕','0000000',1,'1986-03-07','18098764545','北京市海淀区回龙观小区10号楼',3,1,'2016-04-21 13:54:07',NULL,NULL),(10,'sunlei','孙磊','0000000',2,'1981-01-04','13387676765','北京市朝阳区管庄新月小区12楼',3,1,'2015-05-06 10:52:07',NULL,NULL),(11,'sunxing','孙兴','0000000',2,'1978-03-12','13367890900','北京市朝阳区建国门南大街10号',3,1,'2016-11-09 16:51:17',NULL,NULL),(12,'zhangchen','张晨','0000000',1,'1986-03-28','18098765434','朝阳区管庄路口北柏林爱乐三期13号楼',3,1,'2016-08-09 05:52:37',1,'2016-04-14 14:15:36'),(13,'dengchao','邓超','0000000',2,'1981-11-04','13689674534','北京市海淀区北航家属院10号楼',3,1,'2016-07-11 08:02:47',NULL,NULL),(14,'yangguo','杨过','0000000',2,'1980-01-01','13388886623','北京市朝阳区北苑家园茉莉园20号楼',3,1,'2015-02-01 03:52:07',NULL,NULL),(15,'zhaomin','赵敏','0000000',1,'1987-12-04','18099897657','北京市昌平区天通苑3区12号楼',2,1,'2015-09-12 12:02:12',NULL,NULL);

数据库我使用的是mysql,其他的数据库也一样。

然后我们在myeclipse里面新建个项目,项目名称随便写,项目创建完成之后我们导入我们所需要的jar包,log4j-1.2.17.jar,mybatis-3.2.2.jar,mybatis-3.2.2-sources.jar,mysql-connector-java-5.1.0-bin.jar这四个就OK了,两个mybatis的,一个日志的,一个mysql的。

我们这里所用的案例都是未使用实现接口的方法,大家先来看看项目路劲分配截图:


  org.entity所对应的是实体类,org.dao所对应的是接口和映射文件,org.util所对应的是MyabtisUtils,database.properties:数据库连接配置,log4j.properties:日志的资源文件,mybatis-config.xml:mybatis的配置信息,org.test里面是我们的测试信息;

     其中database.properties:

driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/smbms?useUnicode\=true&characterEncoding\=utf-8
user=root
password=123

大家吧对应的密码改一下,

log4j.properties的代码:

log4j.rootLogger=DEBUG,CONSOLE,file
#log4j.rootLogger=ERROR,ROLLING_FILE
log4j.logger.cn.smbms.dao=debug
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 
log4j.logger.java.sql.ResultSet=debug 
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug######################################################################################
# Console Appender  \u65e5\u5fd7\u5728\u63a7\u5236\u8f93\u51fa\u914d\u7f6e
######################################################################################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=error
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n######################################################################################
# DailyRolling File  \u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\uff0c\u6587\u4ef6\u540d\u683c\u5f0f:log2009-09-11
######################################################################################
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=error
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%nlog4j.logger.com.opensymphony.xwork2=error  

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"><!-- 通过这个配置文件完成mybatis与数据库连接 -->
<configuration><!-- 引入database.properties文件 --><!-- <properties resource="database.properties"></properties> --><!-- 配置文件配置数据库信息 --><!-- <properties><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms"/><property name="user" value="root"/><property name="password" value="123"/></properties> --><!-- 配置文件配置数据库信息 --><properties resource="database.properties"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms"/><property name="user" value="root"/><property name="password" value="123"/></properties><!-- 配置类型别名 --><!-- <typeAliases><package name="org.entity"/></typeAliases> --><!-- 配置mybatis的log实现为LOG4J --><settings><setting name="logImpl" value="LOG4J"/></settings><typeAliases><package name="org.entity"/></typeAliases><environments default="development"><environment id="development"><!-- 配置事务管理器,采用jdbc的事务管理 --><transactionManager type="JDBC"></transactionManager><!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 --><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${user}"/><property name="password" value="${password}"/></dataSource></environment></environments><!-- 将mapper文件加入到配置文件中 --><mappers><mapper resource="org/dao/UserMapper.xml"/></mappers>
</configuration>

实体类源码:


Users.java

Role.java


Dao层源码:


UserMapper.java

UserMapper.xml


Util层的源码:

MybatisUtils.java


测试类的源码:

UserMapperTest


不足之处欢迎留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算设计模式(三)——补偿交易模式

撤消由一系列步骤&#xff0c;它们共同限定了最终一致性操作中&#xff0c;如果一个或多个步骤失败执行的工作。按照最终一致性模型&#xff0c;业务实现复杂的业务流程和工作流的云托管的应用程序中很常见。 背景和问题 在云中运行的应用程序频繁修改数据。此数据可跨在各种地…

API网关Ocelot 使用Polly 处理部分失败问题

在实现API Gateway过程中&#xff0c;另外一个需要考虑的问题就是部分失败。这个问题发生在分布式系统中当一个服务调用另外一个服务超时或者不可用的情况。API Gateway不应该被阻断并处于无限期等待下游服务的状态。但是&#xff0c;如何处理这种失败依赖于特定的场景和具体服…

数组模拟环形队列

思路分析 代码实现 package com.atguigu.queue;import java.util.Calendar; import java.util.Scanner;/*** 创建人 wdl* 创建时间 2021/3/17* 描述*/ public class CircleArrayQueueDemo {public static void main(String[] args) {//测试一把System.out.println("测试数…

Error:(1, 10) java: 需要class, interface或enum

https://blog.csdn.net/zf18234031156/article/details/103047649 反复做这一步&#xff0c;30多个文件一个一个弄&#xff0c;有乱码用txt打开&#xff0c;黏贴覆盖&#xff0c; 目录 1.前言 2.原因(UTF-8BOM造成) 3.如何解决 3.11使用Notepad&#xff0c;选择“格式--以…

彻底理解ThreadLocal

转载自 彻底理解ThreadLocal 先总述&#xff0c;后分析 深挖过threadLocal之后&#xff0c;一句话概括&#xff1a;Synchronized用于线程间的数据共享&#xff0c;而ThreadLocal则用于线程间的数据隔离。所以ThreadLocal的应用场合&#xff0c;最适合的是按线程多实例&#xff…

云计算设计模式(四)——消费者的竞争模式

允许多个并发用户处理在同一个通讯通道接收的消息。这种模式使系统能够同时处理多个邮件&#xff0c;以优化吞吐量&#xff0c;提高可扩展性和可用性&#xff0c;以及平衡工作负载。 背景和问题 在云中运行的应用程序&#xff0c;可以预计&#xff0c;以处理大量的请求。而不是…

前后端分离趋势谈

最近已经不止一个人和我提起过vue了&#xff0c;在我的前端印象中&#xff0c;我还停留在smarty渲染模版&#xff0c;jquery做js处理。学了一晚上&#xff0c;对现在这种工程化webpack打包生成html&#xff0c;js&#xff0c;css的生产方式越来越有兴趣了。工作年限摆在这里的好…

云计算设计模式(五)——计算资源整合模式

合并多个任务或操作成一个单一的计算单元。这种模式可以提高计算资源的利用率&#xff0c;并降低与云托管的应用程序进行计算处理相关的成本和管理开销。 背景和问题 云应用程序频繁执行各种操作。在某些解决方案也可能是有意义的最初遵循的关注点分离的设计原则&#xff0c;并…

Visual Studio 2017 RC3支持.NET Core,延迟对Python的支持

Visual Studio 2017第三个候选版本上周发布&#xff0c;解决了之前发现的安装程序的小问题。由于这些问题得到了解决&#xff0c;现在值得关注的就是这次版本中更新了什么内容。&#xff08;版本是发布于1月27日的build 26127.00&#xff09; RC3版本中最值得关注的部分就是对N…

虚拟研讨会:.NET的未来在哪里?

.NET生态系统在过去的一年中发生了很多事情。在几个方面发展非常迅速&#xff1a;Xamari、UWP、.NET Core、.NET native、F#和开源等等。 如果要关注细节&#xff0c;那大的景象难以描绘。因为在每个方面都有新的动作&#xff1a;跨平台、云、移动、Web应用和通用应用。开发人员…

使用Servlet上传多张图片——访问提示

上传文件&#xff0c;我们在做项目中补课避免的&#xff0c;有时候我们需要上传单张或者单个文件&#xff0c;但是有时候我们就需要上传多个文件或者多张图片了&#xff0c;我们这里以多张&#xff08;4张&#xff09;图片为例&#xff0c;再多也都是一样的概念&#xff0c;接下…

云计算设计模式(六)——命令和查询职责分离(CQRS)模式

隔离&#xff0c;通过使用不同的接口&#xff0c;从操作读取数据更新数据的操作。这种模式可以最大限度地提高性能&#xff0c;可扩展性和安全性;支持系统在通过较高的灵活性&#xff0c;时间的演变;防止更新命令&#xff0c;从造成合并在域级别上的冲突。 背景和问题 在传统的…

Intellij IDEA 那些隐藏好用的小技巧

转载自 Intellij IDEA 那些隐藏好用的小技巧 概述 之前写了一篇介绍IntellIJ IDEA的文章《 Intellij Idea非常6的10个姿势 》&#xff0c;主要是列出一些平时大家可能没用过或者没怎么用&#xff0c;但是又非常好用的IntellIJ IDEA小技巧。由于篇幅原因&#xff0c;只是列出了…

约瑟夫(环)问题(Josephu)(单向环形链表)

问题描述 代码实现 package com.atguigu.linkedlist;import com.sun.org.apache.bcel.internal.generic.NEW;/*** 创建人 wdl* 创建时间 2021/3/19* 描述*/ public class Josepfu {public static void main(String[] args) {//测试一把看看构建的环形链表和遍历是否正确Circle…

vue+vscode+nodejs 开发环境搭建

参考文献 vuevscodenodejs 开发环境搭建 - Desperador - 博客园 nodejs 指定全局安装路径和缓存路径 - Curedfisher - 博客园 安装配置nodejs并创建Vue项目 vscode下载地址&#xff1a; Documentation for Visual Studio Code nodejs安装配置 1.下载 地址&#xff1a; …

用数组模拟栈

思路分析 代码实现 package com.atguigu.stack;import com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM2;import java.net.ServerSocket; import java.util.ArrayList; import java.util.Scanner; import java.util.Stack;/*** 创建人 wdl* 创建时间 2021/3/20* 描述…

Redis PK Memcached,哪个更牛叉

转载自 Redis PK Memcached&#xff0c;哪个更牛叉 说到 redis 就会联想到 memcached&#xff0c;反之亦然。了解过两者的同学有那么个大致的印象&#xff1a; redis 与 memcached 相比&#xff0c;不仅支持简单的 key-value 数据类型&#xff0c;同时还提供 list,set,zset,ha…

CoreCLR源码探索(三) GC内存分配器的内部实现

在前一篇中我讲解了new是怎么工作的, 但是却一笔跳过了内存分配相关的部分.在这一篇中我将详细讲解GC内存分配器的内部实现.在看这一篇之前请必须先看完微软BOTR文档中的"Garbage Collection Design",原文地址是: https://github.com/dotnet/coreclr/blob/master/Doc…