mybatis动态sql 与分页

足球大数据分析入门:从赔率到预测的完整流程(附数据集) 本文提供了一份足球大数据分析的完整实战指南,涵盖从数据采集、清洗、特征工程到模型构建与评估的全流程。文章详细介绍了如何利用公开数据集与API获取数据,并通过逻辑回归、随机森林等模型进行比赛结果预测,最后强调了模型评估与策略回测的重要性,帮助读者构建自己的分析框架。 阅读详情

1、mybatis动态sql

1.1 if
比如说我们需要修改商品信息的时候,不可以修改成空值,就需要if来判断

<update id="updateByPrimaryKeySelective" parameterType="com.hsl.model.Goods" >
    update goods
    <set >
      <if test="gName != null" >
        g_name = #{gName,jdbcType=VARCHAR},
      </if>
      <if test="gModel != null" >
        g_model = #{gModel,jdbcType=VARCHAR},
      </if>
      <if test="gBatch != null" >
        g_batch = #{gBatch,jdbcType=VARCHAR},
      </if>
      <if test="gUnit != null" >
        g_unit = #{gUnit,jdbcType=VARCHAR},
      </if>
      <if test="gPrice != null" >
        g_price = #{gPrice,jdbcType=VARCHAR},
      </if>
      <if test="gRemarks != null" >
        g_remarks = #{gRemarks,jdbcType=VARCHAR},
      </if>
    </set>
    where g_id = #{gId,jdbcType=INTEGER}
  </update>

1.2 trim (空格)
添加商品的时候

<insert id="insertSelective" parameterType="com.hsl.model.Goods" >
    insert into goods
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="gId != null" >
        g_id,
      </if>
      <if test="gName != null" >
        g_name,
      </if>
      <if test="gModel != null" >
        g_model,
      </if>
      <if test="gBatch != null" >
        g_batch,
      </if>
      <if test="gUnit != null" >
        g_unit,
      </if>
      <if test="gPrice != null" >
        g_price,
      </if>
      <if test="gRemarks != null" >
        g_remarks,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="gId != null" >
        #{gId,jdbcType=INTEGER},
      </if>
      <if test="gName != null" >
        #{gName,jdbcType=VARCHAR},
      </if>
      <if test="gModel != null" >
        #{gModel,jdbcType=VARCHAR},
      </if>
      <if test="gBatch != null" >
        #{gBatch,jdbcType=VARCHAR},
      </if>
      <if test="gUnit != null" >
        #{gUnit,jdbcType=VARCHAR},
      </if>
      <if test="gPrice != null" >
        #{gPrice,jdbcType=VARCHAR},
      </if>
      <if test="gRemarks != null" >
        #{gRemarks,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>

1.3 foreach
遍历集合,批量查询、通常用于in关键字
前两个比较容易

foreach元素的属性主要有item,index,collection,open,separator,close。
1、collection表示如何来得到这个集合,如果传入的直接为一个List,那么collection值就为list,如果直接传入的为一个array不可变数组,那么collection值就为array,如果传入的为一个dto,比如dto里面的array变量名为idLists,那么collection的值就为idLists。
2、item表示集合中每一个元素进行迭代时的别名,比如item为value,那么,每次获取的都使用#{value}即可
3、index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,一般很少使用这个
4、open表示该语句以什么开始
5、separator表示在每次进行迭代之间以什么符号作为分隔符
6、close表示以什么结束

下面我讲一下foreach

首先我们改变GoodsMapper.java

 List<Goods> selectGoodsByIdIn(@Param("gId") List gId );

GoodsMapper.xml自动生成

<select id="selectGoodsByIdIn" resultType="com.hsl.model.Goods"></select>

改写代码

<!--通过gid foreach遍历出结果-->
  <select id="selectGoodsByIdIn" resultType="com.hsl.model.Goods" parameterType="java.util.List">
    select * form goods where bid in
    <foreach collection="gId" item="gid" open="(" close=")" separator=",">
      #{bid}
    </foreach>

  </select>

GoodsService.java添加代码

 List<Goods> selectGoodsByIdIn(List gId );

其实现类添加代码

 @Override
    public List<Goods> selectGoodsByIdIn(List gId) {
        return goodsMapper.selectGoodsByIdIn(gId);
    }

测试类GoodsServiceImplTest.java添加

  public void selectGoodsByIdIn() {
        List listId = new ArrayList();
        listId.add(1);
        listId.add(2);
        listId.add(3);
        List<Goods> list=this.goodsService.selectGoodsByIdIn(listId);
        for (Goods goods : list) {
            System.out.println("商品信息为:"+goods);
        }


    }

测试
在这里插入图片描述

测试成功!

结合我另外两篇博文来看:

https://blog.youkuaiyun.com/water_java/article/details/103067493

https://blog.youkuaiyun.com/water_java/article/details/103097132

1.4 其他

choose/set/where

<update id="updateByPrimaryKey" parameterType="com.hsl.model.Goods" >
    update goods
    set g_name = #{gName,jdbcType=VARCHAR},
      g_model = #{gModel,jdbcType=VARCHAR},
      g_batch = #{gBatch,jdbcType=VARCHAR},
      g_unit = #{gUnit,jdbcType=VARCHAR},
      g_price = #{gPrice,jdbcType=VARCHAR},
      g_remarks = #{gRemarks,jdbcType=VARCHAR}
    where g_id = #{gId,jdbcType=INTEGER}
  </update>

2、模糊查询

模糊查询(3种方式)
2.1 参数中直接加入%%

2.2 使用${…}代替#{…}(不建议使用该方式,有SQL注入风险)

      关键:#{...}与${...}区别?
      参数类型为字符串,#会在前后加单引号['],$则直接插入值

      注:
      1) mybatis中使用OGNL表达式传递参数
      2) 优先使用#{...}
      3) ${...}方式存在SQL注入风险

2.3 SQL字符串拼接CONCAT

案例:
GoodsMapper.xml

<select id="selectGoodsLike1" resultMap="BaseResultMap" parameterType="java.lang.String">
        select * from goods
        <where>
            g_name like #{gName}
        </where>

    </select>
    <select id="selectGoodsLike2" resultType="com.hsl.model.Goodss" parameterType="java.lang.String">
    select * from goods where g_name like '${gName}'
  </select>
    <select id="selectGoodsLike3" resultMap="BaseResultMap" parameterType="java.lang.String">
    select * from goods where g_name like concat('%',#{gName},'%')
  </select>
    <select id="list1" resultMap="BaseResultMap">
    select * from goods
  </select>
    <select id="list2" resultType="com.hsl.model.Goods">
    select * from goods
  </select>

自动生成的实体类:
package com.hsl.model;

public class Goods {
private Integer gId;

private String gName;

private String gModel;

private String gBatch;

private String gUnit;

private String gPrice;

private String gRemarks;

public Goods(Integer gId, String gName, String gModel, String gBatch, String gUnit, String gPrice, String gRemarks) {
    this.gId = gId;
    this.gName = gName;
    this.gModel = gModel;
    this.gBatch = gBatch;
    this.gUnit = gUnit;
    this.gPrice = gPrice;
    this.gRemarks = gRemarks;
}

@Override
public String toString() {
    return "Goods{" +
            "gId=" + gId +
            ", gName='" + gName + '\'' +
            ", gModel='" + gModel + '\'' +
            ", gBatch='" + gBatch + '\'' +
            ", gUnit='" + gUnit + '\'' +
            ", gPrice='" + gPrice + '\'' +
            ", gRemarks='" + gRemarks + '\'' +
            '}';
}

public Goods() {
    super();
}

public Integer getgId() {
    return gId;
}

public void setgId(Integer gId) {
    this.gId = gId;
}

public String getgName() {
    return gName;
}

public void setgName(String gName) {
    this.gName = gName;
}

public String getgModel() {
    return gModel;
}

public void setgModel(String gModel) {
    this.gModel = gModel;
}

public String getgBatch() {
    return gBatch;
}

public void setgBatch(String gBatch) {
    this.gBatch = gBatch;
}

public String getgUnit() {
    return gUnit;
}

public void setgUnit(String gUnit) {
    this.gUnit = gUnit;
}

public String getgPrice() {
    return gPrice;
}

public void setgPrice(String gPrice) {
    this.gPrice = gPrice;
}

public String getgRemarks() {
    return gRemarks;
}

public void setgRemarks(String gRemarks) {
    this.gRemarks = gRemarks;
}

}

第二个方法是我用了自己建的另一个实体类:

package com.hsl.model;

/**
 * @author water
 * @site www.water.com
 * @company xxx公司
 * @create 2019-11-16 11:44
 */
public class Goodss {
    private Integer g_id;

    private String g_name;

    private String g_model;

    private String g_batch;

    private String g_unit;

    private String g_price;

    private String g_remarks;

    public Goodss() {
    }

    public Goodss(Integer g_id, String g_name, String g_model, String g_batch, String g_unit, String g_price, String g_remarks) {
        this.g_id = g_id;
        this.g_name = g_name;
        this.g_model = g_model;
        this.g_batch = g_batch;
        this.g_unit = g_unit;
        this.g_price = g_price;
        this.g_remarks = g_remarks;
    }

    @Override
    public String toString() {
        return "Goodss{" +
                "g_id=" + g_id +
                ", g_name='" + g_name + '\'' +
                ", g_model='" + g_model + '\'' +
                ", g_batch='" + g_batch + '\'' +
                ", g_unit='" + g_unit + '\'' +
                ", g_price='" + g_price + '\'' +
                ", g_remarks='" + g_remarks + '\'' +
                '}';
    }

    public Integer getG_id() {
        return g_id;
    }

    public void setG_id(Integer g_id) {
        this.g_id = g_id;
    }

    public String getG_name() {
        return g_name;
    }

    public void setG_name(String g_name) {
        this.g_name = g_name;
    }

    public String getG_model() {
        return g_model;
    }

    public void setG_model(String g_model) {
        this.g_model = g_model;
    }

    public String getG_batch() {
        return g_batch;
    }

    public void setG_batch(String g_batch) {
        this.g_batch = g_batch;
    }

    public String getG_unit() {
        return g_unit;
    }

    public void setG_unit(String g_unit) {
        this.g_unit = g_unit;
    }

    public String getG_price() {
        return g_price;
    }

    public void setG_price(String g_price) {
        this.g_price = g_price;
    }

    public String getG_remarks() {
        return g_remarks;
    }

    public void setG_remarks(String g_remarks) {
        this.g_remarks = g_remarks;
    }
}

对比两个实体类
第二个是和数据库表一至的

GoodsMapper.java添加代码

   List<Goods> selectGoodsLike1(@Param("gName") String gName);

    List<Object> selectGoodsLike2(@Param("gName") String gName);

    List<Goods> selectGoodsLike3(@Param("gName") String gName);

GoodsService.java添加代码

  //模糊查询
    List<Goods> selectGoodsLike1(String gName);

    List<Object> selectGoodsLike2(String gName);

    List<Goods> selectGoodsLike3(String gName);

GoodsService.java实现类GoodsServiceImpl.java添加代码

  @Override
    public List<Goods> selectGoodsLike1(String gName) {
        return goodsMapper.selectGoodsLike1(gName);
    }
    @Override
    public List<Object> selectGoodsLike2(String gName) {
        return goodsMapper.selectGoodsLike2(gName);
    }
    @Override
    public List<Goods> selectGoodsLike3(String gName) {
        return goodsMapper.selectGoodsLike3(gName);
    }

测试类GoodsServiceImplTest.java添加:


    @Test
    public void selectGoodsLike1() {
        List<Goods> list = this.goodsService.selectGoodsLike1("%qq%");

        for (Goods goods : list) {
            System.out.println("商品信息:" + goods);
        }
    }

    @Test
    public void selectGoodsLike2() {
        List<Object> list = this.goodsService.selectGoodsLike2("%qq%");
        for (Object goods : list) {
            System.out.println("商品信息:" + goods);
        }
    }

    @Test
    public void selectGoodsLike3() {
        List<Goods> list = this.goodsService.selectGoodsLike3("qq");
        for (Goods goods : list) {
            System.out.println("商品信息:" + goods);
        }
    }

三个方法测试下来都是同样的结果
在这里插入图片描述

3、查询返回结果集的处理

resultMap:适合使用返回值是自定义实体类的情况
resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型

3.1 使用resultMap返回自定义类型集合

3.2 使用resultType返回List<T>

3.3 使用resultType返回单个对象

3.4 使用resultType返回List<Map>,适用于多表查询返回结果集

3.5 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集

GoodsMapper.xml

   <select id="list1" resultMap="BaseResultMap">
    select * from goods
  </select>
    <select id="list2" resultType="com.hsl.model.Goodss">
    select * from goods
  </select>
    <select id="list3" resultMap="BaseResultMap" parameterType="com.hsl.model.GoodsVo">
        select * from goods where g_id in
        <foreach collection="gIds" open="(" close=")" separator="," item="gId">
            #{gId}
        </foreach>
    </select>
    <select id="list4" resultType="java.util.Map">
    select * from goods
  </select>
    <select id="list5" resultType="java.util.Map" parameterType="java.util.Map">
    select * from goods where g_id= #{gId}
  </select>

GoodsMapper.java

//处理返回结果集
    List<Goods> list1();

    List<Object> list2();

    List<Goods> list3(GoodsVo goodsVo);

    List<Map> list4();

    Map list5(Map map);

GoodsService.java添加代码

  List<Goods> list1();

    List<Object> list2();

    List<Goods> list3(GoodsVo goodsVo);

    List<Map> list4();

    Map list5(Map map);

GoodsService.java实现类GoodsServiceImpl.java添加代码

   @Override
    public List<Goods> list1() {
        return goodsMapper.list1();
    }

    @Override
    public List<Object> list2() {
        return goodsMapper.list2();
    }

    @Override
    public List<Goods> list3(GoodsVo goodsVo) {
        return goodsMapper.list3(goodsVo);
    }

    @Override
    public List<Map> list4() {
        return goodsMapper.list4();
    }

    @Override
    public Map list5(Map map) {
        return goodsMapper.list5(map);
    }

测试类GoodsServiceImplTest.java添加

   @Test
    public void selectGoodsList1() {
      List<Goods> list=this.goodsService.list1();
        for (Goods goods : list) {
            System.out.println("商品信息为:"+goods);
        }

    }

    @Test
    public void selectGoodsList2() {
        List<Object> list=this.goodsService.list2();
        for (Object goods : list) {
            System.out.println("商品信息为:"+goods);
        }

    }

    @Test
    public void selectGoodsList3() {
        List list0=new ArrayList();
        list0.add(1);
        list0.add(2);
        list0.add(3);
        GoodsVo v=new GoodsVo();
        v.setgIds(list0);
        List<Goods> list=this.goodsService.list3(v);
        for (Goods goods : list) {
            System.out.println("商品信息为:"+goods);
        }

    }


    @Test
    public void selectGoodsList4() {
        for (Map map : this.goodsService.list4()) {
            System.out.println(map);
        }

    }

    @Test
    public void selectGoodsList5() {
        Map map=new HashMap();
        map.put("gId",1);
        System.out.println(this.goodsService.list5(map));
    }

4、分页查询

为什么要重写mybatis的分页?
Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的

struts拦截器
定义一个拦截器类
invoke
sysout(“action方法被调用前执行的功能”)
method.invoke
sysout(“action方法被调用后执行的功能”)

struts-sy.xml
	将拦截器的类申明到interceptors
	引用拦截器
	<action>
		<interceptor-ref>

4.1 导入分页插件

   <dependency>
     <groupId>com.github.pagehelper</groupId>
     <artifactId>pagehelper</artifactId>
     <version>5.1.2</version>
   </dependency>

4.2 将pagehelper插件配置到mybatis中

   <!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 -->
   <plugin interceptor="com.github.pagehelper.PageInterceptor">
   </plugin>
  <!-- 注意要加在environments前-->

4.3 在你需要进行分页的Mybatis方法前调用PageHelper.startPage静态方法即可,紧跟在这个方法后的第一个Mybatis查询方法会被进行分页

   //设置分页处理
   if (null != pageBean && pageBean.isPaginate()) {
     PageHelper.startPage(pageBean.getCurPage(), pageBean.getPageRecord());
   }

4.4 获取分页信息(二种方式)

 4.4.1 使用插件后,查询实际返回的是Page<E>,而非List<E>,Page继承了ArrayList,同时还包含分页相关的信息
      Page<Book> page = (Page<Book>)list;
      System.out.println("页码:" + page.getPageNum());
      System.out.println("页大小:" + page.getPageSize());
      System.out.println("总记录:" + page.getTotal());
 4.4.2 使用PageInfo
      PageInfo pageInfo = new PageInfo(list);
      System.out.println("页码:" + pageInfo.getPageNum());
      System.out.println("页大小:" + pageInfo.getPageSize());
      System.out.println("总记录:" + pageInfo.getTotal());

案例:
GoodsMapper.xml

  <select id="listPager" resultType="java.util.Map" parameterType="java.util.Map">
        select * from goods
        <where>
            <if test="g_name!=null and g_name != ''">
                g_name like #{gName}
            </if>
        </where>
    </select>

GoodsMapper.java

  List<Map> listPager(Map map);

GoodsService.java添加代码

 List<Map> listPager(Map map, PageBean pageBean);

GoodsService.java实现类GoodsServiceImpl.java添加代码

  @Override
    public List<Map> listPager(Map map, PageBean pageBean) {
        if(pageBean != null && pageBean.isPagination()){
            PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
        }
        List<Map> list = goodsMapper.listPager(map);
        if(pageBean != null && pageBean.isPagination()){
            PageInfo pageInfo = new PageInfo(list);
            System.out.println("页码:"+pageInfo.getPageNum());
            System.out.println("页大小:"+pageInfo.getPageSize());
            System.out.println("总记录:"+pageInfo.getTotal());
            pageBean.setTotal(pageInfo.getTotal()+"");
        }
        return list;

    }

测试类GoodsServiceImplTest.java添加

  @Test
    public void listPage() {
        Map map = new HashMap();
        map.put("gName", "%qq%");
        PageBean pageBean = new PageBean();
        List<Map> list = this.goodsService.listPager(map, pageBean);
        for (Map map1 : list) {
            System.out.println("信息:" + map1);
        }

    }

在这里插入图片描述

5、特殊字符处理

特殊字符处理

>(&gt;)   
<(&lt;)  
&(&amp;) 
空格(&nbsp;)

<![CDATA[ <= ]]> 

GoodsMapper.xml

  <select id="list6" resultMap="BaseResultMap" parameterType="com.hsl.model.GoodsVo">
        select * from goods
        <where>
            <if test="null != min and min != ''">
                <![CDATA[  and #{min} < g_price ]]>
            </if>
            <if test="null != max and max != ''">
                <![CDATA[ and #{max} > g_price ]]>
            </if>
        </where>
    </select>

GoodsMapper.java

  List<Goods> list6(GoodsVo goodsVo);

GoodsService.java添加代码

 List<Goods> list6(GoodsVo goodsVo);

GoodsService.java实现类GoodsServiceImpl.java添加代码

 @Override
    public List<Goods> list6(GoodsVo goodsVo) {
        return goodsMapper.list6(goodsVo);
    }

测试类GoodsServiceImplTest.java添加

@Test
    public void list6() {
       GoodsVo goodsVo=new GoodsVo();
       goodsVo.setMin(15);
       goodsVo.setMax(25);

       List <Goods> list=this.goodsService.list6(goodsVo);
        for (Goods goods : list) {
            System.out.println(goods);
        }
    }

GoodsVo.java

package com.hsl.model;

import java.util.List;

/**
 * @author water
 * @site www.water.com
 * @company xxx公司
 * @create 2019-11-16 8:54
 * 用于连表查询
 */
public class GoodsVo extends Goods{
   private List<Integer> gIds;
   private Integer min;
   private Integer max;

    public Integer getMin() {
        return min;
    }

    public void setMin(Integer min) {
        this.min = min;
    }

    public Integer getMax() {
        return max;
    }

    public void setMax(Integer max) {
        this.max = max;
    }

    public List<Integer> getgIds() {
        return gIds;
    }

    public void setgIds(List<Integer> gIds) {
        this.gIds = gIds;
    }
}

帮助类:
PageBean.java

package com.hsl.util;

import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.Map;

public class PageBean implements Serializable {

	private static final long serialVersionUID = 2422581023658455731L;

	//页码
	private int page=1;
	//每页显示记录数
	private int rows=10;
	//总记录数
	private int total=0;
	//是否分页
	private boolean isPagination=true;
	//上一次的请求路径
	private String url;
	//获取所有的请求参数
	private Map<String,String[]> map;
	
	public PageBean() {
		super();
	}
	
	//设置请求参数
	public void setRequest(HttpServletRequest req) {
		String page=req.getParameter("page");
		String rows=req.getParameter("rows");
		String pagination=req.getParameter("pagination");
		this.setPage(page);
		this.setRows(rows);
		this.setPagination(pagination);
		this.url=req.getContextPath()+req.getServletPath();
		this.map=req.getParameterMap();
	}
	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public Map<String, String[]> getMap() {
		return map;
	}

	public void setMap(Map<String, String[]> map) {
		this.map = map;
	}

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}
	
	public void setPage(String page) {
		if(null!=page&&!"".equals(page.trim()))
			this.page = Integer.parseInt(page);
	}

	public int getRows() {
		return rows;
	}

	public void setRows(int rows) {
		this.rows = rows;
	}
	
	public void setRows(String rows) {
		if(null!=rows&&!"".equals(rows.trim()))
			this.rows = Integer.parseInt(rows);
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}
	
	public void setTotal(String total) {
		this.total = Integer.parseInt(total);
	}

	public boolean isPagination() {
		return isPagination;
	}
	
	public void setPagination(boolean isPagination) {
		this.isPagination = isPagination;
	}
	
	public void setPagination(String isPagination) {
		if(null!=isPagination&&!"".equals(isPagination.trim()))
			this.isPagination = Boolean.parseBoolean(isPagination);
	}
	
	/**
	 * 获取分页起始标记位置
	 * @return
	 */
	public int getStartIndex() {
		//(当前页码-1)*显示记录数
		return (this.getPage()-1)*this.rows;
	}
	
	/**
	 * 末页
	 * @return
	 */
	public int getMaxPage() {
		int totalpage=this.total/this.rows;
		if(this.total%this.rows!=0)
			totalpage++;
		return totalpage;
	}
	
	/**
	 * 下一页
	 * @return
	 */
	public int getNextPage() {
		int nextPage=this.page+1;
		if(this.page>=this.getMaxPage())
			nextPage=this.getMaxPage();
		return nextPage;
	}
	
	/**
	 * 上一页
	 * @return
	 */
	public int getPreivousPage() {
		int previousPage=this.page-1;
		if(previousPage<1)
			previousPage=1;
		return previousPage;
	}

	@Override
	public String toString() {
		return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", isPagination=" + isPagination
				+ "]";
	}
}

StringUtils.java

package com.hsl.util;

public class StringUtils {
	// 私有的构造方法,保护此类不能在外部实例化
	private StringUtils() {
	}

	/**
	 * 如果字符串等于null或去空格后等于"",则返回true,否则返回false
	 * 
	 * @param s
	 * @return
	 */
	public static boolean isBlank(String s) {
		boolean b = false;
		if (null == s || s.trim().equals("")) {
			b = true;
		}
		return b;
	}
	
	/**
	 * 如果字符串不等于null或去空格后不等于"",则返回true,否则返回false
	 * 
	 * @param s
	 * @return
	 */
	public static boolean isNotBlank(String s) {
		return !isBlank(s);
	}

}

别再凭感觉估算!用ADS的EBOND库精确仿真Bonding线寄生电感(附完整参数设置指南) 本文详细介绍了在ADS中使用EBOND库精确仿真Bonding线寄生电感的方法,帮助射频工程师在毫米波频段实现高精度建模。通过三维物理参数和电磁场求解算法,EBOND模型能将误差控制在5%以内,显著提升电路性能。文章还提供了完整的参数设置指南和实战操作步骤,适用于5G毫米波前端模块等高频应用场景。 阅读详情

相关推荐

NX二次开发编译时dll自动数字签名及拷贝

在UG5.0开始,所有基于UG二次开发的DLL都要“签名”后才能被客户端上正版的NX调用。

菜鸟爱飞不飞的博客 2683

Java面试----2018年MyBatis常见实用面试题整理

1、什么是MyBatis?答:MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。2、讲下MyBatis的缓存答:MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置&lt;cache/&gt;3...

王呈胜的博客 1万+

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.csdn.net/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4518

Mybatis动态 SQL

MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。     虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态...

睶 813

求助:有没有基于pscad的锂电池仿真模型

求助:有没有基于pscad的锂电池仿真模型 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变没有 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写...

qq_38922523的博客 1222

Ubuntu下OpenOCD+GDB的安装、编译及使用

目标开发板(芯片):stm32mp157aaa 仿真器:ST-Link 操作系统:Ubuntu 18.04 调试软件:OpenOCD OpenOCD的安装 首先下载OpenOCD有多种方式,可以GitHub上下载,目录下打开终端,输入 git clone git://git.code.sf.net/p/openocd/code openocd 下载完整的OpenOCD的文件夹。进入到OpenOCD的目录下,开始安装。 接着,OpenOCD适用于微处理器的debug和烧写,需要下载相关库 sud

蓝冰露的博客 9524

动态SQL

前言 动态SQL是MyBatis强大的特性,在使用JDBC操作数据的时候,如果查询的条件特别多,将SQL语句连成字符串是一件很痛苦的事情,通常我们用if-else进行拼接。MyBatis使用动态SQL语言来改善这种情形。 用于实现动态SQL元素如下 基于OGNL表达式 完成多条件查询等逻辑实现 用于实现动态SQL的元素主要有 if:实现简单是条件选择 trim:灵活的去除多余的关键字 where...

chenjia的博客 454

ADS 2013安装教程

1.2013和2014安装过程是一样的,运行ads2013_06_shp_windows文件进行安装 2.点击“NEXT”。 3.选择I accept,然后点击“NEXT”。 4.选择“complete”,然后点击“NEXT”。 5.选择安装路径,最好默认安装路径,安装路径不要有中文,然后点击“NEXT”。 6.点击“NEXT”. 7.如下路径默认安装,然后点击“NEXT”。 8.点击“NEXT”。 ...

谢谢关注“小鱼教你模数电”,各平台同号 6007

数据库面试题

1、如何查找和删除数据库中的重复数据 法一: 用Group by语句 此查找很快的 select count(num), max(name) from student –查找表中num列重复的,列出重复的记录数,并列出他的name属性 group by num having count(num) &gt;1; –按num分组后找出表中num列重复,即出现次数大于一次 delete fro...

系统运维 1467

BQ40Z50R2循环学习实战:量产文件生成与关键状态位解析

本文详细解析了TI BQ40Z50R2电量计循环学习(Golden Learning)的实战流程与量产文件生成方法。重点剖析了updateStatus状态位在充放电静置阶段的常见异常(如卡在0x04或跳至0x0E)及其根本原因,并提供了从环境控制、命令顺序到文件处理的完整避坑指南,帮助工程师高效完成量产配置。

weixin_29170327的博客 214

【定位模块项目实战】gnss_localizer、lidar_localizer功能包解析

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、1.2.3.4.二、1.2.3.4.三、1.2.3.4.四、1.2.3.4.总结参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对**【无人驾驶autoware项目实战】感知–定位模块**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、 1. 2. 3. 4. . . 二、

qq_35635374的博客 1931

Mybatis02动态sql和分页

1.动态 SQL 是 MyBatis 的强大特性之一。在 JDBC 或其它类似的框架中,开发人员通常需要手动拼接 SQL 语句。根据不同的条件拼接 SQL 语句是一件极其痛苦的工作。例如,拼接时要确保添加了必要的空格,还要注意去掉列表最后一个列名的逗号。而动态 SQL 恰好解决了这一问题,可以根据场景动态的构建查询。 2.动态SQL:code that is executed dynamically。 它一般是根据用户输入或外部条件动态组合的SQL语句块。 动态SQL能灵活的发挥SQL强大的功能、方便的解

全栈 1323

弱小目标检测跟踪算法研究(5) 基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制

基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制1. 前言2. 顶帽变换(Top_hat)算法3. Matlab仿真4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵“弱"和“小’’两个方面:“弱’’是指目标在红外波长上所表现出来的强度,具体反映到所拍摄的红外图像上,就是指目标的灰度值;而“小’’是指目标的尺寸大小,也就是前面所述的成像面积很小,反映到红外图像上就是指目标所占的像素数目很少。 SPIE国际光学工程学会(Societyof Photo一0ptical Instrument

sinat_34897952的博客 5291

MyBatis动态sql,分页

动态 SQL 通常写在mapper包下面的地址映射配置文件(.xml)中。根据条件的不同, SQL 语句也会随之动态的改变. MyBatis 中,提供了一组标签用于实现动态 SQL 动态SQL语句标签包括以下标签: 1、If标签 条件判断标签,通过判断参数取值来决定是否使用某个查询条件,基本用法如下: <select id="queryBookIf" resultType="mybatis01.model.Book"> select <include refid="Base_Co

CLa11111111的博客 764

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

mybatis动态sql及分页

一、mybatis动态SQL 1.if 使用if的动态SQL语句 BookMapper.xml <insert id="insert" parameterType="com.ltf.model.Book" > insert into t_mvc_book (bid, bname, price ) values (#{bid,jdbcType=INTEGER}, #{bname,jdbcType=VARCHAR}, #{price,jdbcType=REAL

小宝的宝呢的博客 1274

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Mybatis的动态sql及分页

一、mybatis动态SQL 1.if 使用if的动态SQL语句,解决了修改需要传递所有列段的问题 BookMapper.xml <insert id="insertSelective" parameterType="com.zking.model.Book" > insert into t_mvc_book <trim prefix="(" suffix=")" suffixOverrides="," > <if test="bid !

weixin_56069070的博客 1762

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

mybatis之动态sql及分页

mybatis基础知识

yifei_345678的博客 1103

mybatis动态SQL以及分页

mybatis动态SQL以及分页1、mybatis动态sql1.1if1.2trim1.3 foreach2、模糊查询3、查询返回结果集的处理3.1 使用resultMap返回自定义类型集合3.2 使用resultType返回List3.3 使用resultType返回单个对象3.4 使用resultType返回List,适用于多表查询返回结果集3.5 使用resultType返回Map1、myb...

what_where的博客 1108

mybatis之动态sql和分页

课程目标 mybatis动态sql 模糊查询 查询返回结果集的处理 分页查询 特殊字符处理 一.mybatis动态sql 首先在BookMapper.xml中添加forEach的标签

m0_52681702的博客 678

Mybatis映射.动态sql.分页

动态SQL是MyBatis提供的一种动态生成SQL语句的方式,可以根据不同的条件生成不同的SQL语句,从而实现更加灵活的查询和操作。在MyBatis的映射文件中,可以通过使用if、choose、when、otherwise、foreach等标签来实现动态SQL。下面以if和foreach为例,介绍如何在MyBatis映射文件中使用动态SQL。动态SQL是指在程序运行时生成SQL语句的技术,而不是在编译期就已经确定SQL语句。

djssubddbj的博客 872

myBatis之动态sql以及分页

目标 1.mybatis动态sql 2.模糊查询 3.查询返回结果集的处理 4.分页查询 5.特殊字符处理 一、mybatis动态sql 常用:If、foreach if标签解释: foreach: 1、BookMapper.xml增加foreach标签 <select id="selectBooksIn" resultType="com.mwy.model.Book" parameterType="java.util.List"> select * from ..

Cat_Jay_Fish的博客 1235

Mybatis动态SQL和分页

1.foreach的属性 Item、 Collection、open、splitrator(分隔符)、in(1,2,3,4,5) 2.模糊查询的三种方式 # $ concat 3.# 和 $ 的区别 # 自带双引号'',$ 不带双引号'' # 能防止SQL与注入,$ 会有SQL的注入 $最大的作用,传入数据库列段,数据库表名,动态列的功能 4.ResultMap与ResultType ResultTpye返回实体类对象:对应单表 ResultMap会做Ma...

weixin_67450855的博客 747

【MyBatis】动态SQL和mybatis分页的运用

如果我们的前台没有传参,比如没有传入我们的name值,name就会把字段值改为null,这就违背了我们编码的初衷。许多人会使用类似于where 1 = 1来作为前缀,在代码中会用if,再用and进行一个sql拼接。

无法自律的人的博客 1011

MyBatis 03 -MyBatis动态SQL与分页插件

MyBatis的映射文件中支持在基础SQL上添加一些逻辑操作,并动态拼接成完整的SQL之后再执行,以达到SQL复用、简化编程的效果。PageHelper是适用于MyBatis框架的一个分页插件,使用方式极为便捷,支持任何复杂的单表、多表分页查询操作。下载地址:https://github.com/pagehelper/Mybatis-PageHelper。set 标签的作用是添加set,与where类似。sql标签的作用是提取公共的sql代码片段。一级缓存是mybatis中默认开启的。

yinying293的博客 1222

MyBatis动态sql和分页

目标: mybatis动态sql 模糊查询 查询返回结果集的处理 分页查询 特殊字符处理 一、mybatis动态sql 常用:If、foreach if标签解释: 以往所用的修改不传的值就为空,mybatis的if解决了它的漏洞,效率更好,单方面讲加了if条件的好一些. foreach: 1、BookMapper.xml增加foreach标签 <select id="selectBooksIn" resultType="com.mwy.model.Book" para..

qq_59025975的博客 1438
上一篇: 日志文件没错有数值,但控制台的数据却为空的问题
下一篇: mybatis与Spring的集成
water_java
博客等级 码龄7年 9粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值