zoukankan      html  css  js  c++  java
  • 模糊查询聚合函数以及查询条件对象的使用

    接上篇 前面操作相同 数据库相同
    一、模糊查询 示例 通过用户名查询用户
    1、接口中添加相应的抽象方法
    /*
    * 模糊查询 查询结果封装成List
    * */
    List findByName(String username);
    2、在映射文件中进行相应的配置

    3、添加测试类
    @Test
    public void testFindByName(){
    IUserDao userDao = session.getMapper(IUserDao.class);
    //因为配置映射文件是没有指明模糊查询的标志 所以在测试类中要进行说明 添加%的标志
    List users = userDao.findByName("%王%");
    //List users = userDao.findByName("王");
    for(User user:users){
    System.out.println(user);
    }
    }
    测试结果:
    User{id=41, username='老王', sex='男', birthday=Tue Feb 27 17:47:08 CST 2018, address='北京'}
    User{id=43, username='小王', sex='女', birthday=Sun Mar 04 11:34:34 CST 2018, address='深圳'}
    User{id=45, username='二王', sex='男', birthday=Sun Mar 04 12:04:06 CST 2018, address='南京'}
    User{id=46, username='王二麻子', sex='男', birthday=Wed Mar 07 17:37:26 CST 2018, address='天津'}

    注意:这里还可以有第二种配置映射文件的方式

    配置了映射文件之后 我们进行测试类的书写
    @Test
    public void testFindByName(){
    IUserDao userDao = session.getMapper(IUserDao.class);
    //List users = userDao.findByName("%王%");
    List users = userDao.findByName("王");
    for(User user:users){
    System.out.println(user);
    }
    }
    注意:这里因为在配置映射文件的时候已经指明了模糊查询的标志 所以在这里我们不需要对其再次进行说明
    测试结果:
    User{id=41, username='老王', sex='男', birthday=Tue Feb 27 17:47:08 CST 2018, address='北京'}
    User{id=43, username='小王', sex='女', birthday=Sun Mar 04 11:34:34 CST 2018, address='深圳'}
    User{id=45, username='二王', sex='男', birthday=Sun Mar 04 12:04:06 CST 2018, address='南京'}
    User{id=46, username='王二麻子', sex='男', birthday=Wed Mar 07 17:37:26 CST 2018, address='天津'}

    那么这两种配置方式有什么不同呢???
    看控制台打印的信息:两种方式的sql语句是不一样的
    (第一种)Preparing: SELECT * from user WHERE username like ?
    (第二种)Preparing: SELECT * from user where username like '%王%'
    这就要说明({}和#{}的区别了 (1)#{}可以实现preparedstatement向占位符中设置值 自动进行jdbc类型和java类型之间的转换 有效防止sql注入 如果parameterType传输单个简单类型 {}中可以是任意值 (2)){}传入的内容拼接在sql中且不进行jdbc类型的转换 如果parameterType传输单个简单类型{}中只能是value

    二、使用聚合函数 示例:查询总记录数
    1、在接口类中添加方法
    /*
    * 计算总记录数
    * */
    public int findTotal();
    2、在映射文件中进行相应的配置

    3、添加相应的测试类
    @Test
    public void testFindTotal(){
    IUserDao userDao = session.getMapper(IUserDao.class);
    int count = userDao.findTotal();
    System.out.println(count);
    }
    输出结果:8

    三、查询条件对象
    为什么需要查询条件对象?现实中可能查询的条件并不单一 并不仅仅是通过用户ID 用户的姓名来进行查询 可能需要用户的其他信息作为查询条件 这时候我们的查询条件就是综合性的查询条件 可以使用传递包装类的形式来传递参数
    1、首先我们需要创建一个查询条件对象 假设我们这里根据用户名查询信息 但是我们将查询条件放到QueryVo的user属性中
    public class QueryVo {
    private User user;
    private List ids;

    public List<Integer> getIds() {
        return ids;
    }
    
    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }
    
    public User getUser() {
        return user;
    }
    
    public void setUser(User user) {
        this.user = user;
    }
    

    }

    2、在持久层中添加相应的方法
    /*
    *
    * */
    List findUserByVo(QueryVo vo);
    3、书写相应的映射配置文件

    4、书写相应的测试类
    @Test
    public void testFindByVo(){
    IUserDao userDao = session.getMapper(IUserDao.class);
    User user = new User();
    QueryVo vo = new QueryVo();
    user.setUsername("小二王");

        vo.setUser(user);
        List<User> users = userDao.findUserByVo(vo);
        System.out.println(users);
        for(User u:users){
            System.out.println(u);
        }
    }
    

    测试结果:
    User{id=41, username='老王', sex='男', birthday=Tue Feb 27 17:47:08 CST 2018, address='北京'}
    User{id=43, username='小王', sex='女', birthday=Sun Mar 04 11:34:34 CST 2018, address='深圳'}
    User{id=45, username='二王', sex='男', birthday=Sun Mar 04 12:04:06 CST 2018, address='南京'}
    User{id=46, username='王二麻子', sex='男', birthday=Wed Mar 07 17:37:26 CST 2018, address='天津'}

  • 相关阅读:
    PCI总线原理(二)
    smbus协议
    PCI总线原理(一)
    计算机术语中关于 Assert 和Deassert 词汇意思
    用安全存储器实现FPGA的身份识别及防拷贝
    主板结构
    qt 雅黑字体
    PCIExpress总线简介
    PHY管理接口(MDIO)
    PCI总线原理(三)
  • 原文地址:https://www.cnblogs.com/phantom576/p/11945184.html
Copyright © 2011-2022 走看看