JAVA学习日志3-3(mybatis)

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
在这里插入图片描述
批量增加
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值