mybatis简单案例源码详细【注释全面】——前期准备
【摘要】 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层的源码:
测试类的源码:
不足之处欢迎留言
推荐
华为开发者空间发布
让每位开发者拥有一台云主机
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)