首页 > 其他分享 >复杂条件查询功能

复杂条件查询功能

时间:2023-01-29 17:25:20浏览次数:35  
标签:功能 String 复杂 dao 查询 user sql import public

 

复杂条件查询功能-分析

 

 

 

复杂条件查询功能-代码实现-每页数据条件查询

package com.example.day17_case.service.impl;


import com.example.day17_case.dao.UserDao;
import com.example.day17_case.dao.impl.UserDaoImpl;
import com.example.day17_case.domain.PageBean;
import com.example.day17_case.domain.User;
import com.example.day17_case.service.UserService;

import java.util.List;
import java.util.Map;

public class UserServiceImpl implements UserService {
    private UserDao dao = new UserDaoImpl();

    @Override
    public List<User> findAll() {
        //调用Dao完成查询
        return dao.findAll();
    }

    @Override
    public User login(User user) {
        return dao.findUserByUsernameAndPassword(user.getUsername(),user.getPassword());
    }

    @Override
    public void addUser(User user) {
        dao.add(user);
    }

    @Override
    public void deleteUser(String id) {
        dao.delete(Integer.parseInt(id));
    }

    @Override
    public User findUserById(String id) {
        return dao.findById(Integer.parseInt(id));
    }

    @Override
    public void updateUser(User user) {
        dao.update(user);
    }

    @Override
    public void delSelectedUser(String[] ids) {
        if(ids != null && ids.length > 0){
            //1.遍历数组
            for (String id : ids) {
                //2.调用dao删除
                dao.delete(Integer.parseInt(id));
            }
        }

    }

    @Override
    public PageBean<User> findUserByPage(String _currentPage, String _rows, Map<String, String[]> condition) {

        int currentPage = Integer.parseInt(_currentPage);
        int rows = Integer.parseInt(_rows);

        if(currentPage <=0) {
            currentPage = 1;
        }
        //1.创建空的PageBean对象
        PageBean<User> pb = new PageBean<User>();
        //2.设置参数
        pb.setCurrentPage(currentPage);
        pb.setRows(rows);

        //3.调用dao查询总记录数
        int totalCount = dao.findTotalCount(condition);
        pb.setTotalCount(totalCount);
        //4.调用dao查询List集合
        //计算开始的记录索引
        int start = (currentPage - 1) * rows;
        List<User> list = dao.findByPage(start,rows,condition);
        pb.setList(list);

        //5.计算总页码
        int totalPage = (totalCount % rows)  == 0 ? totalCount/rows : (totalCount/rows) + 1;
        pb.setTotalPage(totalPage);


        return pb;
    }
}

 

package com.example.day17_case.dao.impl;

import com.example.day17_case.dao.UserDao;
import com.example.day17_case.domain.User;
import com.example.day17_case.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class UserDaoImpl implements UserDao {

    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public List<User> findAll() {
        //使用JDBC操作数据库...
        //1.定义sql
        String sql = "select * from user";
        List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));

        return users;
    }

    @Override
    public User findUserByUsernameAndPassword(String username, String password) {
        try {
            String sql = "select * from user where username = ? and password = ?";
            User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username, password);
            return user;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

    @Override
    public void add(User user) {
        //1.定义sql
        String sql = "insert into user values(null,?,?,?,?,?,?,null,null)";
        //2.执行sql
        template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());
    }

    @Override
    public void delete(int id) {
        //1.定义sql
        String sql = "delete from user where id = ?";
        //2.执行sql
        template.update(sql, id);
    }

    @Override
    public User findById(int id) {
        String sql = "select * from user where id = ?";
        return template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id);
    }

    @Override
    public void update(User user) {
        String sql = "update user set name = ?,gender = ? ,age = ? , address = ? , qq = ?, email = ? where id = ?";
        template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail(), user.getId());
    }

    @Override
    public int findTotalCount(Map<String, String[]> condition) {
        //1.定义模板初始化sql
        String sql = "select count(*) from user where 1 = 1 ";
        StringBuilder sb = new StringBuilder(sql);
        //2.遍历map
        Set<String> keySet = condition.keySet();
        //定义参数的集合
        List<Object> params = new ArrayList<Object>();
        for (String key : keySet) {

            //排除分页条件参数
            if("currentPage".equals(key) || "rows".equals(key)){
                continue;
            }

            //获取value
            String value = condition.get(key)[0];
            //判断value是否有值
            if(value != null && !"".equals(value)){
                //有值
                sb.append(" and "+key+" like ? ");
                params.add("%"+value+"%");//?条件的值
            }
        }
        System.out.println(sb.toString());
        System.out.println(params);

        return template.queryForObject(sb.toString(),Integer.class,params.toArray());
    }

    @Override
    public List<User> findByPage(int start, int rows, Map<String, String[]> condition) {
        String sql = "select * from user  where 1 = 1 ";

        StringBuilder sb = new StringBuilder(sql);
        //2.遍历map
        Set<String> keySet = condition.keySet();
        //定义参数的集合
        List<Object> params = new ArrayList<Object>();
        for (String key : keySet) {

            //排除分页条件参数
            if("currentPage".equals(key) || "rows".equals(key)){
                continue;
            }

            //获取value
            String value = condition.get(key)[0];
            //判断value是否有值
            if(value != null && !"".equals(value)){
                //有值
                sb.append(" and "+key+" like ? ");
                params.add("%"+value+"%");//?条件的值
            }
        }

        //添加分页查询
        sb.append(" limit ?,? ");
        //添加分页查询参数值
        params.add(start);
        params.add(rows);
        sql = sb.toString();
        System.out.println(sql);
        System.out.println(params);

        return template.query(sql,new BeanPropertyRowMapper<User>(User.class),params.toArray());
    }
}

 

标签:功能,String,复杂,dao,查询,user,sql,import,public
From: https://www.cnblogs.com/yuzong/p/17072787.html

相关文章

  • C++ Day10 统计圣经文本的词频 &文本查询程序
    一、编程题--统计圣经出现的单词以及词频统计一篇英文(The_Holy_Bible.txt)文章中出现的单词和词频,输入:某篇文章的绝对路径;输出:词典(词典中的内容为每一行都是一个“单词......
  • 使用响应头重写功能,解决跨域问题
    借助:ReplaceGoogleCDN响应头重写功能,解决跨域问题缘由:临时起意,想看deno在【微博站点或者微信公众号】中被搜索引擎收录情况,并且把结果显示在指定站点关键点:解决不同站......
  • ReplaceGoogleCDN扩展功能使用二:拦截请求域名
    文档说明:只记录关键地方;2023-01-29使用例子:例子:拦截访问域名https://www.jingjingxyk.com更多玩法,可配合content_scripts实现清除内容农场规则例子[{......
  • ReplaceGoogleCDN扩展功能使用一: 修改UserAgent
    文档说明:只记录关键地方;2023-01-29目的:因为屏幕小,移动端使用神马搜索太不方便了,想在PC端使用神马搜索实验:通过chromedev-tools控制台调试发现,把UserAgent修改为移......
  • ES聚合分桶查询报错分析,trying to create too many buckets
    场景es查询报错,报错如下:tryingtocreatetoomanybuckets.mustbelessthanorequalto:[10000]butwas[10001].问题分析显示网上搜索了一番,大都给出了问题原......
  • 二分查询
    话不多说直接上代码(Coding):/***二分查找*二分查找是一种算法在一个有序的元素列表中查询一个元素如果存在则返回该元素的索引没有则返回null*比一般查询......
  • 使用Hiprint实现简单单面打印功能
    打印插件很多,但是好用的不是很多,之前项目中经常使用的是lodop打印插件,但是遇见新版本的谷歌浏览器后就经常出现卡死现象,为此想把项目中常用的单页打印模块用其他插件替换,之......
  • day65 -查询完
    拆表查询查询父子信息,将一张表拆成两张看待进行查询--查询父子信息:把一张表拆成两张表SELECTa.`categoryname`AS'父栏目',b.`categoryname`AS'子栏目'FROM`......
  • 苹果iPhone 日历查询功能异常
    2022年底苹果发布了IOS16.2版本系统,此时间段内所有升级的用户都将会出现日历查询功能失效,字符错乱等诸多问题。与客服沟通后告知,日历记录内容查询是没有时间限制的,可以无......
  • 河北稳控科技振弦采集模块配置工具VMTool 扩展功能指令生成器与实时曲线
    河北稳控科技振弦采集模块配置工具VMTool扩展功能指令生成器与实时曲线 指令生成器(1)指令生成指令生成器可根据需要生成符合MODBUS和AABB通讯协议的读取和控制指......