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

举报
穆雄雄 发表于 2022/12/17 11:09:08 2022/12/17
【摘要】 ​mybatis 是个什么东西,这里就不必说了,大家去网上搜搜看就行了,在这里我主要是分享一下最基本的增删改查案例以及配置信息,测试信息。首先我们创建个数据库:/*SQLyog 企业版 - MySQL GUI v8.14 MySQL - 5.5.40 : Database - smbms*****************************************************...

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%n


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


实体类源码:

 

 /**  
* @Title: Users.java
* @Package org.entity
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-10-5 下午6:53:06
* @version V1.0  
*/
package org.entity;

import java.util.Date;

 /**   
 *    
 * 项目名称:ssm_chop1   
 * 类名称:Users   
 * 类描述:   用户表的实体类
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-10-5 下午6:53:06   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-10-5 下午6:53:06   
 * 修改备注:   
 * @version    
 *    
 */
public class Users {
	
	private Integer id;				//用户编号
	private String userCode;   		//用户编码
	private String userName;		//用户名
	private String userPassword;	//密码
	private String gender;			//性别
	private Date birthday;			//生日
	private String phone;			//电话
	private String address;			//地址
	private Integer userrole;		//用户角色
	private Integer createBy;		//创建者
	private Date creationDate;		//创建时间
	private Integer modifyBy;		//更新者
	private Date modifyDate;		//更新时间
	private Role role;				//用户角色的对象
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUserCode() {
		return userCode;
	}
	public void setUserCode(String userCode) {
		this.userCode = userCode;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPassword() {
		return userPassword;
	}
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public Integer getUserrole() {
		return userrole;
	}
	public void setUserrole(Integer userrole) {
		this.userrole = userrole;
	}
	public Integer getCreateBy() {
		return createBy;
	}
	public void setCreateBy(Integer createBy) {
		this.createBy = createBy;
	}
	public Date getCreationDate() {
		return creationDate;
	}
	public void setCreationDate(Date creationDate) {
		this.creationDate = creationDate;
	}
	public Integer getModifyBy() {
		return modifyBy;
	}
	public void setModifyBy(Integer modifyBy) {
		this.modifyBy = modifyBy;
	}
	public Date getModifyDate() {
		return modifyDate;
	}
	public void setModifyDate(Date modifyDate) {
		this.modifyDate = modifyDate;
	}
	public Users(Integer id, String userCode, String userName,
			String userPassword, String gender, Date birthday, String phone,
			String address, Integer userrole, Integer createBy,
			Date creationDate, Integer modifyBy, Date modifyDate) {
		super();
		this.id = id;
		this.userCode = userCode;
		this.userName = userName;
		this.userPassword = userPassword;
		this.gender = gender;
		this.birthday = birthday;
		this.phone = phone;
		this.address = address;
		this.userrole = userrole;
		this.createBy = createBy;
		this.creationDate = creationDate;
		this.modifyBy = modifyBy;
		this.modifyDate = modifyDate;
	}
	public Users() {
		super();
	}
	public Role getRole() {
		return role;
	}
	public void setRole(Role role) {
		this.role = role;
	}
	
	
	
}

 

package org.entity;

import java.util.Date;
/**
 * 
*    
* 项目名称:ssm_chop2   
* 类名称:Role   
* 类描述:   角色表的实体类
* 创建人:Mu Xiongxiong  
* 创建时间:2017-10-7 上午10:01:31   
* 修改人:Mu Xiongxiong   
* 修改时间:2017-10-7 上午10:01:31   
* 修改备注:   
* @version    
*
 */
public class Role {
	
	private Integer id;   //id
	private String roleCode; //角色编码
	private String roleName; //角色名称
	private Integer createdBy; //创建者
	private Date creationDate; //创建时间
	private Integer modifyBy; //更新者
	private Date modifyDate;//更新时间
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getRoleCode() {
		return roleCode;
	}
	public void setRoleCode(String roleCode) {
		this.roleCode = roleCode;
	}
	public String getRoleName() {
		return roleName;
	}
	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}
	public Integer getCreatedBy() {
		return createdBy;
	}
	public void setCreatedBy(Integer createdBy) {
		this.createdBy = createdBy;
	}
	public Date getCreationDate() {
		return creationDate;
	}
	public void setCreationDate(Date creationDate) {
		this.creationDate = creationDate;
	}
	public Integer getModifyBy() {
		return modifyBy;
	}
	public void setModifyBy(Integer modifyBy) {
		this.modifyBy = modifyBy;
	}
	public Date getModifyDate() {
		return modifyDate;
	}
	public void setModifyDate(Date modifyDate) {
		this.modifyDate = modifyDate;
	}
	
}




Dao层源码:

 

 /**  
* @Title: IUserDao.java
* @Package org.dao
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-10-5 下午8:59:34
* @version V1.0  
*/
package org.dao;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.entity.Users;

 /**   
 *    
 * 项目名称:ssm_chop1   
 * 类名称:IUserDao   
 * 类描述:   
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-10-5 下午8:59:34   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-10-5 下午8:59:34   
 * 修改备注:   
 * @version    
 *    
 */
public interface UserMapper {
	/**
	 * 
	* @Description: 该方法的主要作用:查询所有的记录数
	* @Title: count
	* @param  @return 设定文件  
	* @return  返回类型:int   
	* @throws
	 */
	int count();

	/**
	 * 
	* @Description: 该方法的主要作用:查询所有的用户
	* @Title: getUserList
	* @param  @return 设定文件  
	* @return  返回类型:List<Users>   
	* @throws
	 */
	List<Users> getUserList();
	
	/**
	 * 
	* @Description: 该方法的主要作用:根据用户名进行模糊查询信息
	* @Title: getUsersByName
	* @param  @param name
	* @param  @return 设定文件  
	* @return  返回类型:Users   
	* @throws
	 */
	Users getUsersByName(String name);
	
	/**
	 * 
	* @Description: 该方法的主要作用:查询用户列表(参数是对象)
	* @Title: getUserListByUser
	* @param  @return 设定文件  
	* @return  返回类型:List<Users>   
	* @throws
	 */
	List<Users> getUserListByUser(Users users);
	
	/**
	 * 
	* @Description: 该方法的主要作用:查询用户列表(参数是Map集合)
	* @Title: getUsersListByMap
	* @param  @param userMap
	* @param  @return 设定文件  
	* @return  返回类型:List<Users>   
	* @throws
	 */
	List<Users> getUsersListByMap(Map<String, String> userMap);

	/**
	 * 
	* @Description: 该方法的主要作用:通过用户表和角色表进行连接查询
	* @Title: getUserListAndRole
	* @param  @param users
	* @param  @return 设定文件  
	* @return  返回类型:List<Users>   
	* @throws
	 */
	List<Users> getUserListAndRole(Users users);

	/**
	 * 
	* @Description: 该方法的主要作用:添加用户
	* @Title: saveUser
	* @param  @param users
	* @param  @return 设定文件  
	* @return  返回类型:int   
	* @throws
	 */
	int saveUser(Users users);
	
	/**
	 * 
	* @Description: 该方法的主要作用:根据编号修改
	* @Title: updateUser
	* @param  @param users
	* @param  @return 设定文件  
	* @return  返回类型:int   
	* @throws
	 */
	int updateUser(Users users);
	
	/**
	 * 
	* @Description: 该方法的主要作用:根据编号进行删除数据
	* @Title: delUser
	* @param  @param id
	* @param  @return 设定文件  
	* @return  返回类型:int   
	* @throws
	 */
	int delUser(int id);
	
	/**
	 * 
	* @Description: 该方法的主要作用:根据id查询用户信息
	* @Title: getUsersById
	* @param  @param id
	* @param  @return 设定文件  
	* @return  返回类型:Users   
	* @throws
	 */
	Users getUsersById(int id);
	
	/**
	 * 
	* @Description: 该方法的主要作用:根据用户角色获取用户信息
	* @Title: getUsersByRoleId
	* @param  @param id
	* @param  @return 设定文件  
	* @return  返回类型:Users   
	* @throws
	 */
	List<Users> getUsersByRoleId(@Param("userrole")int id);
	 
	 /**
	  * 
	 * @Description: 该方法的主要作用:根据用户名和角色编号动态查询用户信息
	 * @Title: getUsersListByUserNameAndRole_if
	 * @param  @param userName
	 * @param  @param usertole
	 * @param  @return 设定文件  
	 * @return  返回类型:List<Users>   
	 * @throws
	  */
	 List<Users> getUsersListByUserNameAndRole_if(@Param("userName")String userName,@Param("userrole")Integer usertole);
	 
	 /**
	  * 
	 * @Description: 该方法的主要作用:动态根据用户名和角色id查询用户列表,where and|or
	 * @Title: getUsersListByUserNameAndRole_ifAndwhere
	 * @param  @param userName
	 * @param  @param usertole
	 * @param  @return 设定文件  
	 * @return  返回类型:List<Users>   
	 * @throws
	  */
	 List<Users> getUsersListByUserNameAndRole_ifAndwhere(@Param("userName")String userName,@Param("userrole")Integer usertole);

	 /**
	  * 
	 * @Description: 该方法的主要作用:使用if+set动态修改用户表信息
	 * @Title: updateUser_ifAndSet
	 * @param  @param users
	 * @param  @return 设定文件  
	 * @return  返回类型:int   
	 * @throws
	  */
	 int updateUser_ifAndSet(Users users);
	 
	 /**
	  * 
	 * @Description: 该方法的主要作用:使用trim进行查询用户信息
	 * @Title: getUsersListByUserNameAndRole_ifAndwhere_trim
	 * @param  @param userName
	 * @param  @param usertole
	 * @param  @return 设定文件  
	 * @return  返回类型:List<Users>   
	 * @throws
	  */
	 List<Users> getUsersListByUserNameAndRole_ifAndwhere_trim(@Param("userName")String userName,@Param("userrole")Integer usertole);
	 
	 /**
	  * 
	 * @Description: 该方法的主要作用:使用trim代替set进行动态修改用户信息
	 * @Title: updateUser_ifAndTrim
	 * @param  @param users
	 * @param  @return 设定文件  
	 * @return  返回类型:int   
	 * @throws
	  */
	 int updateUser_ifAndTrim(Users users);
	 
	 /**
	  * 
	 * @Description: 该方法的主要作用:根据用户角色列表,获取该角色刘表下用户列表信息foreach_array
	 * @Title: getUsersByRoleId_foreach_array
	 * @param  @param roleids
	 * @param  @return 设定文件  
	 * @return  返回类型:List<Users>   
	 * @throws
	  */
	 List<Users> getUsersByRoleId_foreach_array(Integer [] roleids);
	 
	 /**
	  * 
	 * @Description: 该方法的主要作用:根据用户角色列表,获取该角色刘表下用户列表信息foreach_list
	 * @Title: getUsersByRoleId_foreach_list
	 * @param  @param roleids
	 * @param  @return 设定文件  
	 * @return  返回类型:List<Users>   
	 * @throws
	  */
	 List<Users> getUsersByRoleId_foreach_list(List<Integer> roleids);
	 
	 /**
	  * 
	 * @Description: 该方法的主要作用:根据用户角色列表和性别(多参数),获取该角色刘表下用户列表信息foreach_map
	 * @Title: getUsersByRoleId_foreach_map
	 * @param  @param roleids
	 * @param  @return 设定文件  
	 * @return  返回类型:List<Users>   
	 * @throws
	  */
	 List<Users> getUsersByRoleId_foreach_many_map(Map<String, Object> conditionmap);
	 
	 /**
	  * 
	 * @Description: 该方法的主要作用:根据用户角色列表(单参数),获取该角色刘表下用户列表信息foreach_map
	 * @Title: getUsersByRoleId_foreach_one_map
	 * @param  @param conditionmap
	 * @param  @return 设定文件  
	 * @return  返回类型:List<Users>   
	 * @throws
	  */
	 List<Users> getUsersByRoleId_foreach_one_map(Map<String, Object> conditionmap);
	 
	 /**
	  * 
	 * @Description: 该方法的主要作用:查询用户列表,使用choose
	 * @Title: getUsersList_choose
	 * @param  @param userName
	 * @param  @param userrole
	 * @param  @param userCode
	 * @param  @return 设定文件  
	 * @return  返回类型:List<Users>   
	 * @throws
	  */
	 List<Users> getUsersList_choose(@Param("userName")String userName,
			 						 @Param("userrole")Integer userrole,
			 						 @Param("userCode")String userCode,
			 						 @Param("creationDate")Date creationDate
			 							);

	 /**
	  * 
	 * @Description: 该方法的主要作用:分页显示用户信息
	 * @Title: getUserList_page
	 * @param  @return 设定文件  
	 * @return  返回类型:List<Users>   
	 * @throws
	  */
	 List<Users> getUserList_page(@Param("from")Integer from,@Param("pageSize")Integer pageSize);
}

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="org.dao.UserMapper">
	
	<!-- user的resultMap,当数据库字段信息和对象的属性不一样时,需要通过resultMap来映射 -->
	<!--association,property,对应的是实体类对象的名称;resultMap对应的是另一个表的映射  -->
	<resultMap type="Users" id="userList">
		<result property="id" column="id"/>
		<result property="userCode" column="userCode"/>
		<result property="userName" column="userName"/>
		<result property="userPassword" column="userPassword"/>
		<result property="gender" column="gender"/>
		<result property="birthday" column="birthday"/>
		<result property="phone" column="phone"/>
		<result property="address" column="address"/>
		<result property="userrole" column="userrole"/>
		<result property="createBy" column="createBy"/>
		<result property="creationDate" column="creationDate"/>
		<result property="modifyBy" column="modifyBy"/>
		<result property="modifyDate" column="modifyDate"/>
		<association property="role" resultMap="roleList"/>
	</resultMap>

	<!-- Role的resultMap -->
	<resultMap type="Role" id="roleList">
		<result property="id" column="id"/>
		<result property="roleCode" column="roleCode"/>
		<result property="roleName" column="roleName"/>
		<result property="createdBy" column="createdBy"/>
		<result property="creationDate" column="creationDate"/>
		<result property="modifyBy" column="modifyBy"/>
		<result property="modifyDate" column="modifyDate"/>
		
	</resultMap>
	<!-- 查询用户表的记录数 -->
	<select id="count" resultType="int">
		select count(*) from user
	</select>
	
	<!-- 查询所有的用户信息 -->
	<select id="getUserList" resultType="Users">
		select * from user
	</select>
	
	<!-- 根据用户名进行模糊查询 -->
	<select id="getUsersByName" resultMap="userList" parameterType="string">
		select * from user where userName like concat ('%',#{userName},'%')
	</select>
	
	<!-- 查询用户列表 -->
	<select id="getUserListByUser" resultMap="userList" parameterType="Users">
		select * from user where userName like concat('%',#{userName},'%') and userRole = #{userrole}
	</select>
	
	<!-- 查询用户列表,参数是Map集合 -->
	<select id="getUsersListByMap" resultMap="userList" parameterType="Map">
		select * from user where userName like concat ('%',#{userName},'%') and userRole = #{userrole}
	</select>
	
	<!-- 查询用户列表,连接查询-->
	<select id="getUserListAndRole" resultMap="userList" parameterType="Users">
		
	select * from user u join role r on u.userRole = r.id  
		where u.userName like concat ('%',#{userName},'%') and u.userrole = #{userrole}
	</select>
	
	<!-- 增加用户,字段名必须都写上 -->
	<insert id="saveUser" parameterType="Users">
		insert into user (userCode,userName,userPassword,gender,birthday,phone,
								address,userRole,createdBy,creationDate,modifyBy,modifyDate) 
		values(#{userCode},#{userName},#{userPassword},#{gender},#{birthday},#{phone},#{address},#{userrole},#{createBy},#{creationDate},#{modifyBy},#{modifyDate})
	</insert>
	
	<!-- 根据id修改信息 -->
	<update id="updateUser" parameterType="Users">
		update user set userCode=#{userCode},userName=#{userName},userPassword=#{userPassword},gender=#{gender},
						birthday=#{birthday},phone=#{phone},address=#{address},userRole=#{userrole},createdBy=#{createBy},
						creationDate=#{creationDate},modifyBy=#{modifyBy},modifyDate=#{modifyDate}
						where id=#{id}
	</update>
	
	<!-- 根据编号进行删除数据 -->
	<delete id="delUser" parameterType="int">
		delete from user where id=#{id}
	</delete>
	
	<!-- 根据id查询用户列表 -->
	<select id="getUsersById" parameterType="int" resultMap="userList">
		select * from user where id = #{id}
	</select>
	
	<!-- 根据角色id查询用户列表 -->
	<select id="getUsersByRoleId" parameterType="int" resultMap="userList">
		select * from user u,role r where u.userrole = #{userrole} and r.id = u.userrole
	</select>
	
	<!-- 根据用户名和角色编号查询用户信息 -->
	<select id="getUsersListByUserNameAndRole_if" resultMap="userList">
		select * from user u, role r where u.userrole=r.id
		<if test="userrole!=null">
			and userrole = #{userrole}
		</if>
		<if test="userName!=null">
			and userName like concat('%',#{userName},'%')
		</if>
	</select>
	
	<!-- 动态根据用户名和角色id查询用户列表,where and|or -->
	<select id="getUsersListByUserNameAndRole_ifAndwhere" resultMap="userList">
		select * from user 
		<where>
			<if test="userrole!=null and userrole!=''">
				and userrole = #{userrole}
			</if>
			<if test="userName!=null and userName!=''">
				and userName like concat('%',#{userName},'%')
			</if>
		</where>
	</select>
	
	<!-- 动态修改用户信息表if+set -->
	<update id="updateUser_ifAndSet" parameterType="Users">
		update user
		<set>
			<if test="userCode!=null">userCode=#{userCode},</if>
			<if test="userName!=null">userName=#{userName},</if>
			<if test="userPassword!=null">userPassword=#{userPassword},</if>
			<if test="gender!=null">gender=#{gender},</if>
			<if test="birthday!=null">birthday=#{birthday},</if>
			<if test="phone!=null">phone=#{phone},</if>
			<if test="address!=null">address=#{address},</if>
			<if test="userrole!=null">userrole=#{userrole},</if>
			<if test="createBy!=null">createdBy=#{createBy},</if>
			<if test="creationDate!=null">creationDate=#{creationDate},</if>
			<if test="modifyBy!=null">modifyBy=#{modifyBy},</if>
			<if test="modifyDate!=null">modifyDate=#{modifyDate},</if>
		</set>
			where id=#{id}
	</update>
	
	
	<!-- 动态根据用户名和角色id查询用户列表,使用trim进行查询用户信息,where and|or -->
	<!-- prefix:前缀,通过自动识别是否有返回值,在trim包含的内容上加上前缀 -->
	<!-- suffix:后缀,在trim包含的内容的上加上后缀 -->
	<!-- prefixOverrides:对于trim包含的内容的首部进行指定内容 -->
	<!-- suffixOverrides:地狱与trim包含的内容的首尾部进行指定内容的忽略 -->
	<select id="getUsersListByUserNameAndRole_ifAndwhere_trim" resultMap="userList">
		select * from user 
		<trim prefix="where" prefixOverrides="and | or">
			<if test="userrole!=null and userrole!=''">
				and userrole = #{userrole}
			</if>
			<if test="userName!=null and userName!=''">
				and userName like concat('%',#{userName},'%')
			</if>
		</trim>
	</select>
	
	<!-- 动态修改用户信息表if+trim -->
	<update id="updateUser_ifAndTrim" parameterType="Users">
		update user
		<trim prefix="set" suffixOverrides="," suffix="where id=#{id}">
			<if test="userCode!=null">userCode=#{userCode},</if>
			<if test="userName!=null">userName=#{userName},</if>
			<if test="userPassword!=null">userPassword=#{userPassword},</if>
			<if test="gender!=null">gender=#{gender},</if>
			<if test="birthday!=null">birthday=#{birthday},</if>
			<if test="phone!=null">phone=#{phone},</if>
			<if test="address!=null">address=#{address},</if>
			<if test="userrole!=null">userrole=#{userrole},</if>
			<if test="createBy!=null">createdBy=#{createBy},</if>
			<if test="creationDate!=null">creationDate=#{creationDate},</if>
			<if test="modifyBy!=null">modifyBy=#{modifyBy},</if>
			<if test="modifyDate!=null">modifyDate=#{modifyDate},</if>
		</trim>
	</update>
	
	<!-- 根据用户角色列表,获取该角色刘表下用户列表信息foreach_array -->
	<!-- item:循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details。 具体说明:在list和数组中是其中的对象,在map中是value。该参数为必选。 -->
	<!-- collection:要做foreach的对象,作为入参时,List<?>对象默认用list代替作为键,数组对象有array代替作为键,Map对象没有默认的键。
					当然在作为入参时可以使用@Param("keyName")来设置键,设置keyName后,list,array将会失效。 除了入参这种情况外,还有一种作为参数对象的某个字段的时候。举个例子:
					如果User有属性List ids。入参是User对象,那么这个collection = "ids"
					如果User有属性Ids ids;其中Ids是个对象,Ids有个属性List id;入参是User对象,那么collection = "ids.id"
					上面只是举例,具体collection等于什么,就看你想对那个元素做循环。
					该参数为必选。 -->
	<!-- separator:元素之间的分隔符,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。 -->
	<!-- open:foreach代码的开始符号,一般是(和close=")"合用。常用在in(),values()时。该参数可选。 -->
	<!-- close:foreach代码的关闭符号,一般是)和open="("合用。常用在in(),values()时。该参数可选。 -->
	<!-- index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。 -->
	<select id="getUsersByRoleId_foreach_array" resultMap="userList">
		select * from user where userrole in 
			<foreach collection="array" item="roleids" open="(" separator="," close=")">
				#{roleids}
			</foreach>
	</select>
	
	<!-- 根据用户角色列表,获取该角色刘表下用户列表信息foreach_list -->
	<select id="getUsersByRoleId_foreach_list" resultMap="userList">
		select * from user where userrole in 
		<foreach collection="list" item="roleids" open="(" separator="," close=")">
			#{roleids}
		</foreach>
	</select>
	
	<!-- 根据用户角色列表和性别(多参数),获取该角色刘表下用户列表信息foreach_map -->
	<select id="getUsersByRoleId_foreach_many_map" resultMap="userList">
		select * from user where gender = #{gender} and  userrole in 
		<foreach collection="roleids" item="roleMap" open="(" separator="," close=")">
			#{roleMap}
		</foreach>
	</select>
	
	<!-- 根据用户角色列表(单参数),获取该角色刘表下用户列表信息foreach_map -->
	<select id="getUsersByRoleId_foreach_one_map" resultMap="userList">
		select * from user where   userrole in 
		<foreach collection="rKey" item="roleMap" open="(" separator="," close=")">
			#{roleMap}
		</foreach>
	</select>
	
	<!-- 查询用户列表,使用choose -->
	<select id="getUsersList_choose" resultMap="userList">
		select * from user where 1=1
			<choose>
				<when test="userName!=null and userName!=''">
					and userName  like concat('%',#{userName},'%')
				</when>
				<when test="userrole!=null">
					and userrole =#{userrole}
				</when>
				<when test="userCode!=null and userCode!=''">
					and userCode =#{userCode}
				</when>
				<otherwise>
					and YEAR(creationDate) = YEAR(#{creationDate})
				</otherwise>
			</choose>
	</select>
	
	<!-- 分页显示用户信息 -->
	<select id="getUserList_page" resultMap="userList">
		select * from user limit #{from},#{pageSize}
	</select>
</mapper>

Util层的源码:

MybatisUtils.java


测试类的源码:

UserMapperTest


不足之处欢迎留言

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。