动态SQL的原生方式

描述:
通过动态sql查询员工信息和所对应的部门
涉及知识:
Mysql+JDBC+Serlvet+JAXA+JSON+HTML+JS
项目名称和包的结构
在这里插入图片描述
domain实体类中


package domain;

import java.util.Date;

public class Emp {
    private Integer empno;
    private String ename;
    private String job;
    private Integer mgr;
    private Date hriedate;
    private Float sal;
    private Float comm;
    private Integer deptno;

    public Emp() {
    }

    public Emp(Integer empno, String ename, String job, Integer mgr, Date hriedate, Float sal, Float comm, Integer deptno) {
        this.empno = empno;
        this.ename = ename;
        this.job = job;
        this.mgr = mgr;
        this.hriedate = hriedate;
        this.sal = sal;
        this.comm = comm;
        this.deptno = deptno;
    }

    public Integer getEmpno() {
        return empno;
    }

    public void setEmpno(Integer empno) {
        this.empno = empno;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public Integer getMgr() {
        return mgr;
    }

    public void setMgr(Integer mgr) {
        this.mgr = mgr;
    }

    public Date getHriedate() {
        return hriedate;
    }

    public void setHriedate(Date hriedate) {
        this.hriedate = hriedate;
    }

    public Float getSal() {
        return sal;
    }

    public void setSal(Float sal) {
        this.sal = sal;
    }

    public Float getComm() {
        return comm;
    }

    public void setComm(Float comm) {
        this.comm = comm;
    }

    public Integer getDeptno() {
        return deptno;
    }

    public void setDeptno(Integer deptno) {
        this.deptno = deptno;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "empno=" + empno +
                ", ename='" + ename + '\'' +
                ", job='" + job + '\'' +
                ", mgr=" + mgr +
                ", hriedate=" + hriedate +
                ", sal=" + sal +
                ", comm=" + comm +
                ", deptno=" + deptno +
                '}';
    }
}

业务层service中

package service;

import dao.EmpDao;
import domain.Emp;

import java.util.List;

public class EmpService {
    private EmpDao dao=new EmpDao();
    //查寻所有的deptno
    public List<Integer> selectAllDeptno(){
        return dao.selectAllDeptno();
    }
    //查寻所有的job
    public List<String> selectAllJob(){
        return dao.selectAllJob();
    }

    //根据给定的两个信息条件  查询emp对象的结果
    public List<Emp> selectEmp(String deptno,String job){
        return  dao.selectEmp(deptno,job);
    }
}

数据访问层dao中

package dao;

import domain.Emp;

import java.security.spec.ECField;
import java.sql.*;
import java.util.*;

public class EmpDao {

    //查询所有的deptno
    public List<Integer> selectAllDeptno(){
        List<Integer> deptnoList=new ArrayList<>();
        try{
            String driver="com.mysql.jdbc.Driver";
            String url="jdbc:mysql://localhost:3306/testmybatis?useSSL=true";
            String username="root";
            String password="123456";
            String sql="select distinct deptno from emp order by deptno";
            Class.forName(driver);
            Connection conn=DriverManager.getConnection(url,username,password);
            PreparedStatement pstat=conn.prepareStatement(sql);
            ResultSet rs=pstat.executeQuery();
            while(rs.next()){
                deptnoList.add(rs.getInt("deptno"));
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return  deptnoList;
    }

    //查询所有的job
    public List<String> selectAllJob(){
        List<String> JobList=new ArrayList<>();
        try{
            String driver="com.mysql.jdbc.Driver";
            String url="jdbc:mysql://localhost:3306/testmybatis?useSSL=true";
            String username="root";
            String password="123456";
            String sql="select distinct job from emp order by job";
            Class.forName(driver);
            Connection conn=DriverManager.getConnection(url,username,password);
            PreparedStatement pstat=conn.prepareStatement(sql);
            ResultSet rs=pstat.executeQuery();
            while(rs.next()){
                JobList.add(rs.getString("job"));
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return  JobList;
    }

    public List<Emp> selectEmp(String deptno,String job){
            List<Emp> empList=new ArrayList<>();
            //为了以后将参数和sql都交给pstat对象来处理  将参数包装在一个容器中
            Map<String,Object> paramsList=new LinkedHashMap<String,Object>();
            String sql="select * from emp where 1=1";
            if(deptno!=null&&!"".equals(deptno)){
                sql+=" and deptno=#{deptno}";
                paramsList.put("deptno",deptno);
            }
            if(job!=null&&!"".equals(job)){
                sql+=" and job=#{job}";
                paramsList.put("job",job);
            }
            System.out.println(sql+"拼接的sql");
        try{
            String driver="com.mysql.jdbc.Driver";
            String url="jdbc:mysql://localhost:3306/testmybatis?useSSL=true";
            String username="root";
            String password="123456";
            Class.forName(driver);
            Connection conn=DriverManager.getConnection(url,username,password);
            PreparedStatement pstat=conn.prepareStatement(sql);
            //给参数赋值
            int index=1;//控制问号的位置
            Iterator it=paramsList.keySet().iterator();
            while(it.hasNext()){
                Object value=paramsList.get(it.next());
                pstat.setObject(index++,value);
            }
            //执行结果集
            ResultSet rs=pstat.executeQuery();
            while(rs.next()){
                Emp emp=new Emp();
                emp.setEmpno(rs.getInt("empno"));
                emp.setEname(rs.getString("ename"));
                emp.setJob(rs.getString("job"));
                emp.setHriedate(rs.getDate("hiredate"));
                emp.setSal(rs.getFloat("sal"));
                emp.setComm(rs.getFloat("comm"));
                emp.setDeptno(rs.getInt("deptno"));
                empList.add(emp);
            }
            rs.close();
            pstat.close();
            conn.close();
        }catch (Exception e){
            e.printStackTrace();
        }
        return empList;
    }

}

流程控制层controller
SelectDeptnoAndJobController类中

package controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPObject;
import service.EmpService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/selectDeptnoAndJob")
public class SelectDeptnoAndJobController extends HttpServlet {
    private EmpService es=new EmpService();
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       List<Integer> deptnoList= es.selectAllDeptno();
       List<String> jobList= es.selectAllJob();
        System.out.println(deptnoList+"-----");
        JSONObject json=new JSONObject();
        json.put("deptnoList",deptnoList);
        json.put("jobList",jobList);
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(json.toJSONString());
    }
}

SelectEmpController类中

package controller;

import com.alibaba.fastjson.JSONObject;
import domain.Emp;
import service.EmpService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/selectEmp")
public class SelectEmpController extends HttpServlet {
    private EmpService es=new EmpService();
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String deptno=request.getParameter("deptno");
        String job=request.getParameter("job");
        System.out.println(deptno+"======="+job);
        List<Emp> empList=es.selectEmp(deptno,job);
        //通过json将empList带走
        JSONObject json=new JSONObject();
        json.put("empList",empList);
        //设置字符集
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(json.toJSONString());
    }
}

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<title>Title</title>
<script type="text/javascript">
    window.onload=function () {
        var deptnoSelect=document.getElementById("deptnoSelect");
        var jobSelect=document.getElementById("jobSelect");
        //创建ajax对象
        var xml=new XMLHttpRequest();
        //发送异步请求 分别查询deptno(3)和job(3)
        xml.open("post","selectDeptnoAndJob",true);//打开一个AJAX通道
        xml.onreadystatechange=function () {
            if(xmlHttp.readyState==4&& xml.status==200){
                //处理响应信息
                var json=JSON.parse(xml.responseText);
                //获取json当中的两个集合
                var deptonList=json.deptnList;
                //将deptonList中的信息取出来,放置下拉选下 需要option组件包含
                for(var i=0;i<deptonList.length;i++){
                    var newOptionObject=document.createElement("option");
                    newOptionObject.value=deptonList[i];
                    newOptionObject.innerHTML=deptonList[i];
                    deptnoSelect.append(newOptionObject);
                }
                var jobList=json.jobList;
                for(var i=0;i<jobList.length;i++){
                    var newOptionObject=document.createElement("option");
                    newOptionObject.value=jobList[i];
                    newOptionObject.innerHTML=jobList[i];
                    jobSelect.append(newOptionObject);
                }
            }
        }
        //发送
        xml.send();
        //给查询按钮绑定一个功能
        document.getElementById("selectButton").onclick=function () {
            //异步请求
            xml.open("post","selectEmp?deptnn="+deptnoSelect.value+"&job="+jobSelect.value,true);
            xml.onreadystatechange=function () {
                if(xml.readyState==4&&xml.readyState==200){
                    //将以前的tbody中的信息清空
                    var tbody=document.getElementById("tbody");
                    tbody.innerHTML="";
                    //接收json并解析
                    var json=JSON.parse(xml.responseText);
                    //获取json传过来的信息
                    var empList=json.empList;
                   for(var i=0;i<empList.length;i++){
                       //每一次循环代表一个对象---展示在表格的一行内tr
                       //创建一个tr
                       var newTrObject=document.createElement("tr");
                       //创建一个td
                       var empTdObject=document.createElement("td");
                       //将对象的empno值写入td中
                       empTdObject.innerHTML=empList[i].empno;
                       //将td添加到tr中
                       newTrObject.append(empTdObject);
                       //把emp对象中的所有属性按照上述方式添加到td
                       //最后将tr添加到tbody中
                       tbody.append(tr);
                   }

                }
            }
            xml.send();
        }
    }
</script>
</head>
<body>
<form action="" method="post">
    <div align="center">
        deptno:
        <select id="deptnoSelect" name="deptnoSelect">
            <option value="">==请选择==</option>
        </select>
        job:
        <select id="jobSelect" name="jobSelect">
            <option value="">==请选择==</option>
        </select>
        <input id="selectButton" type="button" name="selectButton" value="查询">
    </div>
    <br>
    <table id="showTable" align="center" border="1" width="80%">
        <tr>
            <th>emp</th>
            <th>ename</th>
            <th>job</th>
            <th>mgr</th>
            <th>hiredate</th>
            <th>sal</th>
            <th>comm</th>
            <th>deptno</th>
        </tr>
        <tbody id="tbody"></tbody>
    </table>
</form>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Abp框架提供了一些基本的数据访问方法,如GetAll, Get, Insert, Update, Delete等,它们可以满足大多数应用程序的需求。但是,如果需要执行复杂的SQL查询或操作,可以使用Dapper来执行原生SQL。Dapper是一个轻量级的ORM框架,可以在Abp应用程序中与Entity Framework Core一起使用。以下是一个使用Dapper执行原生SQL查询的示例: 1. 安装Dapper NuGet包 可以使用NuGet包管理器或在项目文件中手动添加以下条目来安装Dapper: ``` Install-Package Dapper ``` 2. 创建DapperRepository 我们可以创建一个名为DapperRepository的仓储类,它将使用Dapper执行原生SQL查询或操作。以下是一个简单的DapperRepository类的示例: ``` public class DapperRepository<TEntity> : IRepository<TEntity> where TEntity : class, IEntity<int> { private readonly IDbConnection _dbConnection; public DapperRepository(IDbConnection dbConnection) { _dbConnection = dbConnection; } public async Task<List<TEntity>> GetAllListAsync() { return (await _dbConnection.GetListAsync<TEntity>()).ToList(); } public async Task<TEntity> GetAsync(int id) { return await _dbConnection.GetAsync<TEntity>(id); } public async Task<TEntity> InsertAsync(TEntity entity) { entity.Id = await _dbConnection.InsertAsync(entity); return entity; } public async Task<TEntity> UpdateAsync(TEntity entity) { await _dbConnection.UpdateAsync(entity); return entity; } public async Task DeleteAsync(int id) { await _dbConnection.DeleteAsync<TEntity>(id); } public async Task<List<TEntity>> QueryAsync(string sql, object param = null) { return (await _dbConnection.QueryAsync<TEntity>(sql, param)).ToList(); } public async Task<TEntity> QueryFirstOrDefaultAsync(string sql, object param = null) { return await _dbConnection.QueryFirstOrDefaultAsync<TEntity>(sql, param); } } ``` 3. 注册DapperRepository 在应用程序的Startup.cs文件中,我们可以使用依赖注入将DapperRepository注册到容器中: ``` services.AddScoped(typeof(IRepository<>), typeof(DapperRepository<>)); ``` 4. 使用DapperRepository执行查询 现在我们可以在应用程序中使用DapperRepository来执行原生SQL查询或操作。以下是一个使用DapperRepository执行查询的示例: ``` public class MyService : IMyService { private readonly IRepository<MyEntity> _repository; public MyService(IRepository<MyEntity> repository) { _repository = repository; } public async Task<List<MyEntity>> GetEntitiesWithComplexQueryAsync() { string sql = "SELECT * FROM MyEntities WHERE MyProperty = @myParam"; var parameters = new { myParam = "someValue" }; return await _repository.QueryAsync(sql, parameters); } } ``` 在上面的示例中,我们使用DapperRepository执行了一个带有参数的原生SQL查询,并将结果作为MyEntity对象列表返回。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值