pojo:不按mvc分层,只是javabean有一些属性,还有getset方法
domain:不按mvc分层,只是javabean有一些属性,还有getset方法
po:用在持久层,还可以再增加或者修改的时候,从页面直接传入action中,它里面的javabean 类名等于表名,
属性名等于表的字段名,还有对应的getset方法
vo:view object表现层对象,主要用于在高级查询中从页面接收传过来的各种参数.好处是扩展性强
bo:用在servie层,现在企业基本不用.
这些po,vo,bo,pojo可以用在各种层面吗
可以,也就是po用在表现层,vo用在持久层不报错,因为都是普通的javabean没有语法错误.但是在企业最好不要混着用,因为这些都是设计的原则,混着用比较乱.不利于代码维护.
#{id}-占位符
${value}拼接符字符串原样拼接。
resultType:返回单条是指定是接收数据的类型pojo,返回多条结果的时候,得到的结果是是集合的泛型的类型。
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 = ?
非常的人性化,特别的棒棒!!
sql标签和include标签搭配使用
and username like '%${username}%'
and sex = #{sex}
应用场景:select* fromuser where id in (?,?,?) 不要使用or语句使用or语句查询速度会非常的慢
场景:多个表进行映射,单个的实体无法容纳全部的结果。
方式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;
…….
}