阅读 54

Mybatis入门学习

#{ } 和 ${ } 取值的区别

#{} : 是以预编译的形式,将参数设置到sql语句中,防止sql注入;

${} : 取出的值会直接拼接在sql语句中,会有安全问题;

resultMap自定义结果

resultTyperesultMap 只能同时用一个



 


	
	
	
		
		
		
		
		
		
		
		
		
	
	
	
	
	

关联查询

查询 学生信息 的时候把对应的 班级信息 也查询出来

学生信息

package com.garcon.bean;

public class Student {

	private Integer sid;
	private String lastName;
	private String gender;
	private String hobby;
	private Sclass sclass;//班级信息
	
	...
	}

班级信息

package com.garcon.bean;

public class Sclass {

	private Integer cid;//班级id
	private String cName;//班级名称
	
	...
	}

Mapper接口

package com.garcon.dao;

public interface StudentMapper {

    //以sid查询学生信息
    public Student getStudentById(Integer sid);
}

resultMap 级联属性



 


    
	
		
		
		
		
		
		
		
	
	
	
	
	

或 以下
resultMapassociation 属性



 


    
	
		
		
		
		
		
		
		
			
			
		
	
	
	
	
	

关联查询 collection

查询班级信息的同时查出班级所对应的学生信息

学生类

package com.garcon.bean;

public class Student {

	private Integer sid;
	private String lastName;
	private String gender;
	private String hobby;
	private Sclass sclass;//班级信息
	
	...
	}

班级类

package com.garcon.bean;

public class Sclass {

	private Integer cid;//班级id
	private String cName;//班级名称
	private List students;
	
	...
	}

Mapper班级接口

package com.garcon.dao;

public interface SclassMapper {

    //以班级id查询班级
    public Sclass getSclassById(Integer cid);
}

sclassMapper.xml



 

	
 
	
		
		
		
		
			
			
			
			
			
		
	
 
	
	

分步查询 association

先以学生的 学号 查询学生信息,再以 学生信息中的班级编号 查询班级信息

班级接口

package com.garcon.dao;

public interface Sclass {

    //以班级id查询班级信息
    public Sclass getSclasstById(Integer cid);
}
  • StudentMapper.java 学生接口
package com.garcon.dao;

public interface StudentMapper {

    //以sid查询学生信息
    public Student getStudentById(Integer sid);
}

sclassMapper.xml



 

	
	
	
	

studentMapper.xml



 

	
    
	 
	 
	 	
	 	
	 	
	 	
	 	
	 	
 		
 		
	 
	
	 
	

分步查询 collection

先以 班级编号 查询班级信息,再以 班级编号 查询班级的所有学生信息

SclassMapper班级接口

package com.garcon.dao;

public interface Sclass {

    //以班级id查询班级信息
    public Sclass getSclasstById(Integer cid);
}

StudentMapper学生接口

package com.garcon.dao;

public interface StudentMapper {

    //以班级编号查询学生信息
    public List getStudentByClassId(Integer sid);
}

sclassMapper.xml



 

	
    
	
		
		
		
	
 
	
	
	
	

studentMapper.xml



 

	
	
	 
	

分步查询 延迟加载

适用情况:假如查看学生信息的时候不加载班级信息,当需要查看学生的班级信息的时候再加载班级信息

  • 在分步查询的基础上,在mybatis的全局配置文件的settings设置项中添加如下设置即可

		
		
		

鉴别器 discriminator

鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为

  • 如果查出的是女生:就把班级信息查询出来,否则不查询;如果是男生,把last_name这一列的值赋值给 hobby;
  • studentMapper.xml


 

    
	 
	 	
	 	
	 	
	 	
	 	
	 	
	 	
	 		
	 		
	 			
		 		
	 		
	 		
	 		
		 		
			 	
			 	
			 	
	 		
	 	
	 
  • sclassMapper.xml


 

	
	
	
	

动态SQL

if







where

  • 去除查询条件中多余的第一个 andor


        

trim




  

choose



update-set

如果javaBean中哪个属性带了值就更新那个字段


	 	
	 	update student 
		
			
				last_name=#{lastName},
			
			
				hobby=#{hobby},
			
			
				gender=#{gender}
			
		
		where id=#{id} 

update-trim


		update student 
		
			
				last_name=#{lastName},
			
			
				email=#{email},
			
			
				gender=#{gender}
			
		
		where id=#{id}
	 

select-foreach


insert-foreach

批量插入


	
	 	insert into student(last_name,gender,hobby,class_id) 
		values
		
			(#{student.lastName},#{student.gender},#{student.hobby},#{student.sclass.cid})
		
	 
	 

    
	 	
	 		insert into student(last_name,gender,hobby,class_id)
	 		values((#{student.lastName},#{student.gender},#{student.hobby},#{student.sclass.cid})
	 	
	  
	 
	 
	 

	 
	 	
	 		insert into employees(employee_id,last_name,email) 
			    values(employees_seq.nextval,#{emp.lastName},#{emp.email});
	 	
	 
	 	
	 	
	 
	 	insert into employees(employee_id,last_name,email)
            
	 				select #{emp.lastName} lastName,#{emp.email} email from dual
	 		
	 

获取自增主键的值

方式一 :
使用insert标签的属性useGeneratedKeys="true" keyProperty="id"


        insert into user(username,password,email) values(#{username},#{password},#{email})

方式二 : 插入时先查询将要插入数据的自增id值

 
        
            select last_insert_id()
        
        insert into user(username,password,email) values(#{username},#{password},#{email})
    

参数处理

单个参数

可以接受基本类型,对象类型,集合类型的值。这种情况 MyBatis可直接使用这个参数,不需要经过任何处理。

多个参数

任意多个参数,都会被MyBatis重新包装成一个Map传入。Map的key是param1,param2,0,1…,值就是参数的值。

命名参数

为参数使用@Param起一个名字,MyBatis就会将这些参数封装进map中,key就是我们自己指定的名字

POJO

当这些参数属于我们业务POJO时,我们直接传递POJO

Map

我们也可以封装多个参数为map,直接传递

注意 : 当参数是一个Connection , List , Array数组时, 参数会封装成一个Map , key值为 : connection , list , array .

原文:https://www.cnblogs.com/cyan-orange/p/15335219.html

文章分类
百科问答
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐