一、单个参数:

public List<XXBean> getXXBeanList(String xxCode);  

<select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">

  select t.* from tableName t where t.id= #{id}  

</select>  

其中方法名和ID一致,#{}中的参数名与方法中的参数名一直, 我这里采用的是XXXBean是采用的短名字,

select 后的字段列表要和bean中的属性名一致, 如果不一致的可以用 as 来补充。

二、多参数:

public List<XXXBean> getXXXBeanList(String xxId, String xxCode);  

<select id="getXXXBeanList" resultType="XXBean">

  select t.* from tableName where id = #{0} and name = #{1}  

</select>  

由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始
复制代码

三、Map封装多参数:

public List<XXXBean> getXXXBeanList(HashMap map);  

<select id="getXXXBeanList" parameterType="hashmap" resultType="XXBean">

  select 字段... from XXX where id=#{xxId} code = #{xxCode}  

</select>  

其中hashmap是mybatis自己配置好的直接使用就行。map中key的名字是那个就在#{}使用那个,map如何封装就不用了我说了吧。

四、List封装in:

public List<XXXBean> getXXXBeanList(List<String> list);  

<select id="getXXXBeanList" resultType="XXBean">
  select 字段... from XXX where id in
  <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  
    #{item}  
  </foreach>  
</select>  

foreach 最后的效果是select 字段... from XXX where id in ('1','2','3','4')

五、多参数传递之注解方式示:

例子:

public AddrInfo getAddrInfo(@Param("corpId")int corpId, @Param("addrId")int addrId);

xml配置这样写:

<select id="getAddrInfo"  resultMap="com.xxx.xxx.AddrInfo">
       SELECT * FROM addr__info 
    where addr_id=#{addrId} and corp_id=#{corpId}
</select>

以前在mybatis select语句中要带parameterType的,现在可以不要这样写。

六、selectList()只能传递一个参数,但实际所需参数既要包含String类型,又要包含List类型时的处理方法:

将参数放入Map,再取出Map中的List遍历。如下:

List<String> list_3 = new ArrayList<String>();
Map<String, Object> map2 = new HashMap<String, Object>();

list.add("1");
list.add("2");
map2.put("list", list); //网址id

map2.put("siteTag", "0");//网址类型

 

public List<SysWeb> getSysInfo(Map<String, Object> map2) {
  return getSqlSession().selectList("sysweb.getSysInfo", map2);
}
 


<select id="getSysInfo" parameterType="java.util.Map" resultType="SysWeb">
  select t.sysSiteId, t.siteName, t1.mzNum as siteTagNum, t1.mzName as siteTag, t.url, t.iconPath
   from TD_WEB_SYSSITE t
   left join TD_MZ_MZDY t1 on t1.mzNum = t.siteTag and t1.mzType = 10
   WHERE t.siteTag = #{siteTag } 
   and t.sysSiteId not in 
   <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
       #{item}
   </foreach>
 </select>

哇好久没写博客了!本来想早早睡觉的,舍友还在噼里啪啦的吃鸡!反正睡不着还是敲代码。在最近这个项目中,涉及一个对课程生成一个邀请码,加入这个课程必须输入邀请码才行。那么这里就涉及到如何涉及一个较短的最好是英文和数字组成的不重复的邀请码!对于这个场景,我给出的解决方案就是随机字符串+课程id就好了,id本身就不会重复,这里这个问题就这样轻松的解决了!
但这里有一个问题,这里在生成这个邀请码的时候,我们需要对数据库进行一次查询,得到id之后才能生成邀请码,这样对数据库的一次查询操作,虽然在这个学校的小型项目看起来不起眼,但是如果在高并发的场景下,这样的效率还是比较低的!
我经过查找资料,一般有以下几种生成不重复的随机码的方法:

阅读全文 »

最近在学习过程中是始终不能很好的定义VO DTO这些对象,在百度看到一篇写的很好的文章,特转过来!
概念:
VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。
DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。
PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。

阅读全文 »

首先在cmd模式下进入redis的目录,
然后使用
redis-cli -p 7001(指定进入端口号为7901的redis数据库)
进入该端口的redis数据库之后有以下两种清空缓存的命令

1.清空当前redis数据库缓存FLUSHDB

flushdb

2.清空整个redis缓存FLUSHALL

flushall

在做kafka消费的时候,consumer的配置一直是周期性自动提交消费成功。
但问题来了,如果poll到的数据没有被成功消费,那么逻辑上应该被标记为未被消费,等待队列的第二次尝试拉取消费(虽然这样也不对,但是就这样硬着头皮说下去先)。那么这里应该在每次数据集合records被poll拉取之后,在对每个record进行业务处理完成成功之后,对broker进行一次提交(提交下一次poll出去数据的offset位置),这里提交我就用到

public void commitSync(Map<TopicPartition,OffsetAndMetadata> offsets)

具体实现:

for (TopicPartition partition : records.partitions()) {
         List<ConsumerRecord<String, String>> partitionRecords = records.records(partition);
         // 数据处理
         for (ConsumerRecord<String, String> record : partitionRecords)
         {
               System.out.println(record.offset() + ": " + record.value());
         }
         // 取得当前读取到的最后一条记录的offset
         long lastOffset = partitionRecords.get(partitionRecords.size() - 1).offset();
         // 同步提交offset,记得要 + 1
         consumer.commitSync(Collections.singletonMap(partition, new OffsetAndMetadata(lastOffset + 1)));
}