程序执行顺序:
1.Mybatis Generator
作用:根据数据库中的表自动生成实体类(类中属性与表的字段一一对应),映射文件等文件
2.Example类
作用: 拼接sql语句,方便灵活
3. and or联合查询如何使用Example?
例如:
select count(*) from user Where (Id=1 and name="jack") or (id=2 and Name="Tom")
代码:
UserExample userExample=new UserExample();
UserExample.Criteria criteria=example.createCriteria();
Criteria.andIdEqualTo(1); //给查询条件1赋值
Criteria.andNameEqualTo("jack"); //给查询条件1赋值
UserExample.Criteria criteria2=example.createCriteria();
Criteria2.andIdEqualTo(2); //给查询条件2赋值
Criteria2.andNameEqualTo("Tom"); //给查询条件2赋值
example.or(criteria2); //or映射
userPadMapper.countByExample(userPadExample); //执行查询
4.每个数据库字段,mybatis Generator会自动产生一堆Example方法
4.1方法名的格式与含义
以andIdIsNull() 为例
方法名的格式: and + 属性名+含义
方法名的含义: 判断Id是否为空
4.2属性不同,但是自动产生的方法都相似的
,以属性id为例,看看自动产生的方法一般都有哪些
andIdIsNull() //判断是否为空
andIdIsNotNull() //判断是否不为空
andIdEqualTo(Integer value) //判断Id是否与value相等
andIdNotEqualTo(Integer value) //判断Id是否与value不相等
andIdGreaterThan(Integer value) //判断Id是否大于value
andIdGreaterThanOrEqualTo(Integer value) //判断Id是否大于等于value
andIdLessThan(Integer value) //判断Id是否小于value
andIdLessThanOrEqualTo(Integer value) //判断Id是否小于等于value
andIdIn(List<Integer> values) //判断Id是否和List中某个值相等
andIdNotIn(List<Integer> values) //判断Id的值是否与List中任何一个值都不相等
andIdBetween(Integer value1, Integer value2) //判断Id是否在2个值中间
andIdNotBetween(Integer value1, Integer value2) //判断Id是否不在2个值中间
5.criteria查询是mybatis提供的一种更加面向对象的查询方式
Criterion是最基本,最底层的Where条件
Criteria包含一个Cretiron的集合,每一个Criteria对象内包含的Cretiron之间是由AND连接的,是逻辑与的关系。
Example内有一个成员叫oredCriteria,是Criteria的集合,就想其名字所预示的一样,这个集合中的Criteria是由OR连接的,是逻辑或关系。oredCriteria就是ORed Criteria。
6.Mybatis的动态sql本质就是拼接sql语句,满足条件就加在sql语句上,不满足条件就不加
看个实际例子:
用户查询的时候,有很多查询条件
select * from user
select * from user where id=1;
select * from user where name="张三"
select * from user where name="张三" and id=2
select * from user where name="张三" and id=2 and age=19
........
........
不可能针对每一种情况,程序员都自己写对应的sql语句,需要一种更便捷的方法,就是动态sql
代码:
selec* from user <where>
<if test="id!=null">
and id=#{id} </if>
<if test="name!=null">
and name=#{name} </if>
<if test="age!=null">
and age=#{age} </if>
<if test="sex!=null">
and sex=#{sex} </if>
....
</where>
解释: 1. <where>标签,如果后面有查询条件,那么会在selec* from user 后面添加一个where 变成 selec* from user where
2. if标签中的test是判断条件,如果满足条件,就将标签中的内容添加到
selec* from user where后面,不满足就不添加,因此,用户输入哪种查询条件,就会自动生成相应的sql语句
注意:where语句会自动省略第一个and