mybatis中的模糊查询
- 方式一
传递条件时就附加%
- 方式二
在xml中拼接%
- 方式三
在xml中通过函数拼接%
- 方式四
在xml中拼接%(接口中没有给参数写注解时使用value,使用注解时用具体名字)
- ${变量} 和#{变量}区别
${变量}变量的名字不能任意,使用注解的名称,没有注解则使用默认值value
#{变量} 变量的名字可以任意定义,相当于占位符
mybatis 中主键的使用
表中的主键设置为自增长,所以在插入数据时是不需要插入主键的。mybatis可以把插入后的主键值在放回给实体bean对象的属性里。
order 用于规定在增加后或者是在增加前执行这个sql语句
mybatis中的分页
可以使用第三方的分页插件
用到的依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.3</version>
</dependency>
mybatis核心xml中添加插件
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
需要先通过PageHelper.startPage()置当前页数和页量,在执行查询。PageHelper.startPage()会在其之后执行的第一条sql查询语句拼接 limit
@Test
public void pageTest() throws IOException {
InputStream is = Resources.getResourceAsStream("SqlSessionConfig.xml");
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sf.openSession();
//需要先在设置当前页数和页量,在执行查询
PageHelper.startPage(1,3);
UserMapper userMapper = session.getMapper(UserMapper.class);
List<User> list = userMapper.findAll();
PageInfo<User> pageInfo = new PageInfo<User>(list);
System.out.println("当前页数"+pageInfo.getPageNum());
System.out.println("页量"+pageInfo.getPageSize());
System.out.println("总页数"+pageInfo.getPages());
System.out.println("总记录数"+pageInfo.getTotal());
System.out.println("当前页的记录数"+pageInfo.getSize());
System.out.println("当前页的记录"+pageInfo.getList());
session.commit();
session.close();
}
mybatis中的多表查询
-
一对一查询
user表和card表是一对一关系
user实体类中除user的属性外还应该有card的对象
select中的返回resultmap中的数据,association和card对象对应,javatype为card对象的类型
-
一对一嵌套查询
把user表中查到的id作为条件,在card表中查询
userMapper.xml中
CardMapper.xml中
-
一对多查询
user和order是一对多的关系
user实体类中除user的属性外还应该有order对象的集合
和一对一的查询类似,需要把association替换为collection,javatype 换为oftype
-
一对多嵌套查询
UserMapper.xml中
OrderMapper.xml中
-
多对多查询
当两张表为多对多关系时,需要一张中间表才能建立多对多的关系
User和Role是多对多关系,user_role是中间表
user实体类中需要有role的集合
当查询结果有重名字段时,最好在查询时给其别名进行区分,否则在最后的映射时会出现混乱。如,user和role 表都有id字段,所以查询出的伪表中就会有两个id,如果都是用 column=“id” 进行映射,那么user对象中的id和role对象中的id将会是同一个值,所以在sql语句中需要对其中一个起别名 as rid ,映射时通过column=“rid” 映射
mybatis动态sql 语句
根据参数的不同产生不同的sql语句
– | – |
---|---|
< where > < /where > | 会给sql语句后面拼接 “where”,会过滤 第一个 “and”,用于查询 |
< if test=“xxxx” > 语句</ if > | 判断test中内容,为真时会拼接if标签内的语句 |
< choose > < when test=“xxx”>语句< /when > < otherwise > 语句 < /otherwise > < /choose > | 类似于switch case 如果when中条件成立则拼接为when中语句,否则拼接otherwise中的语句,可写多个when |
< set >语句< /set > | set会过滤最后一个",",用于update |
< trim > 内容 < /trim > | prefix用于给内容前拼接,suffix用于给内容末尾进行拼接,prefixoverrides用于过滤第一个规定的字符串,suffix用于过滤最后一个规定的字符串 |
< foreach > | 循环,collection=list /array/map的键 mapopen="" 以什么开始 item="" 每次遍历的数据 separator="" 以什么来进行分割 以,逗号来进行分割 close="" 以什么结束 index="" 每次遍历的索引值 |
test中的变量名称是添加注解后的名称或者是类的属性名
传递的条件不为空时,则按条件查询,都为空则查询所有
使用trim实现上述内容,头部拼接where 过滤第一个and
把不为空的属性进行更新
查询某一范围,list
查询某一范围,map 范型< string , List< Integer >>,实现还是查询的还是list
批量增加