Mybatis-高级查询下

一、各种实体类的简介及作用

        pojo:不按mvc分层,只是javabean有一些属性,还有getset方法

        domain:不按mvc分层,只是javabean有一些属性,还有getset方法

        po:用在持久层,还可以再增加或者修改的时候,从页面直接传入action,它里面的javabean 类名等于表名,

属性名等于表的字段名,还有对应的getset方法

        vo:view object表现层对象,主要用于在高级查询中从页面接收传过来的各种参数.好处是扩展性强

        bo:用在servie,现在企业基本不用.

        这些po,vo,bo,pojo可以用在各种层面吗

        可以,也就是po用在表现层,vo用在持久层不报错,因为都是普通的javabean没有语法错误.但是在企业最好不要混着用,因为这些都是设计的原则,混着用比较乱.不利于代码维护.

二、输入映射paramterType 

        #{id}-占位符

        ${value}拼接符字符串原样拼接。


	

三、输出映射

        resultType:返回单条是指定是接收数据的类型pojo,返回多条结果的时候,得到的结果是是集合的泛型的类型。

四、动态sql

    1、where和if搭配使用

select id="findUsersByNameAndSex" parameterType="org.lier.zz.User" resultType="org.lier.zz.User">
		select *from user where 1=1 
		<--  这种方式拼接完成的sql有问题 -->
		
			and username like '%${username}%'
		
		
			and sex = #{sex}
		
	
拼接完成 的sql是这样的:
	select *from user where 1=1 and username like '%李%' and sex = ? 
这样的话,即便不传入值也能获取相应的结果。
	
更改:
	
	这种方式生成的sql语句:
		select *from user WHERE username like '%李%' and sex = ? 
	非常的人性化,特别的棒棒!!

    2、sql的重用

sql标签和include标签搭配使用
	
		
			
			
				and username like '%${username}%'
			
			
				and sex = #{sex}
			
		
	

	

    3、foreach语句

 应用场景:select* fromuser where id in (?,?,?) 不要使用or语句使用or语句查询速度会非常的慢

    4、单个对象关系映射

场景:多个表进行映射,单个的实体无法容纳全部的结果。

方式1:将两个表对应的实体类进行平铺,如下

public class CustomOrders extends Orders{
	
	private int uid;
	private String username;
	private String sex;
	private Date birthday;
	private String address;
	…geter and seter method
}
	< –  一对一:自动映射 – >
	

    这是一种偷懒的做法,将相关表单的实体类进行平铺,Mybatis中是不提倡的。~_~

< – 一对一手动映射 – >
	
	
		
		
		
		
		
		
		
		
			
			
			
			
			
		
	
	
	
	class文件中:
	
public class Orders {
	
	private Integer id;
	
	private Integer userId;
	
	private String number;
	
	private Date createtime;
	
	private String note;
	
	private User user;
	…….geter and seter methods
}

      这是Mybatis提倡的方式。


	
		
		
		
		
		
		
		
			
			
			
			
			
		
	

	
	public class User {
	
	private int id;
	private String username;
	private String sex;
	private Date birthday;
	private String address;
	private List orders;
	…….
}
        

你可能感兴趣的:(Mybatis)