复习Mybatis框架整合


mybiatis笔记:

MyBatis框架 ORM,关联映射,半自动orm实现
------------------------------------------------------
Spring框架
SpringMvc框架
------------------------------------------------
Hibernate框架
Struts2框架
-------------------------------------------------------
MyBatis持久化
将sql语句从程序代码中分离出来,配置在xml中

搭建框架环境:
1.导包jar,添加到项目
2.mybatis核心配置文件
3.创建实体类
4.创建Mapper接口
5.创建sql映射文件
6.编写测试
-----------------------------------------------
核心配置文件 mybatis-config.xml
-------------------------------------------------
java           mybatis
String         string
Boolean      boolean
Map           map
List             list

创建数据库

/*
SQLyog v10.2 
MySQL - 5.5.27 : Database - cvs_db
*********************************************************************
*/

/*!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*/`cvs_db` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `cvs_db`;

/*Table structure for table `t_address` */

DROP TABLE IF EXISTS `t_address`;

CREATE TABLE `t_address` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `contact` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系人姓名',
  `addressDesc` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '收货地址明细',
  `postCode` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '邮编',
  `tel` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系人电话',
  `createdUserId` bigint(20) DEFAULT NULL COMMENT '创建者',
  `createdTime` datetime DEFAULT NULL COMMENT '创建时间',
  `updatedUserId` bigint(20) DEFAULT NULL COMMENT '修改者',
  `updatedTime` datetime DEFAULT NULL COMMENT '修改时间',
  `userId` bigint(20) DEFAULT NULL COMMENT '用户ID',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

/*Data for the table `t_address` */

insert  into `t_address`(`id`,`contact`,`addressDesc`,`postCode`,`tel`,`createdUserId`,`createdTime`,`updatedUserId`,`updatedTime`,`userId`) values (1,'张三','北京顺义','10000','138',NULL,NULL,NULL,NULL,1),(2,'李四','北京朝阳','10001','137',NULL,NULL,NULL,NULL,1),(3,'王五','北京通州','10002','136',NULL,NULL,NULL,NULL,1),(4,'赵六','北京昌平','1003','156',NULL,NULL,NULL,NULL,2);

/*Table structure for table `t_sys_role` */

DROP TABLE IF EXISTS `t_sys_role`;

CREATE TABLE `t_sys_role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `code` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色编码',
  `roleName` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色名称',
  `createdUserId` bigint(20) DEFAULT NULL COMMENT '创建者',
  `createdTime` datetime DEFAULT NULL COMMENT '创建时间',
  `updatedUserId` bigint(20) DEFAULT NULL COMMENT '修改者',
  `updatedTime` datetime DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='系统角色';

/*Data for the table `t_sys_role` */

insert  into `t_sys_role`(`id`,`code`,`roleName`,`createdUserId`,`createdTime`,`updatedUserId`,`updatedTime`) values (1,'SMBMS_ADMIN','管理系统员',1,'2019-04-13 00:00:00',NULL,NULL),(2,'SMBMS_MANAGER','店长',1,'2019-04-13 00:00:00',NULL,NULL),(3,'SMBMS_EMPLOYEE','店员',1,'2019-04-13 00:00:00',NULL,NULL),(5,'baoan','保安',1,'2022-05-12 11:01:31',NULL,NULL),(6,'chengxuyuan','程序员',1,'2022-05-13 13:51:24',NULL,NULL);

/*Table structure for table `t_sys_user` */

DROP TABLE IF EXISTS `t_sys_user`;

CREATE TABLE `t_sys_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `account` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '账号',
  `realName` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '真是姓名',
  `password` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '密码',
  `sex` int(1) 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 '用户地址',
  `roleId` bigint(20) DEFAULT NULL COMMENT '用户角色id',
  `createdUserId` bigint(20) DEFAULT NULL COMMENT '创建人',
  `createdTime` datetime DEFAULT NULL COMMENT '创建时间',
  `updatedUserId` bigint(20) DEFAULT NULL COMMENT '修改人',
  `updatedTime` datetime DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='系统用户';

/*Data for the table `t_sys_user` */

insert  into `t_sys_user`(`id`,`account`,`realName`,`password`,`sex`,`birthday`,`phone`,`address`,`roleId`,`createdUserId`,`createdTime`,`updatedUserId`,`updatedTime`) values (1,'admin','admin','717171',1,'1980-11-01','13521214507','北京市朝阳区北辰中心12号',1,1,'2013-03-21 16:52:07',NULL,NULL),(2,'limingxing','李明星','0000000',2,'1983-12-10','13685584457','北京市东城区前门东大街9号',2,1,'2014-12-31 19:52:09',NULL,NULL),(5,'wanglulu','王璐璐','0000000',2,'1984-06-05','18567542321','北京市朝阳区北苑家园茉莉园20号楼',2,1,'2014-12-31 19:52:09',NULL,NULL),(7,'huangweihua','黄卫华','0000000',2,'1982-12-31','13388451555','北京市海淀区西二旗辉煌国际26层',3,1,'2014-06-11 19:09:07',NULL,NULL),(10,'zhaogang','赵刚','0000000',2,'1980-01-01','13387676762','北京市丰台区管庄新月小区',2,1,'2015-05-06 10:52:07',NULL,NULL),(11,'liuyang','刘阳','0000000',2,'1978-03-12','13367890900','北京市海淀区成府路207号',2,1,'2016-11-09 16:51:17',NULL,NULL),(12,'lijiangtao','李江涛','0000000',1,'1983-12-10','18098765434','朝阳区管庄路口北柏林爱乐三期13号楼',3,1,'2016-08-09 05:52:37',1,'2016-04-14 14:15:36'),(13,'liuzhong','刘忠','0000000',2,'1981-11-04','13689674534','北京市海淀区北航家属院10号楼',3,1,'2016-07-11 08:02:47',NULL,NULL),(14,'zhangfeng','张峰','0000000',2,'1980-01-01','13645884457','北京市海淀区北苑家园20号楼',3,1,'2015-02-01 03:52:07',NULL,NULL),(15,'songke','宋科','0000000',1,'1983-10-10','13387676762','北京市海淀区西二旗辉煌国际26层',2,1,'2015-09-12 12:02:12',NULL,NULL),(17,'lisi','李四四','123456',2,'2022-05-07','135','深圳',6,NULL,NULL,NULL,NULL),(21,'Zhao','赵七七七七','123456',1,'2022-12-02','135','顺义区',1,NULL,NULL,NULL,NULL);

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

创建resources包

在resources包下面创建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>
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/cvs_db?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;zeroDateTimeBehavior=convertToNull"/>
        <property name="user" value="root"/>
        <property name="password" value="123.com"/>
    </properties>
    <!-- 配置mybatis的log实现为LOG4J -->
    <settings>
        <setting name="logImpl" value="LOG4J" />
        <!--
        NONE:禁用自动映射
        PARTIAT:默认,如果使用resultMap嵌套,默认的没有效果
        FULL:全部使用自动映射
        -->
        <setting name="autoMappingBehavior" value="FULL"/>
    </settings>
    <!--配置实体类-->
    <typeAliases>
        <package name="com.bdqn.pojo"/>
    </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="com/bdqn/dao/SysUserMapper.xml"/>
-->
        <package name="com.bdqn.dao"/>
    </mappers>
</configuration>

 在resources放入log4gJ日志文件ava包

在WEB-LNF下面床架lib包放入Java包并add

 下面开始创建业务逻辑层

把MyBatisUtil放入工具包utlis

创建pojo实体类SysUser

代码:

package com.bdqn.pojo;

import java.util.Date;

/**
 * 系统用户类
 * @author project.cvs.team
 */
public class SysUser implements java.io.Serializable {
	private Integer id; 			//id 
	private String account; 		//账号
	private String password; 		//密码
	private String realName; 		//真实姓名
	private Integer roleId;	    	//角色id
	private String phone;   		//电话
	private String address; 		//地址
	private Integer sex;	 		//性别
	private Date birthday;  		//出生日期
	private Integer createdUserId; 	//创建人id
	private Date createdTime; 		//创建时间
	private Integer updatedUserId; 	//修改人id
	private Date updatedTime;   	//修改时间
	private  String userRoleName;
	private Integer age;			//用户年龄
	private  SysRole sysRole;

	public SysRole getSysRole() {
		return sysRole;
	}

	public void setSysRole(SysRole sysRole) {
		this.sysRole = sysRole;
	}

	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	
	public String getRealName() {
		return realName;
	}
	public void setRealName(String realName) {
		this.realName = realName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public Integer getRoleId() {
		return roleId;
	}
	public void setRoleId(Integer role) {
		this.roleId = role;
	}
	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 getSex() {
		return sex;
	}
	public void setSex(Integer sex) {
		this.sex = sex;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public Integer getCreatedUserId() {
		return createdUserId;
	}
	public void setCreatedUserId(Integer createdUserId) {
		this.createdUserId = createdUserId;
	}
	public Date getCreatedTime() {
		return createdTime;
	}
	public void setCreatedTime(Date createdTime) {
		this.createdTime = createdTime;
	}
	public Integer getUpdatedUserId() {
		return updatedUserId;
	}
	public void setUpdatedUserId(Integer updatedUserId) {
		this.updatedUserId = updatedUserId;
	}
	public Date getUpdatedTime() {
		return updatedTime;
	}
	public void setUpdatedTime(Date updatedTime) {
		this.updatedTime = updatedTime;
	}
	public void setAge(Integer age) {
		this.age = age;
	}

	public Integer getAge() {
		/*long time = System.currentTimeMillis()-birthday.getTime();
		Integer age = Long.valueOf(time/365/24/60/60/1000).IntegerValue();*/
		Date date = new Date();
		Integer age = date.getYear()-birthday.getYear();
		return age;
	}

	public String getUserRoleName() {
		return userRoleName;
	}

	public void setUserRoleName(String userRoleName) {
		this.userRoleName = userRoleName;
	}

	@Override
	public String toString() {
		return "SysUser{" +
				"id=" + id +
				", account='" + account + '\'' +
				", password='" + password + '\'' +
				", realName='" + realName + '\'' +
				", roleId=" + roleId +
				", phone='" + phone + '\'' +
				", address='" + address + '\'' +
				", sex=" + sex +
				", birthday=" + birthday +
				", createdUserId=" + createdUserId +
				", createdTime=" + createdTime +
				", updatedUserId=" + updatedUserId +
				", updatedTime=" + updatedTime +
				", age=" + age +
				'}';
	}
}

 SysRole实体类

代码:

package com.bdqn.pojo;

import java.util.Date;

/**
 * 角色类
 * @author project.cvs.team
 */
public class SysRole {
	
	private Integer id;   			//id
	private String code;			//角色编码
	private String roleName; 		//角色名称
	private Integer createdUserId;	//创建者
	private Date createdTime; 		//创建时间
	private Integer updatedUserId;	//更新者
	private Date updatedTime;		//更新时间
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getRoleName() {
		return roleName;
	}
	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}
	public Integer getCreatedUserId() {
		return createdUserId;
	}
	public void setCreatedUserId(Integer createdUserId) {
		this.createdUserId = createdUserId;
	}
	public Date getCreatedTime() {
		return createdTime;
	}
	public void setCreatedTime(Date createdTime) {
		this.createdTime = createdTime;
	}
	public Integer getUpdatedUserId() {
		return updatedUserId;
	}
	public void setUpdatedUserId(Integer updatedUserId) {
		this.updatedUserId = updatedUserId;
	}
	public Date getUpdatedTime() {
		return updatedTime;
	}
	public void setUpdatedTime(Date updatedTime) {
		this.updatedTime = updatedTime;
	}
	
}

创建dao接口 SysUsrerMapper 这里注意一个是配置文件名字是一样的

 

代码:

package com.bdqn.dao;

import com.bdqn.pojo.SysUser;
import org.apache.ibatis.annotations.Param;

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

public interface SysUserMapper {
     //统计用户数量
     int count();
     //查询用户列表
     List<SysUser> getUserList();
     //根据真实姓名模糊查询用户信息
     //@Param realName 姓名
     //@return 用户集合
     List<SysUser> getUserByRealName(String realName);
     //查询用户列表
     //@Param realName 姓名
     //@return 用户集合
     List<SysUser> getUserByPojo(SysUser sysUser);
     /**
      * 查询用户列表
      * @param userMap map参数
      * @return 用户集合
      */
     List<SysUser> getUserListByMap(Map<String,Object>userMap);
     /**
      * 查询用户列表
      * @param realName 真实姓名
      * @param roleId 角色id
      * @return 用户集合
      */
     List<SysUser>getUserListByParams(@Param("realName")String realName,@Param("roleId")int roleId);
     /**
      * 条件查询,用户信息,包含角色中文名称
      * @param sysUser 用户对象
      * @return 用户集合
      */
     List<SysUser>getUserListWithRoleName(SysUser sysUser);

     /**
      * 根据角色id查询用户信息
      * @param roleId 角色id
      * @return 用户信息集合
      */
     List<SysUser>getUserAndRoleList(@Param("roleId")Integer roleId);

}

- 创建SysUserMapper.xml文件

 代码:

<?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="com.bdqn.dao.SysUserMapper">
<select id="count" resultType="int">
select count(1) from t_sys_user
</select>
    <!-- 查询用户列表 -->
    <select id="getUserList" resultType="SysUser">
        select * from  t_sys_user
    </select>
    <select id="getUserByRealName" resultType="SysUser" parameterType="string">
        select * from t_sys_user where realName like concat('%',#{realName},'%')
    </select>
  <select id="getUserByPojo" parameterType="SysUser" resultType="SysUser">
 select * from t_sys_user where realName like concat('%',#{realName},'%') and roleId=#{roleId}
  </select>
    <select id="getUserListByMap" resultType="SysUser" parameterType="map">
         select * from t_sys_user where realName like concat('%',#{rName},'%') and roleId=#{rId}
    </select>
    <select id="getUserListByParams" resultType="SysUser">
        select * from t_sys_user where realName like concat('%',#{realName},'%') and roleId=#{roleId}
    </select>
    <select id="getUserListWithRoleName" parameterType="SysUser" resultMap="userAdRole">
        select u.*,r.roleName from t_sys_user u,t_sys_role r where u.roleId=r.id and u.realName like concat('%',#{realName},'%')
    </select>

    <resultMap id="userAdRole" type="SysUser">
        <!--id:column数据库字段  ,property 实体类属性-->
        <id property="id" column="id"/>
        <result property="userRoleName" column="roleName"/>
        <result property="realName" column="realName"/>
        <!--使用association关联映射-->
        <!--property:实体类中用来映射查询结果子集属性,javaType:property指定属性数据类型 -->
        <association property="sysRole" javaType="SysRole">
            <id property="id" column="rid"/>
            <result property="code" column="code"/>
            <result property="roleName" column="roleName"/>

        </association>
    </resultMap>
    <select id="getUserAndRoleList" parameterType="int" resultMap="userAdRole">
 SELECT u.*,r.id AS rid,r.`code`,r.`roleName` FROM t_sys_user u, t_sys_role r
        WHERE u.`roleId` =r.`id` and u.roleId =#{roleId}
</select>
</mapper>

 创建SysUserTest测试类

代码:

package com.bdqn.Test;

import com.bdqn.dao.SysUserMapper;
import com.bdqn.pojo.SysUser;
import com.bdqn.utlis.MyBatisUtil;


import org.apache.ibatis.session.SqlSession;
import org.junit.Test;


import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class SysUserTest {
@Test
    public void test01(){
    SqlSession sqlSession= MyBatisUtil.createSqlSession();
    int count=sqlSession.getMapper(SysUserMapper.class).count();
    System.out.println("一共有"+count+"数据");
}
@Test
    public void  test(){
    SqlSession sqlSession= MyBatisUtil.createSqlSession();
    List<SysUser> count = sqlSession.getMapper(SysUserMapper.class).getUserList();
    for (SysUser sysUser : count) {
        System.out.println(sysUser);

    }
}
@Test
    public  void test02(){
    SqlSession sqlSession=MyBatisUtil.createSqlSession();
    List<SysUser> count =sqlSession.getMapper(SysUserMapper.class).getUserByRealName("刘");
    for (SysUser sysUser : count) {
        System.out.println("查出来的名字"+sysUser.getRealName()+"密码是"+sysUser.getPassword());
    }
}
@Test
    public  void  test03(){
    SysUser sysUser=new SysUser();
    sysUser.setRealName("刘");
    sysUser.setRoleId(2);

    SqlSession sqlSession=MyBatisUtil.createSqlSession();
    List<SysUser> count =sqlSession.getMapper(SysUserMapper.class).getUserByPojo(sysUser);

    for (SysUser sysUser01 : count) {
        System.out.println("查出来的名字"+sysUser01.getRealName()+"密码是"+sysUser01.getPassword());
    }
}
@Test
    public  void  test04(){
    SqlSession sqlSession=null;
    List<SysUser>userList=null;
    try{
        SysUser user=new SysUser();
        user.setRealName("李");
        user.setRoleId(2);
        sqlSession=MyBatisUtil.createSqlSession();
        userList=sqlSession.getMapper(SysUserMapper.class).getUserByPojo(user);
    }catch (Exception e){
        e.printStackTrace();
    }
    finally {
        //关闭SqlSession
        MyBatisUtil.closeSqlSession(sqlSession);
    }
    for (SysUser sysUser : userList) {
        System.out.println(sysUser.getRealName());

    }
}
    @Test
    public  void  test05(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        try{
            Map<String,Object>userMap=new HashMap<>();
            userMap.put("rName","刘");
            userMap.put("rId",2);
            sqlSession=MyBatisUtil.createSqlSession();
            userList=sqlSession.getMapper(SysUserMapper.class).getUserListByMap(userMap);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (SysUser sysUser : userList) {
            System.out.println(sysUser);

        }
    }
    @Test
    public  void  test06(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        try{
            Map<String,Object>userMap=new HashMap<>();
            sqlSession=MyBatisUtil.createSqlSession();
            userList=sqlSession.getMapper(SysUserMapper.class).getUserListByParams("刘",2);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (SysUser sysUser : userList) {
            System.out.println(sysUser+"\t");

        }
    }
    @Test
    public  void  test07(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        try{
            SysUser user=new SysUser();
            user.setRealName("李");
            sqlSession=MyBatisUtil.createSqlSession();
            userList=sqlSession.getMapper(SysUserMapper.class).getUserListWithRoleName(user);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (SysUser sysUser : userList) {
            System.out.println("姓名:"+sysUser.getRealName()+"\t职业:"+sysUser.getUserRoleName());

        }
    }
    @Test
    public  void  test08(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        try{
            sqlSession=MyBatisUtil.createSqlSession();
            userList=sqlSession.getMapper(SysUserMapper.class).getUserAndRoleList(2);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (SysUser sysUser : userList) {
            System.out.println(sysUser.getRealName()+sysUser.getSysRole().getRoleName()+sysUser.getAccount());

        }
    }
}



解析:

大家可以看见我们前面声明的都是对象,慢慢的我们使用注解@Param ,Map,角色对象,大家可能有些不懂我来给大家解释一下。

第一个

List<SysUser> getUserListByMap(Map<String,Object>userMap);

使用Map申明一个string类型的Object

<select id="getUserListByMap" resultType="SysUser" parameterType="map">
     select * from t_sys_user where realName like concat('%',#{rName},'%') and roleId=#{rId}
</select>

和之前的没啥区别就是类型是map了parameterType="map

@Test
public  void  test05(){
    SqlSession sqlSession=null;
    List<SysUser>userList=null;
    try{
        Map<String,Object>userMap=new HashMap<>();
        userMap.put("rName","刘");
        userMap.put("rId",2);
        sqlSession=MyBatisUtil.createSqlSession();
        userList=sqlSession.getMapper(SysUserMapper.class).getUserListByMap(userMap);
    }catch (Exception e){
        e.printStackTrace();
    }
    finally {
        //关闭SqlSession
        MyBatisUtil.closeSqlSession(sqlSession);
    }
    for (SysUser sysUser : userList) {
        System.out.println(sysUser);

    }
}

创建对象使用map带的.put进行赋值

---------------------------------------------------------------------------------------------------------------------------------

第二个注解

List<SysUser>getUserListByParams(@Param("realName")String realName,@Param("roleId")int roleId);

使用@Param声明int类型和String类型的值

<select id="getUserListByParams" resultType="SysUser">
    select * from t_sys_user where realName like concat('%',#{realName},'%') and roleId=#{roleId}
</select>

和之前的一样返回类型就是我们的实体类

@Test
public  void  test06(){
    SqlSession sqlSession=null;
    List<SysUser>userList=null;
    try{
        Map<String,Object>userMap=new HashMap<>();
        sqlSession=MyBatisUtil.createSqlSession();
        userList=sqlSession.getMapper(SysUserMapper.class).getUserListByParams("刘",2);
    }catch (Exception e){
        e.printStackTrace();
    }
    finally {
        //关闭SqlSession
        MyBatisUtil.closeSqlSession(sqlSession);
    }
    for (SysUser sysUser : userList) {
        System.out.println(sysUser+"\t");

    }
}

直接创建HasMap对象getUserListByParams("刘",2);直接赋值

---------------------------------------------------------------------------------------------------------------------------------

第三个

List<SysUser>getUserListWithRoleName(SysUser sysUser);

对象形式

<select id="getUserListWithRoleName" parameterType="SysUser" resultMap="userAdRole">
    select u.*,r.roleName from t_sys_user u,t_sys_role r where u.roleId=r.id and u.realName like concat('%',#{realName},'%')
</select>

<resultMap id="userAdRole" type="SysUser">
    <!--id:column数据库字段  ,property 实体类属性-->
    <id property="id" column="id"/>
<result property="userRoleName" column="roleName"/>
    </association>
</resultMap>

我们直接声明resultMap因为我们实体类

private  String userRoleName;   //角色名称

创建了另一个表的数据所以我们使用map里面的resultMap id就是我们声明map的名称 type就是返回的类型。

<di 先对应

<result   property="userRoleName"实体类里面的名称 column="realName"数据库的名称

@Test
public  void  test07(){
    SqlSession sqlSession=null;
    List<SysUser>userList=null;
    try{
        SysUser user=new SysUser();
        user.setRealName("李");
        sqlSession=MyBatisUtil.createSqlSession();
        userList=sqlSession.getMapper(SysUserMapper.class).getUserListWithRoleName(user);
    }catch (Exception e){
        e.printStackTrace();
    }
    finally {
        //关闭SqlSession
        MyBatisUtil.closeSqlSession(sqlSession);
    }
    for (SysUser sysUser : userList) {
        System.out.println("姓名:"+sysUser.getRealName()+"\t职业:"+sysUser.getUserRoleName());

    }
}

直接创建对象set赋值

---------------------------------------------------------------------------------------------------------------------------------

第四个

List<SysUser>getUserAndRoleList(@Param("roleId")Integer roleId);

使用注解根据传进的roleId

    <resultMap id="userAdRole" type="SysUser">
        <!--id:column数据库字段  ,property 实体类属性-->
        <id property="id" column="id"/>
        <result property="userRoleName" column="roleName"/>

        <!--使用association关联映射-->
        <!--property:实体类中用来映射查询结果子集属性,javaType:property指定属性数据类型 -->
        <association property="sysRole" javaType="SysRole">
            <id property="id" column="rid"/>
            <result property="code" column="code"/>
            <result property="roleName" column="roleName"/>
        </association>
    </resultMap>

    <select id="getUserAndRoleList" parameterType="int" resultMap="userAdRole">
 SELECT u.*,r.id AS rid,r.`code`,r.`roleName` FROM t_sys_user u, t_sys_role r
        WHERE u.`roleId` =r.`id` and u.roleId =#{roleId}
</select>

因为我们注解返回的是int所以类型就是int resultMap="userAdRole"可以从新创建一个map也可以使用以前那个。

<association property="sysRole" javaType="SysRole"> <id property="id" column="rid"/> <result property="code" column="code"/> <result property="roleName" column="roleName"/> </association>

开始声明配置另一个表的数据 SELECT u.*,r.id AS rid,r.`code`,r.`roleName`这几个属性

名字就是sysRole我们实体类

private  SysRole sysRole;      //角色对象

创建的对象的名称 返回类型就是javaType="SysRole"我们这个表,下面的就是实体类和数据库对应。

@Test
public  void  test08(){
    SqlSession sqlSession=null;
    List<SysUser>userList=null;
    try{
        sqlSession=MyBatisUtil.createSqlSession();
        userList=sqlSession.getMapper(SysUserMapper.class).getUserAndRoleList(2);
    }catch (Exception e){
        e.printStackTrace();
    }
    finally {
        //关闭SqlSession
        MyBatisUtil.closeSqlSession(sqlSession);
    }
    for (SysUser sysUser : userList) {
        System.out.println(sysUser.getRealName()+sysUser.getSysRole().getRoleName()+sysUser.getAccount());

    }
}

直接赋值就可以。

下面是Mabatis的剩下的练习

package com.bdqn.dao;

import com.bdqn.pojo.Address;
import com.bdqn.pojo.SysUser;
import org.apache.ibatis.annotations.Param;

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

public interface SysUserMapper {
     //统计用户数量
     int count();
     //查询用户列表
     List<SysUser> getUserList();
     //根据真实姓名模糊查询用户信息
     //@Param realName 姓名
     //@return 用户集合
     List<SysUser> getUserByRealName(String realName);
     //查询用户列表
     //@Param realName 姓名
     //@return 用户集合
     List<SysUser> getUserByPojo(SysUser sysUser);
     /**
      * 查询用户列表
      * @param userMap map参数
      * @return 用户集合
      */
          List<SysUser> getUserListByMap(Map<String,Object>userMap);
     /**
      * 查询用户列表
      * @param realName 真实姓名
      * @param roleId 角色id
      * @return 用户集合
      */
     List<SysUser>getUserListByParams(@Param("realName")String realName,@Param("roleId")int roleId);
     /**
      * 条件查询,用户信息,包含角色中文名称
      * @param sysUser 用户对象
      * @return 用户集合
      */
     List<SysUser>getUserListWithRoleName(SysUser sysUser);

     /**
      * 根据角色id查询用户信息
      * @param roleId 角色id
      * @return 用户信息集合
      */
     List<SysUser>getUserAndRoleList(@Param("roleId")Integer roleId);
/*
以上已经讲过
* -------------------------------------------------------------------------
从下面开始讲解
* */


/*
* 连表查询
* */
     List<SysUser> getUserAndAddressList(@Param("userId")Integer userId);


     /*88888888888888888888888888888888888888888888888888*/

     /*
     * 增删改
     * */
     int insertSysUser(SysUser sysUser);

     int update(SysUser sysUser);

     int delete(@Param("id") int id);


/*if条件*/
     List<SysUser>getUserListByIf(@Param("rname")String rname,@Param("rid")Integer rid);

/*wher条件*/
     List<SysUser> getUserListByWhere(@Param("rname")String rname,@Param("rid")Integer rid);
     /*choose条件*/
     List<SysUser> getUserListByChoose(SysUser sysUser);
     /*以数组形式*/
     List<SysUser> getUserListByArray(Integer[]roleIds);
     /*以List集合形式*/
     List<SysUser> getUserListByList(List<Integer> roleList);
     /*以Map集合方式*/
     List<SysUser>getUserListByRoleMap(Map<String,Object> roleMap);
     /*以set形式*/
     int updateSysUserBySet(SysUser sysUser);
     /*以trim形式*/
     List<SysUser>getUserListByTime(@Param("rname")String rname,@Param("rid")Integer rid);
     /*以trim形式后缀形式*/
     int updateSysUserByTime(SysUser sysUser);
     /*分页*/
     List<SysUser> getSysUserListByPage(@Param("rname")String name,@Param("rid")Integer rid,@Param("pageBegin")Integer PageBegin,@Param("pageSize")Integer pageSize);
     }

 

第一个

/*
* 连表查询
* */
     List<SysUser> getUserAndAddressList(@Param("userId")Integer userId);

我们使用连表查新,一共有个表我们在SysUser实体类里面创建Address的List的集合用来保存参数,然后我们在SysUserMapper.xml 里面

<select id="getUserAndAddressList" parameterType="int" resultMap="userAndAddress">
    SELECT u.*,a.id AS aid,a.contact,a.addressDesc FROM t_sys_user u,t_address a WHERE u.id=a.userId <!--AND u.id=#{userId}-->
</select>

<resultMap id="userAndAddress" type="SysUser">
    <id property="id" column="id"/>
    <collection property="addressList" ofType="Address">
        <id property="id" column="id"/>
    </collection>

</resultMap>

在这里我们使用resulMapq 起个名字在调用

<resultMap id="userAndAddress" type="SysUser">
    <id property="id" column="id"/>
    <collection property="addressList" ofType="Address">
        <id property="id" column="id"/>
    </collection>

</resultMap>

首先我们声明SysUser表里面创建的Address里面的       private List<Address>  addressList;

所以我们要先声明SysUser

<resultMap id="userAndAddress" type="SysUser"> <id property="id" column="id"/>

再去声明我么Address里面的数据因为我们前面 声明 自动映射数据所以只声明id就够了 property 就是我们的名称:

<setting name="autoMappingBehavior" value="FULL"/>  FULL:全部使用自动映射

 <collection property="addressList" ofType="Address">
        <id property="id" column="id"/>
    </collection>

测试

 @Test
    public  void  test09() {
        SqlSession sqlSession = null;
        List<SysUser> userList = null;
        try {
            sqlSession = MyBatisUtil.createSqlSession();
            userList = sqlSession.getMapper(SysUserMapper.class).getUserAndAddressList(1);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (SysUser sysUser : userList) {
            System.out.println(sysUser.getRealName());
            for (Address address:sysUser.getAddressList()){
                System.out.println(address.getCreatedTime()+address.getAddressDesc());
            }
        }

使用Mybatis增删改

dao接口

     /*
     * 增删改
     * */
     int insertSysUser(SysUser sysUser);

     int update(SysUser sysUser);

     int delete(@Param("id") int id);

SysUserMapper.xml代码

//添加 
<insert id="insertSysUser" parameterType="SysUser">
        insert into  t_sys_user(account,realName,password,sex,birthday,phone,address,roleId,createdUserId,createdTime,updatedUserId,updatedTime)
        values (#{account},#{realName},#{password},#{sex},#{birthday},#{phone},#{address},#{roleId},#{createdUserId},#{createdTime},#{updatedUserId},#{updatedTime})
    </insert>
//修改
    <update id="update" parameterType="SysUser">
        update  t_sys_user set account=#{account},realName=#{realName},password=#{password},sex=#{sex},birthday=#{birthday},phone=#{phone},address=#{address},roleId=#{roleId},createdUserId=#{createdUserId},createdTime=#{createdTime},updatedUserId=#{updatedUserId},updatedTime=#{updatedTime}
        where id=#{id}
    </update>
//删除
    <delete id="delete" parameterType="int">
        delete from t_sys_user where id=#{id}
    </delete>

测试类代码

 //添加

 @Test
    public  void  test10(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        int count=0;
        try{
            sqlSession=MyBatisUtil.createSqlSession();
            SysUser sysUser=new SysUser();
            sysUser.setAccount("zha");
            sysUser.setRealName("zha001");
            sysUser.setPassword("123.com");
            sysUser.setSex(2);
            Date bir =new SimpleDateFormat("yyyy-MM-dd").parse("2003-12-11");
            sysUser.setBirthday(bir);
            sysUser.setPhone("12345678");
            sysUser.setAddress("北京天安门");
            sysUser.setRoleId(2);
            sysUser.setCreatedUserId(1);
            sysUser.setCreatedTime(bir);
            sysUser.setUpdatedUserId(2);
            sysUser.setUpdatedTime(bir);
            count=sqlSession.getMapper(SysUserMapper.class).insertSysUser(sysUser);
            sqlSession.commit();
        }catch (Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            count=0;
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        if (count>0){
            System.out.println("添加成功");

        }else {
            System.out.println("添加失败");

        }
    }
//修改

    @Test
    public  void  test11(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        int count=0;
        try{
            sqlSession=MyBatisUtil.createSqlSession();
            SysUser sysUser=new SysUser();
            sysUser.setId(25);
            sysUser.setAccount("ZhaoGuangYuan");
            sysUser.setRealName("Zha001");
            sysUser.setPassword("123.Com");
            sysUser.setSex(2);
            Date bir =new SimpleDateFormat("yyyy-MM-dd").parse("2003-12-11");
            sysUser.setBirthday(bir);
            sysUser.setPhone("12345678");
            sysUser.setAddress("北京天安门");
            sysUser.setRoleId(2);
            sysUser.setCreatedUserId(1);
            sysUser.setCreatedTime(bir);
            sysUser.setUpdatedUserId(2);
            sysUser.setUpdatedTime(bir);
            count=sqlSession.getMapper(SysUserMapper.class).update(sysUser);
            sqlSession.commit();
        }catch (Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            count=0;
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        if (count>0){
            System.out.println("修改成功");

        }else {
            System.out.println("修改失败");

        }
    }
//删除

    @Test
    public  void  test12(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        int count=0;
        try{
            sqlSession=MyBatisUtil.createSqlSession();
            count=sqlSession.getMapper(SysUserMapper.class).delete(21);
            sqlSession.commit();
        }catch (Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            count=0;
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        if (count>0){
            System.out.println("删除成功");

        }else {
            System.out.println("删除失败");

        }

if判断 

if条件判断


/*if条件*/
     List<SysUser>getUserListByIf(@Param("rname")String rname,@Param("rid")Integer rid);

SysUserMapper.xml代码

  <resultMap id="userAdRole" type="SysUser">
        <!--id:column数据库字段  ,property 实体类属性-->
        <id property="id" column="id"/>
        <result property="userRoleName" column="roleName"/>
        <result property="realName" column="realName"/>
        <!--使用association关联映射-->
        <!--property:实体类中用来映射查询结果子集属性,javaType:property指定属性数据类型 -->
        <association property="sysRole" javaType="SysRole">
            <id property="id" column="rid"/>
            <result property="code" column="code"/>
            <result property="roleName" column="roleName"/>

        </association>
    </resultMap>  

<select id="getUserListByIf" resultMap="userAdRole">
        select u.*,r.id as rid , r.roleName from t_sys_user u,t_sys_role r where u.roleId =r.id
        <if test="rid !=null">
            and u.roleId=#{rid}
        </if>
        <if test="rname!=null and rname!=''">
            and u.realName like concat('%',#{rname},'%')
        </if>
    </select>

解析代码:

我们使用连表查询的时候在SysUser实体类里面创建了一个角色对象

private  SysRole sysRole;      //角色对象

我们使用resultMap来连接表resulMap id就是我们起的名字  type就是类型的意思,他的类型是SysUser表如何我们前面没有设置自动映射需要手动来配置数据,如果设置了自动映射我们只需要配置一个表的id就可以。

配置完SysUser我们使用

<association property="sysRole" javaType="SysRole">

property 属性名称 ,javaType 数据类型 

  ----------------------------------------------------------------

  

<if test="rid !=null">
            and u.roleId=#{rid}
        </if>
        <if test="rname!=null and rname!=''">
            and u.realName like concat('%',#{rname},'%')
        </if>

  if条件判断就是if结果为真则运行下面的代码 如果第一个条件不合符则使用第二个判断,

如果我们要判断Spring类型需要加个and rname!=''",数据类型就不需要使用直接"rid !=null 就可以。

  

  

测试代码:

//测试
 
@Test
    public  void  test013(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        try{
            Map<String,Object>userMap=new HashMap<>();
            sqlSession=MyBatisUtil.createSqlSession();
            userList=sqlSession.getMapper(SysUserMapper.class).getUserListByIf("",null);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (SysUser sysUser : userList) {
            System.out.println("姓名"+sysUser.getRealName()+"      职业"+sysUser.getSysRole().getRoleName());

        }

where条件

/*wher条件*/
     List<SysUser> getUserListByWhere(@Param("rname")String rname,@Param("rid")Integer rid);

SysUserMapper.xml代码:

    <select id="getUserListByWhere" resultType="SysUser">
        select * from t_sys_user
        <!--where会自动去除and-->
        <where>
            <if test="rid !=null">
                and roleId=#{rid}
            </if>

            <if test="rname!=null and rname!=''">
                and realName like concat('%',#{rname},'%')
            </if>
        </where>
    </select>

代码分析:

使用where加上条件判断,where循环会自动去掉and if跟上一个一样,

 

 测试代码:

 @Test
    public  void  test015(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        try{
            Map<String,Object>userMap=new HashMap<>();
            sqlSession=MyBatisUtil.createSqlSession();
            userList=sqlSession.getMapper(SysUserMapper.class).getUserListByWhere("赵",2);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (SysUser sysUser : userList) {
            System.out.println("姓名"+sysUser.getRealName());

        }
    }

choose条件判断

 /*choose条件*/
     List<SysUser> getUserListByChoose(SysUser sysUser);

    SysUserMapper.xml代码:

 <select id="getUserListByChoose" resultType="SysUser" parameterType="SysUser">
        select * from t_sys_user
        <where>
            <choose>
                <when test="realName !=null and realName !=''">
                    and realName like concat('%',#{realName},'%')
                </when>
                <when test="roleId !=null">
                    and roleId =#{roleId}
                </when>
                    <otherwise>
                        and year (createdTime)=YEAR (#{createdTime})
                    </otherwise>
            </choose>
        </where>
    </select>

使用choose 就是把if 改成了when然后条件和if一样 如果when条件里面的条件没有合适的他就会执行<otherwise>里面的代码

测试类:

  @Test
    public  void  test014(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        try{
            SysUser sysUser=new SysUser();
            /*sysUser.setRealName("赵");*/
            /*sysUser.setRoleId(2);*/
            Date createTime =new  SimpleDateFormat("yyyy-MM-dd").parse("2016-08-09");
            sysUser.setCreatedTime(createTime);
            sqlSession=MyBatisUtil.createSqlSession();
            userList=sqlSession.getMapper(SysUserMapper.class).getUserListByChoose(sysUser);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (SysUser sysUser : userList) {
            System.out.println("姓名"+sysUser.getRealName());

        }

以数组形式in多个值

 /*以数组形式*/
     List<SysUser> getUserListByArray(Integer[]roleIds);

 SysUserMapper.xml 代码

    <select id="getUserListByArray" resultType="SysUser">
        select * from t_sys_user   where roleId in
        <foreach collection="array" item="item" open="(" separator="," close=")" >
            #{item}
        </foreach>
    </select>

因为是多个值所以使用<foreach  collection="array" 类型  item="item" 名称

 

测试类代码

  @Test
    public  void  test016(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        try{
            Integer[] roleId={1,2};
            sqlSession=MyBatisUtil.createSqlSession();
            userList=sqlSession.getMapper(SysUserMapper.class).getUserListByArray(roleId);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (SysUser sysUser : userList) {
            System.out.println("姓名"+sysUser.getRealName());

        }
    }

创建数组然后存取 1和2  然后存入

 以List集合形式

  /*以List集合形式*/
     List<SysUser> getUserListByList(List<Integer> roleList);

SysUserMapper.xml代码

    <select id="getUserListByList" resultType="SysUser">
                select * from t_sys_user   where roleId in
        <foreach collection="list" item="item" open="(" separator="," close=")" >
            #{item}
        </foreach>
    </select>

还是跟上面一样

测试类代码

@Test
    public  void  test017(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        try{
            List<Integer> roleIdList=new ArrayList<>();
            roleIdList.add(1);
            roleIdList.add(2);
            sqlSession=MyBatisUtil.createSqlSession();
            userList=sqlSession.getMapper(SysUserMapper.class).getUserListByList(roleIdList);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (SysUser sysUser : userList) {
            System.out.println("姓名"+sysUser.getRealName());

        }
    }

创建List集合然后add添加进去

以Map形式

   /*以Map集合方式*/
     List<SysUser>getUserListByRoleMap(Map<String,Object> roleMap);

 SysUserMapper.xml 代码

   <select id="getUserListByRoleMap" resultType="SysUser">
        select * from t_sys_user   where roleId in
        <foreach collection="roleIdLst" item="item" open="(" separator="," close=")" >
            #{item}
        </foreach>
    </select>

测试类代码

    @Test
    public  void  test018(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        try{
            List<Integer> roleIdList=new ArrayList<>();
            roleIdList.add(1);
            roleIdList.add(2);
            Map<String,Object>roleMap =new HashMap<>();
            roleMap.put("roleIdLst",roleIdList);
            sqlSession=MyBatisUtil.createSqlSession();
            userList=sqlSession.getMapper(SysUserMapper.class).getUserListByRoleMap(roleMap);
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (SysUser sysUser : userList) {
            System.out.println("姓名"+sysUser.getRealName());

        }
    }

大家可以看见我们使用Map 调用List集合list帮我们把值封装好我么直接调用就可以

collection="roleIdLst" 这里写的是调用list的名字大家注意

以set形式修改

   /*以set形式*/
     int updateSysUserBySet(SysUser sysUser);

 SysUserMapper.xml

 <update id="updateSysUserBySet" parameterType="SysUser">
        update t_sys_user
        <set>
            <if test="account !=null and account!=''">
            account=#{account},
            </if>
            <if test="realName !=null and realName!=''">
                realName=#{realName},
            </if>
            <if test="password !=null and password!=''">
                password=#{password},
            </if>
            <if test="birthday !=null">
                birthday=#{birthday},
            </if>
        </set>
        where id=#{id}
    </update>

大家可以看见我么修改需要set才可以少了set就会报错所以我i们直接set 然后进行判断

测试类代码:

    @Test
    public  void  test19(){
        SqlSession sqlSession=null;
        List<SysUser>userList=null;
        int count=0;
        try{
            sqlSession=MyBatisUtil.createSqlSession();
            SysUser sysUser=new SysUser();
            sysUser.setId(17);
           /* sysUser.setAccount("zhao111111");
            sysUser.setRealName("guang");
            sysUser.setPassword("123.Com");*/
            Date bir =new SimpleDateFormat("yyyy-MM-dd").parse("2023-12-28");
            sysUser.setBirthday(bir);
            count=sqlSession.getMapper(SysUserMapper.class).updateSysUserBySet(sysUser);
            sqlSession.commit();
        }catch (Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            count=0;
        }
        finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        if (count>0){
            System.out.println("修改成功");

        }else {
            System.out.println("修改失败");

        }
    }

以Time形式

 /*以trim形式*/
     List<SysUser>getUserListByTime(@Param("rname")String rname,@Param("rid")Integer rid);

 SysUserMapper.xml  代码

    <select id="getUserListByTime" resultType="SysUser">
        select * from t_sys_user
        <trim prefix="where" prefixOverrides="and|or">
            <if test="rid !=null">
                and roleId =#{rid}
            </if>
            <if test="rname !=null and rname!=''">
                and realName like concat('%',#{rname},'%')
            </if>
        </trim>
    </select>

trim 标签可以前缀后缀 我们加条件通常有and or 前缀和后缀我们使用 Time 标签直接写值他会帮我们加入 prefix 前缀  prefixOverrides  覆盖前缀

prefix="where" prefixOverrides="and|or

测试类

  @Test
    public  void  test20() {
        SqlSession sqlSession = null;
        List<SysUser> userList = null;
        try {
            sqlSession = MyBatisUtil.createSqlSession();
            userList = sqlSession.getMapper(SysUserMapper.class).getUserListByTime("赵", 2);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
        } finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
            for (SysUser sysUser : userList) {
                System.out.println(sysUser.getRealName() + sysUser.getPassword());

            }
        }

         以Time形式后缀

     /*以trim形式后缀形式*/
     int updateSysUserByTime(SysUser sysUser);

SysUserMaper.xml

    <update id="updateSysUserByTime" parameterType="SysUser">
         update t_sys_user
         <trim prefix="set" suffixOverrides="," suffix="where id=#{id}">
             <if test="realName !=null and realName !=''">
                 realName=#{realName},
             </if>
             <if test="password !=null and password !=''">
                 password=#{password},
             </if>
         </trim>
    </update>
suffixOverrides="," suffix="where id=#{id}"

suffixOverrides   省略   suffix  后缀

测试类:

   @Test
        public  void  test21(){
            SqlSession sqlSession=null;
            List<SysUser>userList=null;
            int count=0;
            try{
                sqlSession=MyBatisUtil.createSqlSession();
                SysUser sysUser=new SysUser();
                sysUser.setId(1);
                sysUser.setPassword("111111111111");
                sysUser.setRealName("李四");
                count=sqlSession.getMapper(SysUserMapper.class).updateSysUserByTime(sysUser);
                sqlSession.commit();
            }catch (Exception e){
                e.printStackTrace();
                sqlSession.rollback();
                count=0;
            }
            finally {
                //关闭SqlSession
                MyBatisUtil.closeSqlSession(sqlSession);
            }
            if (count>0){
                System.out.println("修改成功");

            }else {
                System.out.println("修改失败");

            }
    }

分页

   /*分页*/
     List<SysUser> getSysUserListByPage(@Param("rname")String name,@Param("rid")Integer rid,@Param("pageBegin")Integer PageBegin,@Param("pageSize")Integer pageSize);
     }

SysUserMapper.xml

    <select id="getSysUserListByPage" resultType="SysUser">
        select * from t_sys_user
        <where>
            <if test="rname !=null and rname!=''">
               and realName like concat('%',#{rname},'%')
            </if>
            <if test="rid !=null">
                and roleId =#{rid}
            </if>
        </where>
        order by createdTime
        limit #{pageBegin},#{pageSize}
    </select>

where if 条件判断就不用说了 order by 分组 时间查询    

pageBegin  条件下标 从几开始查    
pageSize 每页显示的条数

 

  测试类

 @Test
    public  void  test22() {
        SqlSession sqlSession = null;
        List<SysUser> userList = null;
        try {
            sqlSession = MyBatisUtil.createSqlSession();
            String rname="李";
            Integer rid=null;
            Integer pageIndex =1;//当前页码
            Integer pageSize=3; //每页显示条数
            Integer pageBegin=(pageIndex-1)*pageSize;//条件下标,查询起始位置
            userList = sqlSession.getMapper(SysUserMapper.class).getSysUserListByPage(rname,rid,pageBegin,pageSize);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭SqlSession
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (SysUser sysUser : userList) {
            System.out.println(sysUser.getRealName() + sysUser.getPassword()+sysUser.getPhone());

        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值