Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将db连接信息和查询参数从控制器传递到JasperReportsMultiFormatView

如何将db连接信息和查询参数从控制器传递到JasperReportsMultiFormatView
EN

Stack Overflow用户
提问于 2011-10-11 20:33:17
回答 2查看 10.3K关注 0票数 7

我正在用SpringMVC3.0与JasperReports一起构建一个web应用程序的原型。我已经完成了使用Spring + Jfreechart + iText + Apache报告应用程序的工作,并且能够成功地使用Spring提供的各个视图类来流pdfs、xls和图像。

这一次,我想尝试使用JasperReports,这样我就可以在应用程序之外设计pdfs,而不必担心了解底层api (不管是jfreechart、itext还是poi)。

问题

我有一个report1.jrxml文件,其中包含带有两个日期参数的查询的queryString标记。当我通过iReport测试报表时,它成功地编译和运行。这里没问题。

现在,我正在阅读以下SpringDocumentshttp://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#view-jasper-reports中的JasperReports部分,并试图使JasperReportsMultiFormatView正常工作,但有一段我不理解:

  1. JasperReportMultiFormatView如何知道要连接的数据库(还记得我在报表中嵌入了查询)?
  2. 文档声明在视图中使用reportDataKey属性,但我看不出这是如何解决问题的方法。
  3. 如何传递参数?

可以做什么

JaperReports提供了一组负责编译、整理和导出报表的xxxManager对象。您可以创建一个实现Spring接口的自定义类,并执行如下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Connection connection;
ServletOutputStream servletOutputStream = response .getOutputStream();
InputStream reportStream = getServlet().getServletConfig().getServletContext().getResourceAsStream("/reports/report1.jasper");
response.setContentType("application/pdf");
Class.forName("com.mysql.jdbc.Driver");
 connection = DriverManager.getConnection("jdbc:mysql://localhost: 
             3306/flightstats?user=user&password=secret");
JasperRunManager.runReportToPdfStream(reportStream,  
                 servletOutputStream, new HashMap(), connection);
connection.close();
servletOutputStream.flush();
servletOutputStream.close();

我需要什么

我需要完成那些利用Spring类(如JasperReportsPdfView、JasperReportsXlsView或更好的JasperReportsMultiFormatView )之上的代码

因此,总之,我需要能够将以下内容从我的控制器传递给jasper报告:

  1. Parameters
  2. Db连接信息,以便jasper中的queryString知道谁将与

运行。

这就是我所拥有的,输出是一个空白的PDF文档,我假设它不知道如何运行查询。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping("/reports/**")
@Controller

public class ReportsController {

@RequestMapping(value ="/reports/usage/report", method = RequestMethod.GET)
public ModelAndView handleSimpleReportMulti(HttpServletRequest request, HttpServletResponse response) throws Exception {

    System.out.println("Made it here");

    Map model = new HashMap();
    //model.put("format", "pdf");
    model.put("START_DATE", new String("09-12-2011"));
    model.put("END_DATE", new String("09-17-2011"));

    return new ModelAndView("report1", model);
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-12 10:53:49

我找到了我问题的答案。我已将上面的控制器改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping(value ="/reports/usage/report/{format}", method = RequestMethod.GET)
public ModelAndView handleSimpleReportMulti(ModelMap modelMap, @PathVariable("format") String format) throws Exception {

    //Map model = new HashMap();
    modelMap.put("format", format);
    modelMap.put("REPORT_CONNECTION", dataSource.getConnection());
    modelMap.put("START_DATE", new String("09-12-2011"));
    modelMap.put("END_DATE", new String("09-17-2011"));

    return new ModelAndView("report1", modelMap);       
}

我已经将我的view.properties更改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#report1(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView
report1(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView
report1.url=/WEB-INF/reports/report1.jasper

我希望这能帮到你。

谢谢

票数 8
EN

Stack Overflow用户

发布于 2012-04-04 07:59:56

我找到了另一种方法将连接作为参数传递,然后关闭它。

问题:

我实现了上面的解决方案--问题是,每次我调用PDF时,都会创建一个新的连接,所以当应用程序达到打开连接的最大限度时,它就会崩溃。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    ReportesDAOJDBC reportes;

    public void setReportes(ReportesDAOJDBC reportes) {
            this.reportes = reportes;
    }

    public ModelAndView leoTest(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

    Map < String, Object > model = new HashMap < String, Object >();
    model.put("PARAMCONTRARECIBO", new Integer(1101));
    model.put("PARAMDOCTOS", new Integer(1101));
    model.put("REPORT_CONNECTION", reportes.getConexion());

    return new ModelAndView("leoTest",model);
    }

传递到JasperReport的连接的参数是REPORT_CONNECTION,但是正如我所说的那样,这样做会导致大量的特洛伊木马。

我的解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    ReportesDAOJDBC reportes;

    public void setReportes(ReportesDAOJDBC reportes) {
            this.reportes = reportes;
    }

    public ModelAndView leoTest(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

    Map < String, Object > model = new HashMap < String, Object >();
    model.put("PARAMCONTRARECIBO", new Integer(1101));
    model.put("PARAMDOCTOS", new Integer(1101));
    model.put("OBJETO_CONEXION", reportes);

    return new ModelAndView(new PdfView("leoTest"),model);
    }

如您所见,我实现了自己的PdfView,并在构造函数中传递了view.properties文件中键定义的名称,并将对DAO (reportes)的引用作为HashMap的参数传递,参数名为"OBJETO_CONEXION“。下面是ReportesDAOJDBC的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public class ReportesDAOJDBC extends JdbcDaoSupport {

      public Connection getConexion() {
         Connection  con ;
         try {
                con = getDataSource().getConnection();
         }
         catch (Exception e) {
           e.printStackTrace();
           return null;
         }
         return con;
      }

      public void closeConecction(Connection con) {
         try {
           if (con != null) {
              con.close();
           }
         }
         catch (Exception e) {
            e.printStackTrace();
         }
       }
      }

接下来的步骤是向您展示我自己的PdfView实现的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    import java.io.File;
    import java.io.OutputStream;
    import java.sql.Connection;
    import java.util.Map;
    import java.util.ResourceBundle;

    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import mx.com.mexican.leinksy.dao.jdbc.ReportesDAOJDBC;
    import mx.com.mexican.leinksy.utils.Utils;
    import net.sf.jasperreports.engine.JasperExportManager;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.engine.JasperReport;
    import net.sf.jasperreports.engine.util.JRLoader;

    import org.springframework.web.servlet.View;
    import org.springframework.web.servlet.view.ResourceBundleViewResolver;

    public class PdfView implements View {

        private static final String CONTENT_TYPE = "application/pdf";
        private String JASPER_URL;


        public PdfView(String jasperUrl){
            this.JASPER_URL = jasperUrl+".url";
        }

        @Override
        public String getContentType() {
            return CONTENT_TYPE;
        }

        @Override
        public void render(Map model, HttpServletRequest request,
                HttpServletResponse response) throws Exception {

            System.out.println(Utils.getRealPath(request));


            ResourceBundle rb       = ResourceBundle.getBundle("view");/* Se lee el archivo view.properties*/
            ReportesDAOJDBC reporte = (ReportesDAOJDBC)model.get("OBJETO_CONEXION");/* Se obtiene el objeto de conexion */
            Connection con          = reporte.getConexion();/* Se genera la conexion a la base de datos*/


            String jasperFilePath     = Utils.getRealPath(request) + rb.getString( JASPER_URL );/* Se obtiene la ruta fisica del archivo .jasper a ejectuar*/
            JasperReport jasperReport = (JasperReport)JRLoader.loadObject(new File(jasperFilePath));/* Se carga el reporte ya compilado*/
            JasperPrint  jasperPrint  = JasperFillManager.fillReport(jasperReport, model, con);/* Se llena el reporte con datos del modelo y con la conexion a la BD*/


            try{

                OutputStream out = response.getOutputStream();

                JasperExportManager.exportReportToPdfStream(jasperPrint, out);/* Se manda el contenido a la salida estandar*/

                out.flush(); 
                out.close();

            }catch(Exception e){
                e.printStackTrace();
            }

            reporte.closeConecction(con);/* Cierro la conexion a la base de datos para liberar el pool*/

        }

    }

如您所见,我使用view.properties类读取ResourceBoundle文件,以获取要加载的.jasper文件的路径和名称,还请注意,我没有编译.jrxml文件--我只是加载了编译的文件,使用IREPORTS编译了jrxml。此外,我还有一个实用程序来获取我的.jasper文件的路径,这是代码,如果您不知道怎么做的话。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static String getRealPath(HttpServletRequest req) {
    ServletContext context = req.getSession().getServletContext();
    String path = context.getRealPath("/");

    if (path != null) {
        if (!path.endsWith(File.separator)) {
            path += File.separator;
        }
    }
    return  path;
}

有了这个实现,我可以控制在哪里打开一个紧密的连接,我也尊重SPRING的MVC模型,而且我仍然使用view.properties。

此时,您可能会问,如果我想要一个EXCEL文件,我还可以做什么呢?我还实现了一个XlsView (Ajuuaaaa!)。以下是代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   import java.io.File;
   import java.io.OutputStream;
   import java.sql.Connection;
   import java.util.Map;
   import java.util.ResourceBundle;

   import javax.servlet.ServletContext;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;

   import mx.com.mexican.leinsky.dao.jdbc.ReportesDAOJDBC;
   import mx.com.mexican.leinksy.utils.Utils;
   import net.sf.jasperreports.engine.JasperExportManager;
   import net.sf.jasperreports.engine.JasperFillManager;
   import net.sf.jasperreports.engine.JasperPrint;
   import net.sf.jasperreports.engine.JasperReport;
   import net.sf.jasperreports.engine.export.JRXlsExporter;
   import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
   import net.sf.jasperreports.engine.util.JRLoader;

   import org.springframework.web.servlet.View;
   import org.springframework.web.servlet.view.ResourceBundleViewResolver;

   public class XlsView implements View {

    private static final String CONTENT_TYPE = "application/vnd.ms-excel";
    private String JASPER_URL;
    private String FILE_NAME = "XLSFile";


    public XlsView(String jasperUrl){
        this.JASPER_URL = jasperUrl+".url";
    }

    @Override
    public String getContentType() {
        return CONTENT_TYPE;
    }

    @Override
    public void render(Map model, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        if(model.get("FILE_NAME")!=null){
            this.FILE_NAME = model.get("FILE_NAME").toString();
        }


        ResourceBundle rb       = ResourceBundle.getBundle("view");/* Se lee el archivo view.properties*/
        ReportesDAOJDBC reporte = (ReportesDAOJDBC)model.get("OBJETO_CONEXION");/* Se obtiene el objeto de conexion */
        Connection con          = reporte.getConexion();/* Se genera la conexion a la base de datos*/


        String jasperFilePath     = Utils.getRealPath(request) + rb.getString( JASPER_URL );/* Se obtiene la ruta fisica del archivo .jasper a ejectuar*/
        JasperReport jasperReport = (JasperReport)JRLoader.loadObject(new File(jasperFilePath));/* Se carga el reporte ya compilado*/
        JasperPrint  jasperPrint  = JasperFillManager.fillReport(jasperReport, model, con);/* Se llena el reporte con datos del modelo y con la conexion a la BD*/

        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-Disposition","attachment; filename=\""+FILE_NAME+".xls\"");
        response.setHeader("Pragma", "No-cache");
        response.setDateHeader("Expires", 1);

        try{

            OutputStream out = response.getOutputStream();

        JRXlsExporter exporterXLS = new JRXlsExporter();
        exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT,jasperPrint);
        exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM,out);
        exporterXLS.exportReport();

        out.flush(); 
        out.close();

    }catch(Exception e){
        e.printStackTrace();
    }

    reporte.closeConecction(con);/* Cierro la conexion a la base de datos para liberar el pool*/

}

}

所以这是我的解决方案,希望能帮上忙!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7735288

复制
相关文章
sql连接查询和嵌套查询_sql子查询和连接查询
【例二】:查询 JAVA第一学年 课程成绩排名前十的学生 并且分数要大于80 的学生信息(学号、姓名、课程名称、分数)
全栈程序员站长
2022/09/22
4.4K0
sql连接查询和嵌套查询_sql子查询和连接查询
Linux/Unix shell 参数传递到SQL脚本
      在数据库运维的过程中,Shell 脚本在很大程度上为运维提供了极大的便利性。而shell 脚本参数作为变量传递给SQL以及SQL脚本也是DBA经常碰到的情形之一。本文主要讨论了如何将shell脚本的参数传递到SQL脚本之中并执行SQL查询。   有关shell与SQL之间的变量传递,请参考:  Linux/Unix shell sql 之间传递变量
Leshami
2018/08/14
2K0
从SocketTimeoutException到全连接队列和半连接队列
大概在一年半之前的时候,我们的应用的某个业务开始间歇报SocketTimeoutException, 不是前端调用我们发生SocketTimeoutException,而是我们用 HTTP Client中台拉取数据的时候,会偶尔报SocketTimeException, 这个偶尔可能是一个月报一次,也可能是两个月报一次,可能一个星期报两次,频率不固定,次数也不固定,当我第一次看到这个异常的时候,我的第一个反应就是用这个异常信息去搜索引擎上搜索解决方案,我并不理解这个异常说明了什么,但是按照我以往的经验来说,一般都有解决方案,对搜索引擎的方案一般都是延长超时时间,于是我延长了超时时间,但这并没有根本上解决问题,还是会出问题。延长超时时间不管用之后,我就扩容,但是扩容依然也不管用,我当时在尝试复现这个异常的时候,也忽略了一些东西,然后导致我在测试无法复现,能够复现的问题都是好问题,我之前面试的时候也背过三次握手,也学过Java 的原生Socket 编程,Netty,我背过Tomcat的acceptCount参数,但是碰到这个问题,这些知识仍然没有帮我解决问题,原因当时我网络的知识没有连接起来,他们孤零零的,向孤零零的神经元一样,没建立起来连接,最后这个问题开始让这些知识开始建立连接,成体系的发展。连接才是有价值的。
fliter
2023/10/09
5140
从SocketTimeoutException到全连接队列和半连接队列
从Python传递参数到C++
有些场景下,需要将Python里面计算得到的参数或者结果传入到C++来进行工程部署。一个常见问题是,Python该以什么格式 (二进制还是文本) 保存这些参数,然后从C++代码里面来读取呢,各有什么优劣?这里我们简单实验一下,并写一些趁手的代码,供查阅。
王云峰
2023/10/21
3400
如何将多个参数传递给 React 中的 onChange?
在 React 中,一些 HTML 元素,比如 input 和 textarea,具有 onChange 事件。onChange 事件是一个非常有用、非常常见的事件,用于捕获输入框中的文本变化。有时候,我们需要将多个参数同时传递给 onChange 事件处理函数,在本文中,我们将介绍如何实现这一目标。
网络技术联盟站
2023/06/07
2.7K0
Mysql状态信息查询--连接相关
查看连接线程相关的系统变量的设置值 show variables like 'thread%';
陈不成i
2021/06/15
1.4K0
Golang函数参数的值传递和引用传递
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数
仙人技术
2021/08/31
2.5K0
Golang函数参数的值传递和引用传递
java之方法的参数传递(值传递和引用传递)
基础数据类型参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响;
西西嘛呦
2020/08/26
2.1K0
《Java从入门到失业》第四章:类和对象(4.4):方法参数及传递
       关于这个知识点,我想了很久该不该在这里阐述。因为这个知识点稍微有点晦涩,并且就算不了解也不影响用Java编写代码。不过笔者刚开始工作的时候,就是因为这块内容没有过多的关注,以至于相当于长一段时间对这块内容都模糊不清甚至误解。我相信你们都比我悟性高,因此决定还是先拿出来讨论。
用户7801119
2020/09/27
1.1K0
SQL service基础(四)连接查询、自身连接查询、外连接查询和复合条件连接查询[通俗易懂]
INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N’T1′, N’李力 ‘, N’男’, 47, N’教授 ‘, 1800, 3000, N’计算机 ‘) GO INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N’T2′, N’王平 ‘, N’女’, 28, N’讲师 ‘, 850, 1200, N’信息 ‘) GO INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N’T3′, N’刘伟 ‘, N’男’, 30, N’讲师 ‘, 900, 1200, N’计算机 ‘) GO INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N’T4′, N’张雪 ‘, N’女’, 51, N’教授 ‘, 1900, 3000, N’自动化 ‘) GO INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N’T5′, N’张兰 ‘, N’女’, 39, N’副教授 ‘, 1300, 2000, N’信息 ‘) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C1′, N’程序设计 ‘, 60) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C2′, N’微机原理 ‘, 80) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C3′, N’数字逻辑 ‘, 60) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C4′, N’数据结构 ‘, 80) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C5′, N’数据库 ‘, 60) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C6′, N’编译原理 ‘, 60) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C7′, N’操作系统 ‘, 60) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T1′, N’C1′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T1′, N’C4′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T2′, N’C5′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T3′, N’C1′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T3′, N’C5′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T4′, N’C2′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T4′, N’C3′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T5′, N’C5′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T5′, N’C7′, NULL) GO INSERT [dbo].[S] ([SNO], [SN], [SEX], [AGE], [DEPT]) V
全栈程序员站长
2022/08/23
2.3K0
SQL service基础(四)连接查询、自身连接查询、外连接查询和复合条件连接查询[通俗易懂]
从VBA的vbNullString认识API参数传递
最近在写个简单的程序时,用到了API FindWindow,复制声明后,直接就把代码写了,可是发现一直找不到窗口,代码:
xyj
2021/03/18
1.8K0
js从 URL 获取查询参数
从 URL 获取查询参数 <script> function getParameterByName(name, url) { if (!url) url
江一铭
2022/06/16
10.5K0
从ajax获取参数到控制器Laravel
route Route::get('search', 'ShowstaffController@search'); 接收变量
双面人
2020/02/17
1.2K0
从 AI 到 信息安全
如果把AI算法用来做个性化推荐,那么算法和被推荐对象会是一种 “相互取悦” 的关系,被推荐者一定希望推荐给他的是他需要的(在隐私保护做的好的前提下),算法也努力试图去计算出被推荐者真正需要的东西,二者是同向而行,或者至少,被推荐对象不会躲着AI走(推荐给我不需要的东西,什么心态?)。 但是算法用来做安全对抗就完全不一样了,算法努力计算出攻击者画像、预测出攻击者的行为,而攻击者则努力规避算法的计算,试图通过各种方式绕开AI的猜测,于是变成了一场对抗。 这是AI算法应用在信息安全的客观情况,包括网络入侵、帐号
数说君
2022/08/25
6040
从 AI 到 信息安全
FastAPI从入门到实战(5)——查询参数与字符串校验
在大多数情况下,需要某些东西时,可以简单地省略 default 参数,因此你通常不必使用 ... 或 Required
MinChess
2022/12/27
6360
FastAPI从入门到实战(5)——查询参数与字符串校验
如何从SharePoint Content DB中查询List数据
SharePoint用来维护基础数据非常方便,只需要建立自定义列表,然后使用InfoPath自定义一下维护界面,就可以实现在线的增删改查,开发效率很高。如果维护的数据需要进行审批,还可以加入工作流功能。使用SharePoint Designer可以快速开发出简单的工作流,如果是很复杂的工作流,那么就需要使用VS进行开发了。现在数据已经维护进了SharePoint List,那么怎么从数据库中将维护的数据查询出来呢?
深蓝studyzy
2022/06/16
3.1K0
从信息熵到Codec
过去几个月,我常常思考一个问题——多媒体(通信)技术到底解决什么问题?交付什么样的服务呢?目前得到的答案是:
LiveVideoStack
2021/09/01
2510
sql sever分组查询和连接查询
分组查询 select 查询信息 from 表名 where 条件 group by 按照列分组(可多个 ,隔开) order by 排序方式 (查询信息如果列名和聚合函数同时出现,要么在聚合函数中出现,要么就使用分组进行查询) having 条件    分组筛选(一般和group by连用,位置在其后) where:用来筛选from子句指定的操作所产生的行 group by:用来分组where子句输出 having:用来从分组的结果中筛选行 1.分组查询是针对表中不同的组分类统计和输出的 2.having
房上的猫
2018/03/14
2.2K0
MyBatis快速入门——第二章、参数传递demo(id查询&模糊查询)
【#】会把传入的数据都当成一个字符串来处理,会在传入的数据上面加一个双引号来处理。
红目香薰
2022/11/30
4050
MyBatis快速入门——第二章、参数传递demo(id查询&模糊查询)
点击加载更多

相似问题

如何将参数从控制器传递到视图,视图传递到控制器?

10

iOS -如何将信息从视图传递到控制器?

22

如何将参数从控制器传递到模板?

23

如何将参数从视图传递到控制器?

111

如何将参数从控制器传递到服务

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文