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&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&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()); } }