比较两个list对象,1、找出相同ID,其他对象属性的值不相同的数据;2、找到不存在这个ID的

举个例子:
一个student对象,包含的属性有ID,name,age;
Student1.setID(1);
Student1.setName("张三");
Student1.setAge("20");
Student2.setID(2);
Student2.setName("李四");
Student2.setAge("30");
Student3.setID(3);
Student3.setName("王五");
Student3.setAge("40");
Student4.setID(1);
Student4.setName("王五");
Student4.setAge("20");
list1.add(student1);
list1.add(student2);
list1.add(student3);
list2.add(student4);
list2.add(student2);
以list1为基准,比较两个list对象,找出list2中没有的对象和找出list1中相同ID其他对象属性不相同的对象。
分别放到两个新的list中。
也就是找出相同ID,list1中作出修改的对象;list1中有,list2中没有的。
(还是昨天的问题,但是今天早上不知道怎么就不见了,所以又提了一下。)

2个回答

 class Student {
...//现有代码
//加上
    @Override  
    public boolean equals(Object o) {  
        if (o == this) return true;  
        if (!(o instanceof Student)) {  
            return false;  
        }  
        Student s = (Student) o;  
        return s.getID() == this.getID(); 
    }  
    @Override  
    public int hashCode() {  
        return this.getID();
    }  
}
weixin_38299517
琉星之云 回复weixin_38299517: 对对象和对象的方法理解的不够
接近 2 年之前 回复
weixin_38299517
琉星之云 问题解决了
接近 2 年之前 回复
weixin_38299517
琉星之云 回复caozhy:没太懂
接近 2 年之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复weixin_38299517: 和数据多少没有关系
接近 2 年之前 回复
weixin_38299517
琉星之云 回复xiewang1: 数据太多没法弄啊
接近 2 年之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复weixin_38299517: 你得到id然后遍历下就有了。而且多个id,你没有修改时间,也没办法知道哪个是最新的。
接近 2 年之前 回复
xiewang1
Linux_para 两个for循环比较
接近 2 年之前 回复
weixin_38299517
琉星之云 回复caozhy: 这个只能满足一种情况:list2中没有的ID对象,没法满足相同IDlist1中作出修改的。
接近 2 年之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复weixin_38299517: 你得到了需要的id,然后再循环从list2里面找到需要的就可以了,不需要2个equals
接近 2 年之前 回复
weixin_38299517
琉星之云 回复caozhy: 这样的话是没法满足需求的,总不能些两个equals方法吧
接近 2 年之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复weixin_38299517: 是啊
接近 2 年之前 回复
weixin_38299517
琉星之云 这个equals方法是ID相同的对象就认为是相同的,那么那些相同ID作出修改的,就找不到了。我可以这样理解吗?
接近 2 年之前 回复

重写student类的equals和hashCode方法,两个都要重写。
然后list1.removeAll(list2); 求差集

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java list集合属性值比较
比较两个list,如何找出相同属性id,其他属性,如name值不相同的数据?需要怎样重写equals吗?我用两次for循环,效率太低了! public static List<gctd> needupdatetdxxlist() { List<gctd> getoratdxxlist=getoratdxx(); List<gctd> getresttdxxlist = getrestgctdxx(); List<gctd> needupdatetdxx = new ArrayList<gctd>(); try { for (int i = 0; i < getresttdxxlist.size(); i++) { gctd gctd =new gctd(); for (int j = 0; j < getoratdxxlist.size(); j++) { String DevChnId = getresttdxxlist.get(i).getDevChnId(); String DevChnName = getresttdxxlist.get(i).getDevChnName(); String Manufacturer = getresttdxxlist.get(i).getManufacturer(); double GpsX=getresttdxxlist.get(i).getGpsX(); double GpsY=getresttdxxlist.get(i).getGpsY(); int DevChnType=getresttdxxlist.get(i).getDevChnType(); int CameraType=getresttdxxlist.get(i).getCameraType(); String DevChnSn =getresttdxxlist.get(i).getDevChnSn(); int Direct=getresttdxxlist.get(i).getDirect(); int LaneNo=getresttdxxlist.get(i).getLaneNo(); String OrgName = getresttdxxlist.get(i).getOrgName(); String OrgCode =getresttdxxlist.get(i).getOrgCode(); if (DevChnId.equals(getoratdxxlist.get(j).getDevChnId()) && !DevChnName.equals(getoratdxxlist.get(j).getDevChnName())) { gctd.setDevChnId(DevChnId); gctd.setDevChnName(DevChnName); gctd.setManufacturer(Manufacturer); gctd.setGpsX(GpsX); gctd.setGpsY(GpsY); gctd.setDevChnType(DevChnType); gctd.setCameraType(CameraType); gctd.setDevChnSn(DevChnSn); gctd.setDirect(Direct); gctd.setLaneNo(LaneNo); gctd.setOrgName(OrgName); gctd.setOrgCode(OrgCode); needupdatetdxx.add(gctd); LOGGER.debug("需要更新的设备通道:"+DevChnId+" "+DevChnName); break; } } } } catch (Exception e) { e.printStackTrace(); } return needupdatetdxx; }
两个List列表(非基本类型),找出其中存在差异的条目
有两个List 内存储item {id,count}; List1 [{1,2},{2,3},{3,4},{4,5}]; List2 [{2,2},{3,5},{4,5},{5,8}]; 找出List2中比List1中多出来的项,减少的项,和改变并变多的项,改变并减少的项;后两种的item.count为变化值 如 多:List[{5,8}]; 少:List[{1,2}],改变少:List[{2,1}],改变多:List[{3,1}]
ListView列表文字无故变灰
我参考了官方的代码listview Adapter用法,但是移植过来listview文字就变成灰了,并且能选中 下面贴出代码。已经DEBUG 子线程返回data没问题。 这是运行图片。 ![图片说明](https://img-ask.csdn.net/upload/201503/20/1426828176_449082.png) ``` package com.wastrel.activity; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import com.wastrel.provider.Tabletbl; import com.wastrel.provider.TabletblDAO; import com.wastrel.util.HttpUtil; import android.app.ListActivity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class ChaZhuoActivity extends ListActivity { private Handler myhander = null; // private ListView tablelist = null; // private TextView tableid = null; private List<Tabletbl> data = new ArrayList<Tabletbl>(); @Override protected void onCreate(Bundle savedInstanceState) { // TODO 自动生成的方法存根 super.onCreate(savedInstanceState); // setContentView(R.layout.activity_chazhuo); // tablelist = (ListView) findViewById(R.id.tablelist); // tableid = (TextView) findViewById(R.id.tablenum); myhander = new Handler() { @SuppressWarnings("unchecked") @Override public void handleMessage(Message msg) { // TODO 自动生成的方法存根 switch (msg.what) { case 1: data = (List<Tabletbl>) msg.obj; TableListAdapter tblAdapter = new TableListAdapter(data, getApplicationContext()); setListAdapter(tblAdapter); break; default: break; } } }; new Thread(updatetable).start(); } Runnable updatetable = new Runnable() { @Override public void run() { // TODO 自动生成的方法存根 String urlStr = HttpUtil.Base_URL + "servlet/UpdateTableServlet"; try { // 实例化URL对象 URL url = new URL(urlStr); // 打开连接 URLConnection conn = url.openConnection(); // 获得输入流 InputStream in = conn.getInputStream(); // 实例化DocumentBuilderFactory DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); // 实例化DocumentBuilder DocumentBuilder builder = factory.newDocumentBuilder(); // 获得Document Document doc = builder.parse(in); // 获得节点列表 NodeList nl = doc.getElementsByTagName("table"); TabletblDAO tabletblDAO = new TabletblDAO( getApplicationContext()); if (nl.getLength() > 0) { tabletblDAO.DeleteData(); } // 循环将数据保存到菜谱表 List<Tabletbl> list = new ArrayList<Tabletbl>(); for (int i = 0; i < nl.getLength(); i++) { // 实例化ContentValues // 解析XML文件获得桌号id int id = Integer.parseInt(doc.getElementsByTagName("id") .item(i).getFirstChild().getNodeValue()); int num = Integer.parseInt(doc.getElementsByTagName("num") .item(i).getFirstChild().getNodeValue()); // 名称 String name = doc.getElementsByTagName("name").item(i) .getFirstChild().getNodeValue(); int flag = Integer.parseInt(doc .getElementsByTagName("flag").item(i) .getFirstChild().getNodeValue()); String description = doc .getElementsByTagName("description").item(i) .getFirstChild().getNodeValue(); /* * values.put("id", id); values.put("num", num); * values.put("name", name); values.put("flag", flag); * values.put("description", description); */ list.add(new Tabletbl(id, num, name, flag, description)); // 添加到ContenValues对象 // 插入到数据库 // tabletblDAO.AddTabletblDAO(values); } Message msg = myhander.obtainMessage(); msg.what = 1; msg.obj = list; myhander.sendMessage(msg); } catch (Exception e) { e.printStackTrace(); } } }; private static class TableListAdapter extends BaseAdapter { public List<Tabletbl> mlist = null; private Context context; public TableListAdapter(List<Tabletbl> list, Context c) { mlist = list; context = c; } @Override public int getCount() { // TODO 自动生成的方法存根 return mlist.size(); } @Override public Object getItem(int position) { // TODO 自动生成的方法存根 return position; } @Override public long getItemId(int position) { // TODO 自动生成的方法存根 return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO 自动生成的方法存根 ViewHolder holder; // When convertView is not null, we can reuse it directly, there is // no // need // to reinflate it. We only inflate a new View when the convertView // supplied // by ListView is null. if (convertView == null) { LayoutInflater mInflater = LayoutInflater.from(context); convertView = mInflater.inflate(R.layout.chazhuo_list, null); // Creates a ViewHolder and store references to the two children // views // we want to bind data to. holder = new ViewHolder(); holder.idtext = (TextView) convertView .findViewById(R.id.chazhuo_id); holder.nametext = (TextView) convertView .findViewById(R.id.chazhuo_name); holder.flagtext = (TextView) convertView .findViewById(R.id.chazhuo_flag); holder.remarktext = (TextView) convertView .findViewById(R.id.chazhuo_remark); convertView.setTag(holder); } else { // Get the ViewHolder back to get fast access to the TextView // and the ImageView. holder = (ViewHolder) convertView.getTag(); } // Bind the data efficiently with the holder. holder.idtext.setText(String.valueOf(mlist.get(position).getId())); holder.nametext.setText(mlist.get(position).getName()); if (mlist.get(position).getFlag() == 0) holder.flagtext.setText(context .getString(R.string.chazhuo_kongxian)); else if (mlist.get(position).getFlag() == 1) { holder.flagtext.setText(context .getString(R.string.chazhuo_youren)); } else { holder.flagtext.setText(context .getString(R.string.chazhuo_unkown)); } holder.remarktext.setText(mlist.get(position).getDescription()); return convertView; } static class ViewHolder { TextView idtext; TextView nametext; TextView flagtext; TextView remarktext; } } } ``` 这段XML 我在官方的demo上试了 没问题。 ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:padding="5dp" > <TextView android:id="@+id/textView1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> <TextView android:id="@+id/textView2" android:layout_width="0dp" android:layout_weight="2" android:layout_height="wrap_content" /> <TextView android:id="@+id/textView3" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" /> <TextView android:id="@+id/textView4" android:layout_width="0dp" android:layout_weight="2" android:layout_height="wrap_content" /> </LinearLayout> ``` 这个问题我搞了一两天了 找不到哪里的问题。求大神解决。
mybatis+springMVC的传参问题?
先描述一下需求…… 我需要在JSP前端通过 input type=date 传入两个日期参数,然后查询出下表这2个日期之间的内容 比如传入 2017-10-1和2017-10-3 这样 > /* Table: tbl_paymoney 付款表 / /==============================================================*/ create table tbl_paymoney ( pay_id NUMBER(20) not null, bat_id NUMBER(20), pay_account NUMBER(10,2), pay_pays NUMBER(10,2), pay_state VARCHAR2(20), pay_date DATE, constraint PK_TBL_PAYMONEY primary key (pay_id) ); comment on table tbl_paymoney is '付款表'; comment on column tbl_paymoney.pay_id is '付款ID'; comment on column tbl_paymoney.bat_id is '批次ID'; comment on column tbl_paymoney.pay_account is '赊账'; comment on column tbl_paymoney.pay_pays is '已付款金额'; comment on column tbl_paymoney.pay_state is '状态'; comment on column tbl_paymoney.pay_date is '日期'; > 先贴出报错吧 ``` 开始日期=2017-10-01 结束日期=2017-10-03 ipm date1=2017-10-01 ipm date2=2017-10-03 十月 06, 2017 10:53:33 上午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [springmvc] in context with path [/MedicalExaminationSystem] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.great.dao.UserDao.querySumMoney] with root cause org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.great.dao.UserDao.querySumMoney ``` 这个是action的接收类 ``` @Controller public class ReportAction { @Autowired IReportService Service; @RequestMapping("/getPayM") // 通过两个日期查询两个日期内的金额 public ModelAndView GetPayMoney(Date date1, Date date2) { ModelAndView modelAndView = new ModelAndView("Report"); System.out.println("开始日期=" + date1); System.out.println("结束日期=" + date2); List<PayMoney> list=Service.querySumMoney(date1, date2); System.out.println("跳转信息发送到界面" + list); if (list != null) {// 判断不为空跳转 System.out.println("返回"); modelAndView.addObject(list); return modelAndView; } else { return modelAndView; } } } ``` 这个是接口 ``` public interface IReportService { public List<PayMoney> querySumMoney(Date date1,Date date2); ``` 这个是实现类 这里的sys测试就打印不出来了 ``` @Service public class ReportServiceImp implements IReportService{ @Autowired private UserDao UserDao; @Override public List<PayMoney> querySumMoney(Date date1, Date date2) { System.out.println("ipm date1="+date1); System.out.println("ipm date2="+date2); List<PayMoney> list=UserDao.querySumMoney(date1, date2); System.out.println("测试"+list); if (list != null) { return list; } return null; } } ``` userdao ``` @Repository public interface UserDao { public List<PayMoney> querySumMoney(Date date1,Date date2);//通过日期查询付款表内容 } ``` 接下来是mapper 这里我感觉应该就是问题的源泉…… 里面的pay_date1和2我感觉问题比较大…… ``` <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.great.dao.UserDao"> <select id="querySumMoney" resultType="com.great.entity.PayMoney" parameterType="com.great.entity.PayMoney" resultMap="BaseResultMap"> select sum(pay_account+pay_pays) from TBL_PAYMONEY where to_char(tbl_paymoney.pay_date,'yyyy-mm-dd') between '#{pay_date1,jdbcType=DATE}' and '#{pay_date2,jdbcType=DATE}'; </select> </mapper> ``` 最后是bean ``` public class PayMoney { private Integer pay_id;// 付款ID private Integer bat_id;// 批次ID private Integer pay_account;// 赊账 private Integer pay_pays;// 已付款金额 private String pay_state;// 状态 private Date pay_date1;// 日期1 private Date pay_date2;// 日期2 public PayMoney() { super(); } public PayMoney(Integer pay_id, Integer bat_id, Integer pay_account, Integer pay_pays, String pay_state, Date pay_date1, Date pay_date2) { super(); this.pay_id = pay_id; this.bat_id = bat_id; this.pay_account = pay_account; this.pay_pays = pay_pays; this.pay_state = pay_state; this.pay_date1 = pay_date1; this.pay_date2 = pay_date2; } 下面的tostring和getset就不贴了 ``` 原本只有一个date,因为老是找不到问题所以我自己改成了date1和date2但果然还是不行…… 看了好几天感觉是mapper的语句有问题……但是在orcal上运行时可以查询到的……这里就很费解了,希望大大们能帮帮忙解解惑学校项目时间要到期了T_T
求解----Error:(237, 17) java: 找不到符号
public String findByCombination(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /* * 1. 得到pc:如果页面传递,使用页面的,如果没传,pc=1 */ int pc = getPc(req); /* * 2. 得到url:... */ String url = getUrl(req); /* * 3. 获取查询条件,本方法就是cid,即分类的id */ Book criteria = CommonUtils.toBean(req.getParameterMap(), Book.class); /* * 4. 使用pc和cid调用service#findByCategory得到PageBean */ /* * 5. 给PageBean设置url,保存PageBean,转发到/jsps/book/list.jsp */ pb.setUrl(url); req.setAttribute("pb", pb); return "f:/jsps/book/list.jsp"; } } 运行出了两个错误 Error:(237, 17) java: 找不到符号 符号: 变量 pb 位置: 类 cn.njcit.goods.book.web.servlet.BookServlet Error:(238, 40) java: 找不到符号 符号: 变量 pb 位置: 类 cn.njcit.goods.book.web.servlet.BookServlet
hadoop集群,hdfs dfs -ls / 目录出错
搭建了一个hadoop集群,用hdfs dfs -ls /命令,列出的是本地系统的根目录。 用hdfs dfs -ls hdfs://servicename/ 列出的目录才是hdfs上的目录,可能是什么原因? 执行hive创建的目录也是在本地系统目录上。 集群的配置如下 集群规划: 主机名 IP 安装的软件 运行的进程 hadoop01 192.168.175.129 jdk、hadoop NameNode、DFSZKFailoverController(zkfc) hadoop02 192.168.175.127 jdk、hadoop NameNode、DFSZKFailoverController(zkfc) hadoop03 192.168.175.126 jdk、hadoop ResourceManager hadoop04 192.168.175.125 jdk、hadoop ResourceManager hadoop05 192.168.175.124 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain hadoop06 192.168.175.123 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain hadoop07 192.168.175.122 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain windows:NLB LINUX:LVS 1.liunx虚拟机安装后,虚拟机连接模式要选择host-only模式。然后分配IP(以hadoop01为例) DEVICE="eth0" BOOTPROTO="static" ### HWADDR="00:0C:29:3C:BF:E7" IPV6INIT="yes" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c" IPADDR="192.168.175.129" ### NETMASK="255.255.255.0" ### GATEWAY="192.168.175.1" ### 2.修改主机名: vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=hadoop01 ### 3.关闭防火墙: #查看防火墙状态 service iptables status #关闭防火墙 service iptables stop #查看防火墙开机启动状态 chkconfig iptables --list #关闭防火墙开机启动 chkconfig iptables off 4.免登录配置: #生成ssh免登陆密钥 #进入到我的home目录 cd ~/.ssh ssh-keygen -t rsa (四个回车) 执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥) 将公钥拷贝到要免登陆的机器上 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 或 若报错ssh-copy-id: ERROR: No identities found,是因为找不到公钥路径,加上-i然后再加上路径即可 则用 $ ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_ip 5.主机IP映射关系(/etc/hosts每台机器上都要配置全部映射关系) 192.168.175.129 hadoop01 192.168.175.127 hadoop02 192.168.175.126 hadoop03 192.168.175.125 hadoop04 192.168.175.124 hadoop05 192.168.175.123 hadoop06 192.168.175.122 hadoop07 6./etc/profile下配置java环境变量: export JAVA_HOME=/lichangwu/jdk1.7.0_79 export PATH=$PATH:$JAVA_HOME/bin #刷新profile source /etc/profile 若版本报错,vi /etc/selinux/config,设置SELINUX=disabled,然后重启虚拟机 7.安装zookeeper: 1.安装配置zooekeeper集群(在hadoop05上): 1.1解压 tar -zxvf zookeeper-3.4.6.tar.gz -C /lichangwu/ 1.2修改配置 cd /lichangwu/zookeeper-3.4.6/conf/ cp zoo_sample.cfg zoo.cfg vim zoo.cfg 修改:dataDir=/lichangwu/zookeeper-3.4.6/tmp 在最后添加: server.1=hadoop05:2888:3888 server.2=hadoop06:2888:3888 server.3=hadoop07:2888:3888 保存退出 然后创建一个tmp文件夹 mkdir /lichangwu/zookeeper-3.4.6/tmp 再创建一个空文件 touch /lichangwu/zookeeper-3.4.6/tmp/myid 最后向该文件写入ID echo 1 > /lichangwu/zookeeper-3.4.6/tmp/myid 1.3将配置好的zookeeper拷贝到其他节点(首先分别在hadoop06、hadoop07根目录下创建一个lichangwu目录:mkdir /lichangwu) scp -r /lichangwu/zookeeper-3.4.6/ hadoop06:/lichangwu/ scp -r /lichangwu/zookeeper-3.4.6/ hadoop07:/lichangwu/ 注意:修改hadoop06、hadoop07对应/lichangwu/zookeeper-3.4.6/tmp/myid内容 itcast06: echo 2 > /lichangwu/zookeeper-3.4.6/tmp/myid itcast07: echo 3 > /lichangwu/zookeeper-3.4.6/tmp/myid 8.安装配置hadoop集群(在hadoop01上操作): 2.1解压 tar -zxvf hadoop-2.4.1.tar.gz -C /lichangwu/ 2.2配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下) #将hadoop添加到环境变量中 vim /etc/profile export JAVA_HOME=/lichangwu/jdk1.7.0_79 export HADOOP_HOME=/lichangwu/hadoop-2.4.1 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin #hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下 cd /lichangwu/hadoop-2.4.1/etc/hadoop 2.2.1修改hadoo-env.sh export JAVA_HOME=/lichangwu/jdk1.7.0_79 2.2.2修改core-site.xml <configuration> <!-- 指定hdfs的nameservice为ns1 --> <property> <name>fs.defaultFS</name> <value>hdfs://ns1</value> </property> <!-- 指定hadoop临时目录 --> <property> <name>hadoop.tmp.dir</name> <value>/lichangwu/hadoop-2.4.1/tmp</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>hadoop05:2181,hadoop06:2181,hadoop07:2181</value> </property> </configuration> 2.2.3修改hdfs-site.xml <configuration> <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns1</value> </property> <!-- ns1下面有两个NameNode,分别是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns1</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn1</name> <value>hadoop01:9000</value> </property> <!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>hadoop01:50070</value> </property> <!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>hadoop02:9000</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>hadoop02:50070</value> </property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop05:8485;hadoop06:8485;hadoop07:8485/ns1</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/lichangwu/hadoop-2.4.1/journal</value> </property> <!-- 开启NameNode失败自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.ns1</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行--> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!-- 使用sshfence隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/hadoop/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔离机制超时时间 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> </configuration> 2.2.4修改mapred-site.xml <configuration> <!-- 指定mr框架为yarn方式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> 2.2.5修改yarn-site.xml <configuration> <!-- 开启RM高可靠 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> <!-- 指定RM的名字 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 分别指定RM的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>hadoop03</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>hadoop04</value> </property> <!-- 指定zk集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>hadoop05:2181,hadoop06:2181,hadoop07:2181</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> 2.2.6修改slaves(slaves是指定子节点的位置,因为要在itcast01上启动HDFS、在itcast03启动yarn, 所以itcast01上的slaves文件指定的是datanode的位置,itcast03上的slaves文件指定的是nodemanager的位置) hadoop05 hadoop06 hadoop07 2.2.7配置免密码登陆 #首先要配置itcast01到hadoop02、hadoop03、hadoop04、hadoop05、hadoop06、hadoop07的免密码登陆 #在hadoop01上生产一对钥匙 ssh-keygen -t rsa #将公钥拷贝到其他节点,包括自己 ssh-coyp-id hadoop01 ssh-coyp-id hadoop02 ssh-coyp-id hadoop03 ssh-coyp-id hadoop04 ssh-coyp-id hadoop05 ssh-coyp-id hadoop06 ssh-coyp-id hadoop07 #配置hadoop03到hadoop04、hadoop05、hadoop06、hadoop07的免密码登陆 #在hadoop03上生产一对钥匙 ssh-keygen -t rsa #将公钥拷贝到其他节点 ssh-coyp-id hadoop04 ssh-coyp-id hadoop05 ssh-coyp-id hadoop06 ssh-coyp-id hadoop07 #注意:两个namenode之间要配置ssh免密码登陆,别忘了配置hadoop02到hadoop01的免登陆 在hadoop02上生产一对钥匙 ssh-keygen -t rsa ssh-coyp-id -i hadoop01 2.4将配置好的hadoop拷贝到其他节点 scp -r hadoop-2.4.1/ hadoop02:/lichangwu/hadoop-2.4.1/ scp -r hadoop-2.4.1/ hadoop03:/lichangwu/hadoop-2.4.1/ scp -r hadoop-2.4.1/ hadoop04:/lichangwu/hadoop-2.4.1/ scp -r hadoop-2.4.1/ hadoop05:/lichangwu/hadoop-2.4.1/ scp -r hadoop-2.4.1/ hadoop06:/lichangwu/hadoop-2.4.1/ scp -r hadoop-2.4.1/ hadoop07:/lichangwu/hadoop-2.4.1/ ###注意:严格按照下面的步骤 2.5启动zookeeper集群(分别在hadoop05、hadoop06、hadoop07上启动zk) cd /lichangwu/zookeeper-3.4.6/bin/ ./zkServer.sh start #查看状态:一个leader,两个follower ./zkServer.sh status 2.6启动journalnode(分别在在hadoop05、hadoop06、hadoop07上执行) cd /lichangwu/hadoop-2.4.1 sbin/hadoop-daemon.sh start journalnode #运行jps命令检验,hadoop05、hadoop06、hadoop07上多了JournalNode进程 2.7格式化HDFS #在hadoop01上执行命令: hdfs namenode -format #格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件, 这里我配置的是/lichangwu/hadoop-2.4.1/tmp,然后将/lichangwu/hadoop-2.4.1/tmp拷贝到hadoop02的/lichangwu/hadoop-2.4.1/下。 scp -r tmp/ hadoop02:/lichangwu/hadoop-2.4.1/ 2.8格式化ZK(在hadoop01上执行即可) hdfs zkfc -formatZK 2.9启动HDFS(在hadoop01上执行) sbin/start-dfs.sh 2.10启动YARN(#####注意#####:是在hadoop03上执行start-yarn.sh, 如果hadoop04上没有启动成功,则在hadoop04上再启动一次start-yarn.sh; 把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动) sbin/start-yarn.sh 到此,hadoop-2.4.1配置完毕,可以统计浏览器访问: http://192.168.175.129:50070 NameNode 'hadoop01:9000' (active) http://192.168.175.127:50070 NameNode 'hadoop02:9000' (standby)
空指针异常我怎么也找不出问题
java.lang.NullPointerException com.eshore.dao.ProductDaoImpl.findAll(ProductDaoImpl.java:33) com.eshore.service.ProductService.findAll(ProductService.java:36) org.apache.jsp.product_005flist2_jsp._jspService(product_005flist2_jsp.java:101) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:727) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) javax.servlet.http.HttpServlet.service(HttpServlet.java:727) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 我是查询语句,JSP JDBC连接MYsql的,用DAO模式, 下面是报错里面这两句有问题的话的出处: 第一句:com.eshore.dao.ProductDaoImpl.findAll(ProductDaoImpl.java:33) public List<Product> findAll(String product_name) throws Exception{ List<Product> list = new ArrayList<Product>(); String sql = "select product_id,product_name,price,info from product"; if(product_name!=null&&!"".equals(product_name)){ sql = "select product_id,product_name,price,info from product where product_name like? "; this.pstmt.setString(1,"%" + product_name + "%"); } else { this.pstmt = this.conn.prepareStatement(sql); } ResultSet rs = this.pstmt.executeQuery(); Product product = null; while (rs.next()){ product = new Product(); product.setProduct_id(rs.getString(1)); product.setProduct_name(rs.getString(2)); product.setPrice(rs.getDouble(3)); product.setInfo(rs.getString(4)); list.add(product); } this.pstmt.close(); return list; } 标的是:this.pstmt.setString(1,"%" + product_name + "%");这句 第二句:com.eshore.service.ProductService.findAll(ProductService.java:36) public List<Product> findAll(String product_name) throws Exception{ List<Product> list = null; try{ list = this.dao.findAll(product_name); } catch (Exception e){ throw e; } finally { this.dbconn.close(); } return list; } 是里面的:list = this.dao.findAll(product_name); 在第二处可疑错中,我开始想是不是product_name是不是没判断非空, 加了if(product_name!=null&&!"".equals(product_name)){ 变成: try{ if(product_name!=null&&!"".equals(product_name)){ list = this.dao.findAll(product_name); }} 什么的还是报这个错: java.lang.NullPointerException com.eshore.dao.ProductDaoImpl.findAll(ProductDaoImpl.java:33) com.eshore.service.ProductService.findAll(ProductService.java:36)
Spring事务的问题,bulkUpdate,或query.executeUpdate
今天在测试spring任务调度时,突然发现我配的声明事务不起作用了,找了好久才发现不是我的事务的问题,是我在Dao中用了一个方法有问题 方法如下: public void updateByIds(final Set<String> updateIds)throws DaoException{ try { String queryString="update from Yaoyueyingyue y set y.state='2' where y.yaoyueid in (?)"; getHibernateTemplate().bulkUpdate(queryString, updateIds.toArray()); } catch (Exception e) { e.printStackTrace(); throw new DaoException(this.getClassName()+e.getMessage()); } updateIds是一个包含要更新的编号集合,我发现用这个方法在我Manager中调用Dao事务就不起作用了,后来又改成这样 public void updateByIds(final Set<String> updateIds)throws DaoException{ try { getHibernateTemplate().execute(new HibernateCallback(){ final String hql="update Yaoyueyingyue y set y.state=2 where yaoyueid in (:yaoyueid)"; public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query=session.createQuery(hql); query.setParameterList("yaoyueid", updateIds); query.executeUpdate(); return null; } }); } catch (Exception e) { e.printStackTrace(); throw new DaoException(this.getClassName()+e.getMessage()); } } 事务还是不行,这两个方法好像不受spring AOP事务管理,只要执行到这个Dao的方法就自动提交了,出来异常也不能回滚,真是郁闷,小弟对这块不是很明白,为什么事务就不行了呢,希望那位牛人,帮我解释下,谢谢了, 我的spring声明事务大概如下: <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close"> <property name="forceShutdown"> <value>true</value></property> </bean> <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"> <property name="transactionTimeout" value="300"/> </bean> <bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManager"><ref bean="atomikosTransactionManager" /></property> <property name="userTransaction"><ref bean="atomikosUserTransaction" /></property> </bean> <aop:config> <!-- This definition creates auto-proxy infrastructure based on the given pointcut, expressed in AspectJ pointcut language. Here: applying the advice named "txAdvice" to all methods on classes named PetStoreImpl. --> <aop:advisor pointcut="execution(* com.goal.log.manager.*.*(..))" advice-ref="txAdvice" /> <aop:advisor pointcut="execution(* com.goal.system.manager.*.*(..))" advice-ref="txAdvice" /> </aop:config> <!-- @Transactional 时要使用下面一行 --> <!-- <tx:annotation-driven transaction-manager="springTransactionManager" proxy-target-class="true"/> --> <!-- Transaction advice definition, based on method name patterns. Defaults to PROPAGATION_REQUIRED for all methods whose name starts with "insert" or "update", and to PROPAGATION_REQUIRED with read-only hint for all other methods.--> <!-- 引用springTransactionManager --> <tx:advice id="txAdvice" transaction-manager="springTransactionManager"> <tx:attributes> <tx:method name="save*" rollback-for="java.lang.Exception"/> <tx:method name="insert*" rollback-for="java.lang.Exception"/> .... <tx:method name="*" read-only="true" rollback-for="java.lang.Exception"/> </tx:attributes> </tx:advice> atomikosTransactionManager这个东西不用管,是一个开源的支持JTA分布式的JAR,希望有人能够为我解答........ [b]问题补充:[/b] 谢谢你的解答,但是我还是不明白你的意思,你是指我的Dao中用了内部类吗,你所指的 “调用updateByIds方法 的代码 跳出你的当前类 然后在别的类调用当前了类的接口中的方法updateByIds ”是指什么意思,能不能说明白点,谢谢了!!! [b]问题补充:[/b] 谢谢你的答复,你的意思我也理解,但好像不是这个问题,因为我并没有像你说的那样在类的内部调用,我的所有方法都是在业务逻辑层调用的Manager层,Manager层我是在Spring中配置了的声明事务的,我给你据个例子: 这两个方法都是Dao中的 方法一: [code="java"] public void updateByIds(final Set<String> updateIds)throws DaoException{ try { /*String queryString="update from Yaoyuepub y set y.state='2' where y.yaoyueid in (?)"; getHibernateTemplate().bulkUpdate(queryString, updateIds.toArray());*/ getHibernateTemplate().execute(new HibernateCallback(){ final String hql="update Yaoyuepub y set y.state=2 where yaoyueid in (:yaoyueid)"; public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query=session.createQuery(hql); query.setParameterList("yaoyueid", updateIds); query.executeUpdate(); return null; } } ); } catch (Exception e) { e.printStackTrace(); throw new DaoException(this.getClassName()+e.getMessage()); } } [/code] 这个方法是把所有的要改的ID都一次性更新调,我是不想执行多条sql,在Manager中调用这个方法事务就起不了作用,还有一个方法,就是普通的更新对象 [code="java"] public void update(T t) throws DaoException { try { getHibernateTemplate().update(t); } catch (Exception e) { throw new DaoException(getClassName() + " update exception...",e); } } [/code] 要是把刚才Manager中调用改成循环执行下面的方法一个一个对象,就是有事务的,所以调用都一样,更类的内部调用应给没有关系的,我认为不管是query.executeUpdate还是spring自己提供的bulkUpdate这两个方法都是要写sql的,目的是满足批量更新和更大的灵活性,但是事务就不行了,我认为肯定可以让声明式事务支持这两个方法,就是不知道怎么配置一下,你可以自己在代码中分别做个例子试试,看看是不是用批量更新事务就控制不了了, 这就是我的理解,还请多多指教,谢谢诶!!! [b]问题补充:[/b] 我测试过了,以为可以了,但是还是不行,下面是我调用的一小部分代码 [code="java"] public void runThread() { Set<String> updateIds = new HashSet<String>(); for (Yaoyueyingyue yaoyueyingyue : yaoyueyingyues) { updateIds.add(yaoyueyingyue.getYaoyueid()); } if (updateIds.size() > 0) { yaoyuepubDao.updateByIds(updateIds); if(true) throw new RuntimeException("AAAAAAAAAAAAAAAAAAAAAAAAA"); yaoyueyingyueDao.updateByIds(updateIds); } [/code] 上面是我Manager中Spring任务调度自动执行的方法的一小部分,我中间估计抛出了异常,但是yaoyuepubDao数据库中都更新了,事务不起作用,我估计其实就是和bulkUpdate方法一样,只要这个方法能用事务控制了的话,应该没问题了 [b]问题补充:[/b] 下面是我在网上拷贝的--------------------------------   Spring的HibernateTemplate提供了Hibernate的完美封装,即通过匿名类实现回调,来保证Session的自动资源管理和事务的管理。其中核心方法是:   java代码: HibernateTemplate.execute(new HibernateCallback() {  public Object doInHibernate(Session session) throws HibernateException {   ....  } }   回调方法提供了session作为参数,有了session,就可以自由的使用Hibernate API编程了。使用了spring的之后,代码修改如下:   web层代码:   java代码: DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Department.class); detachedCriteria.createAlias("employees", "e").add(Restrictions.eq("name", "department")).add(Restrictions.gt(("e.age"), new Integer(20))); departmentManager.findByCriteria(detachedCriteria);   构造detachedCriteria,作为参数传递给departmentManager   业务层代码使用spring,DepartmentManager的findByCriteria如下:   java代码: public List findByCriteria(final DetachedCriteria detachedCriteria) {  return (List) getHibernateTemplate().execute(new HibernateCallback() {   public Object doInHibernate(Session session) throws HibernateException {    Criteria criteria = detachedCriteria.getExecutableCriteria(session);    return criteria.list();   }  }); }   实际上也就是:   java代码: Criteria criteria = detachedCriteria.getExecutableCriteria(session); return criteria.list();   而已   但是该程序代码执行,会抛出强制类型转换异常!   我跟踪了一下spring和Hibernate源代码,原因如下:   spring的HibernateTemplate的execute方法提供的回调接口具有Session作为参数,但是实际上,默认情况下,HibernateTemplate传递给回调接口的session并不是org.hibernate.impl.SessionImpl类,而是SessionImpl类的一个Proxy类。之所以替换成为一个Proxy类,HibernateTemplate的注释说明,Proxy提供了一些额外的功能,包括自动设置Cachable,Transaction的超时时间,Session资源的更积极的关闭等等。   java代码: private boolean exposeNativeSession = false; ...   execute方法内部: Session sessionToExpose = (exposeNativeSession ? session : createSessionProxy(session));   但是遗憾的是,Hibernate的DetachedCriteria的setExecutableCriteria方法却要求将session参数强制转为SessionImpl,但是spring传过来的却是一个Proxy类,因此就报错了。   java代码: public Criteria getExecutableCriteria(Session session) {  impl.setSession( (SessionImpl) session ); // 要求SessionImpl,Spring传递的是Proxy  return impl; }   解决方法,禁止Spring的HibernateTemplate传递Proxy类,强制要求它传递真实的SessionImpl类,即给exexute方法增加一个参数,提供参数为true,如下:   java代码: public List findByCriteria(final DetachedCriteria detachedCriteria) {  return (List) getHibernateTemplate().execute(new HibernateCallback() {   public Object doInHibernate(Session session) throws HibernateException {    Criteria criteria = detachedCriteria.getExecutableCriteria(session);    return criteria.list();   }  }, true); } [b]问题补充:[/b] bulkUpdate这个方法按你给的源码,那我是用错了,但是你所说的我的模拟异常不再AOP的事务之内,我就不同意你的观点了,[code="java"] if (updateIds.size() > 0) { yaoyuepubDao.updateByIds(updateIds); // 事务开启 执行updateByIds 事务提交 if(true) throw new RuntimeException("AAAAAAAAAAAAAAAAAAAAAAAAA"); yaoyueyingyueDao.updateByIds(updateIds); // 事务开启 执行updateByIds 事务提交 } [/code] 我这段代码是两个Dao的操作,而这两个Dao的操作是被封装在一个Manger中的方法中的,Manager的每个方法都是有事务的,在操作玩第一个Dao后抛出一个RunTime异常,这时候第一个Dao操作已经执行了,这时候事务应该回滚的,不应该去更新的第一个Dao的操作,Manager中本来就业务层,中间有好多的Dao操作,事务应该控制这些Dao要不都提交,要不都回滚,你说呢,而你说的在11-12行之间加异常,那在一个Dao中,再说的的Dao是没有配事务的,又何谈回滚呢,要是把我上面两个Dao操作改成普通的对象更新,是可以回滚的,这个我肯定 比如这样 [code="java"] yaoyuepubDao.update(yaoyuepub); if(true) throw new RuntimeException("AAAAAAAAAAAAAAAAAAAAAAAAA"); yaoyueyingyueDao.update(yaoyueyingyue); [/code] 这个时候如果抛出异常,yaoyuepub是不会更新到数据库的,会回滚的,所以我总结就是executeUpdate(sql)这个方法我们直接sql,和操作对象是不一样的的,具体我也没有研究 [b]问题补充:[/b] [code="java"] public void updateByIds(final Set<String> updateIds)throws DaoException{ try { getHibernateTemplate().execute(new HibernateCallback(){ final String hql="update Yaoyuepub y set y.state=2 where yaoyueid in (:yaoyueid)"; public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query=session.createQuery(hql); query.setParameterList("yaoyueid", updateIds); query.executeUpdate(); return null; } } , true); } catch (Exception e) { e.printStackTrace(); throw new DaoException(this.getClassName()+e.getMessage()); } } [/code] 把上面的updateIds方法改成: [code="java"] public void updateByIds(final Set<String> updateIds)throws DaoException{ try { DetachedCriteria dc=DetachedCriteria.forClass(Yaoyuepub.class); dc.add(Restrictions.in("yaoyueid", updateIds)); List<Yaoyuepub> yaoyuepubs=select(dc); for(Yaoyuepub y:yaoyuepubs){ update(y); } } catch (Exception e) { e.printStackTrace(); throw new DaoException(this.getClassName()+e.getMessage()); } } [/code] 所有的调用都不变,spring事务就起作用了,说明自己createQuery然后executeUpdate是不被事务管理的,后其他都没有关系
通过鼠标点击使用ajax获取table其中一行tr的数据传入action
这个是前端,通过ajax获取团建单位和团检登记时间传到后台action接收,查询到的东西返回页面,通过for in打印到页面<tbody>里,现在的问题就是怎么再通ajax获取到刚才打印出来的数据, (鼠标点击打印出来表格的其中一行获取这行的数据并发送到action)就这步的代码我不会…… 需求: 我第一次靠两个参数查询出数据,显示在一个table中,接下来我需要鼠标点击这个table中的tr,以这个tr中的td,查询出另外的数据显示在另一个table,我现在是不会用鼠标点击取得第一次打印出的行的数据 ``` <body> <div> <table class="table"> <tr> <th>团建单位:</th> <td><input type="text" id="comname"></td> <th>团检登记时间:</th> <td><input type="date" id="date"></td> <th><input class="button button-silver" type="button" id="query_comname" value="查询" style="width:40%;"> </td> <th><input class="button button-silver" type="button" value="退选中" style="width:40%;"></th> </tr> </table> </div> <div id="itemRefundDiv1"> <table class="table" id="tab1000"> <thead> <tr> <th class="box"><input type="checkbox" style="zoom:170%;"></th> <th>体检人</th> <th>体检号</th> <th>登记时间</th> <th>开始体检时间</th> </tr> </thead> <tbody> <!-- 打印第一个BOX的内容 --> </tbody> </table> </div> <div id="itemRefundDiv2"> <table border="1px" class="table"> <tr> <td class="box"><input type="checkbox" style="zoom:170%;"></td> <th>套餐或项目名称</th> <th>数量</th> <th>金额</th> <th>登记人</th> <th>登记时间</th> </tr> </table> </div> <script type="text/javascript"> $(function() { $("#query_comname").click(function() { var cn = $("#comname").val(); var dt = $("#date").val(); $.ajax({ url : "itemRefund/query_com", type : "post", data : { "com_name" : cn, "reg_time" : dt }, success : function(data) { if (data.NOTFOUND == "true") { alert("找不到合符条件的信息"); } else { //alert(data.listRefund[0].emp_name); var listRefund = data.listRefund; var str = ""; for (var i in data.listRefund) { str += "<tr id =" + "listRefund" + i + ">"; str += "<td class='box'>" + "<input type='checkbox' style='zoom:170%;'>" + "</td>"; str += "<td align='center' id=A" + data.listRefund[i].emp_name + ">" + data.listRefund[i].emp_name + "</td>"; str += "<td align='center' id=B" + data.listRefund[i].reg_no + ">" + data.listRefund[i].reg_no + "</td>"; str += "<td align='center' id=C" + data.listRefund[i].reg_time + ">" + data.listRefund[i].reg_time + "</td>"; str += "<td align='center' id=D" + data.listRefund[i].bat_begin + ">" + data.listRefund[i].bat_begin + "</td>"; str += "</tr>"; } $("#tab1000 tbody").empty(); $("#tab1000 tbody").append(str); } } }); }); }); </script> </body> ``` 下面是action类 ``` @Controller @RequestMapping("itemRefund") public class itemRefundAction { @Autowired IItemRefundService iitemRefundService; @RequestMapping(value="query_com",method=RequestMethod.POST) @ResponseBody public Map<String, Object> query(itemRefund it){ System.out.println("查询公司" + it); //通过团检单位和团检登记时间查询内容用来退项 List<itemRefund> list = iitemRefundService.queryRefund(it); Map<String, Object> map = new HashMap<String, Object>(); if(!list.isEmpty()){ map.put("NOTFOUND", "false"); map.put("listRefund", list); }else{ map.put("NOTFOUND", "true"); } System.out.println("map="+map); return map; } @RequestMapping(value="query_Refund",method=RequestMethod.POST) @ResponseBody public Map<String, Object> queryRefund(itemRefund it){ System.out.println("收到的数值"); //这里接收第二次发送的数据 Map<String, Object> map = new HashMap<String, Object>(); return map; } } ```
android RecyclerView刷新数据源后item出现空白项
我在联系人界面使用searchview实现搜索,在关闭搜索的时候要重新恢复联系人数据。 我把RecyclerView中的mData数据源给clear了,mData是List<UserInfo>类型的。 但是在clear之后我重新调用了加载数据源的方法之后,恢复的数据源在每一组数据顶部都会出现一行空白项,具体是:打开搜索,搜索完毕之后,重新加载数据源,每一组联系人都出现一行空白的item,这个操作操作几次,就出现几行空白的item。 看图 ![图片说明](https://img-ask.csdn.net/upload/201710/11/1507700608_104545.png) 下面是我的代码: ``` @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //此处必须设置,告诉Fragment我们需要菜单,否则onCreateOptionsMenu()方法不会被回调 setHasOptionsMenu(true); // Inflate the layout for this fragment view = inflater.inflate(R.layout.fragment_customers, container, false); mRv = (RecyclerView) view.findViewById(R.id.rv); mRv.setLayoutManager(mManager = new LinearLayoutManager(getActivity())); initDatas(); //initDatas(getResources().getStringArray(R.array.provinces)); initData(view); return view; } ``` 加载数据源的代码 ``` private void initData(View view) { adapter=new UserAdapter(getActivity(), mDatas); mRv.setAdapter(mAdapter =adapter); mDecoration=null; mRv.addItemDecoration(mDecoration = new TitleItemDecoration(getActivity(), mDatas)); //如果add两个,那么按照先后顺序,依次渲染。 //mRv.addItemDecoration(new TitleItemDecoration2(this,mDatas)); mRv.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST)); //使用indexBar mTvSideBarHint = (TextView) view.findViewById(R.id.tvSideBarHint);//HintTextView mIndexBar = (IndexBar) view.findViewById(R.id.indexBar);//IndexBar mIndexBar.setmPressedShowTextView(mTvSideBarHint)//设置HintTextView .setNeedRealIndex(true)//设置需要真实的索引 .setmLayoutManager(mManager)//设置RecyclerView的LayoutManager .setmSourceDatas(mDatas);//设置数据源 adapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(View v, int position) { UserInfo userInfo= mDatas.get(position); Intent intent=new Intent(getActivity(),CustomersDetailsActivity.class); intent.putExtra("name",userInfo.getName()); startActivity(intent); //Toast.makeText(getActivity(), "pos:"+position, Toast.LENGTH_SHORT).show(); } }); } ``` 关闭搜索的代码 ``` searchView.setOnCloseListener(new SearchView.OnCloseListener() { @Override public boolean onClose() { Toast.makeText(getActivity(), "关闭搜索", Toast.LENGTH_SHORT).show(); mDatas.clear(); initDatas(); initData(view); //adapter.notifyItemRangeChanged(0,mDatas.size()); adapter.notifyDataSetChanged(); return false; } }); ``` 我在国内国外都找了,好像没有发现有谁出现这样的问题,不知道哪里出问题了,还请各位高手指点下。
SpringMVC3.2+hibernate4.2.5 多数据库注解 找不到实体问题
下面我只粘主要的配置文件和实体 applicationContext.xml <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:hsm-db-dchsqlserver.properties</value> <value>classpath:hsm-db-drhsqlserver.properties</value> </list> </property> </bean> <import resource="db-dch.xml" /> <import resource="db-drh.xml" /> 资源文件就不贴了,资源文件主要配置数据库驱动连接等相关配置 db-dch.xml ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683458_426800.png) ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683433_468361.png) ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683482_414961.png) db-drh.xml ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683619_647886.png) ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683631_436180.png) ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683683_883648.png) 两个数据库都有一个Employee的表,所以这里我分开两个实体 DCHEmployeeEntity ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683700_464099.png) DRHEmployeeEntity ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683710_847204.png) DAO也分两个 DCHEmployeeDAO ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683694_848628.png) DRHEmployeeDAO ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683747_220630.png) 目录结构 ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683756_255356.png) 控制类,项目访问 import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.dch.projects.dch.employee.entity.DCHEmployeeEntity; import com.dch.projects.dch.employee.service.IDCHEmployeeService; import com.dch.projects.drh.employee.entity.DRHEmployeeEntity; import com.dch.projects.drh.employee.service.IDRHEmployeeService; import com.dch.projects.oms.user.entity.UserEntity; import com.dch.projects.oms.user.service.IUserService; @Controller @RequestMapping("/") public class IndexController { @Autowired private IUserService userService; @Autowired private IDCHEmployeeService dchEmployeeService; @Autowired private IDRHEmployeeService drhEmployeeService; @RequestMapping("/main") public ModelAndView main(HttpServletRequest request) { List<UserEntity> listUsers=this.userService.getAllUsersByHql("from UserEntity"); for(UserEntity user:listUsers){ System.out.println(user.getName()); } List<DCHEmployeeEntity> listDCHEmployees=this.dchEmployeeService.getAllDCHEmployeesByHql("from DCHEmployeeEntity"); for(DCHEmployeeEntity employee:listDCHEmployees){ System.out.println("德诚行:"+employee.getEmpNo()+" "+employee.getEmpName()); } List<DRHEmployeeEntity> listDRHEmployees=this.drhEmployeeService.getAllDRHEmployeesByHql("from DRHEmployeeEntity"); for(DRHEmployeeEntity employee:listDRHEmployees){ System.out.println("德瑞行:"+employee.getEmpNo()+" "+employee.getEmpName()); } return new ModelAndView("index/main"); } } 后台错误 ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683806_403295.png) ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683774_999026.png) 页面错误,都一样 ![图片说明](https://img-ask.csdn.net/upload/201501/08/1420683824_221980.png) DCHEmployee这个能查出数据,就是DRHEmployee报错,配置那里看来看去都没什么问题,除了table的名字是一样,但如果我使用hibernate配置文件配置实体而不用注解的话是没问题,使用注解就出现这问题。 哪位大神帮看下问题出在哪里,谢谢了。
Android华为荣耀8上无法运行google voice recognition的code
想学习一下android studio上面的google voice recognition的code, 在网上找了 sample code之后, 在华为荣耀8实机上运行,button上显示“recognizer not present”. 显示这个实机的Android version 是 7.0,API level 27 ![图片说明](https://img-ask.csdn.net/upload/201803/21/1521646543_62155.png) 下面是MainActivity.java ```public class MainActivity extends Activity { private static final String TAG = "VoiceRecognition"; private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; private final int AUDIO_REQUEST_CODE = 3; private TextView textView; private Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initWidget(); // Check to see if a recognition activity is present PackageManager pm = getPackageManager(); List<ResolveInfo> activities = pm.queryIntentActivities( new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); if (activities.size() != 0) { button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED) { Toast.makeText(MainActivity.this, "You have already granted this permission!", Toast.LENGTH_SHORT).show(); } else { requestStoragePermission(); } startVoiceRecognitionActivity(); } }); } else { button.setEnabled(false); button.setText("Recognizer not present"); } } private void requestStoragePermission() { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO)) { new AlertDialog.Builder(this) .setTitle("Permission needed") .setMessage("This permission is needed because of this and that") .setPositiveButton("ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.RECORD_AUDIO}, AUDIO_REQUEST_CODE); } }) .setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .create().show(); } else { ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.RECORD_AUDIO}, AUDIO_REQUEST_CODE); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == AUDIO_REQUEST_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "Permission GRANTED", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Permission DENIED", Toast.LENGTH_SHORT).show(); } } } private void initWidget() { textView = (TextView)findViewById(R.id.tv); button = (Button)findViewById(R.id.btn); } /** * Fire an intent to start the speech recognition activity. */ private void startVoiceRecognitionActivity() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); // Display an hint to the user about what he should say. intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Please speak now");//注意不要硬编码 // Given an hint to the recognizer about what the user is going to say intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); // Specify how many results you want to receive. The results will be sorted // where the first result is the one with higher confidence. intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);//通常情况下,第一个结果是最准确的。 startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { // Fill the list view with the strings the recognizer thought it could have heard ArrayList<String> matches = data.getStringArrayListExtra( RecognizerIntent.EXTRA_RESULTS); StringBuilder stringBuilder = new StringBuilder(); int Size = matches.size(); for(int i=0;i<Size;++i) { stringBuilder.append(matches.get(i)); stringBuilder.append("\n"); } textView.setText(stringBuilder); } super.onActivityResult(requestCode, resultCode, data); }} ``` 顺带一提,这个code在上图的API level 22,Android 5.1的虚拟机是可以运行的,但是 在API level 27,Android 8.0就出现了直接跳到“try again”界面(下图) 在Android 5.1 ![图片说明](https://img-ask.csdn.net/upload/201803/21/1521646678_861804.png) 在Android 8.0 ![图片说明](https://img-ask.csdn.net/upload/201803/21/1521646712_807160.png) 总结一下,其实是两个问题,这个code在华为Android 7.0的实机上无法加载google voice recognition的dialog, 在虚拟机Android8.0 虽然可以加载dialog, 但是无法正常运行voice recognition, 在Android 5.1上可以正常运行。之前有提问过一次,有回答说是6.0后permission的问题,这个code已经加了runtime permission确保麦克风是有permission的,但是问题依然存在。请大神帮忙看下问题到底出在哪。谢谢。
hibernate缓存失效?求教!
在学习hibernate的时候发现只要在session.createQuery("from Student").list 中加上.setFirstResult(0).setMaxResults(50) 就会发生N+1问题。 这个是我的一级缓存测试代码: HibernateUtil是把SessionFactory跟session包装起来了。 ```@Test public void Test04(){ Session session = null; try { session = HibernateUtil.getSession(); List<Student> ls = session.createQuery("select stu from Student stu ") .setFirstResult(0).setMaxResults(100).list(); Iterator<Student> stus = ls.iterator(); for(;stus.hasNext();){ Student stu = stus.next(); System.out.println(stu.getName()); } stus = session.createQuery("select stu from Student stu ").setFirstResult(0).setMaxResults(50).iterate(); while(stus.hasNext()){ Student stu = stus.next(); System.out.println(stu.getName()); } } catch (Exception e) { session.getTransaction().rollback(); e.printStackTrace(); } finally{ if(session!=null) session.close(); } } ``` 本来应该是第一句SQL结束后下面只会执行一条SQL查询到缓存里的ID,然后就输出其他数据, 但结果是每一条数据都要去查询,造成N+1问题。结果如图: ![图片说明](https://img-ask.csdn.net/upload/201702/20/1487565607_393895.png) 之后就是二级缓存也是同样的情况,(ps:就只有查询分页数据的时候有问题,其他都没问题,查询缓存我试过了。所以我就不放二级缓存的配置了。) 代码如下: ```@Test public void Test05(){ Session session = null; try { session = HibernateUtil.getSession(); List<Student> stus = session.createQuery(" from Student ") .setFirstResult(0).setMaxResults(50).list(); } catch (Exception e) { session.getTransaction().rollback(); e.printStackTrace(); } finally{ if(session!=null) session.close(); } try { session = HibernateUtil.getSession(); Iterator<Student> ls = session.createQuery("from Student") .setFirstResult(0).setMaxResults(50) .iterate(); while(ls.hasNext()){ Student stu = ls.next(); System.out.println(stu.getName()); } } catch (Exception e) { session.getTransaction().rollback(); e.printStackTrace(); } finally{ if(session!=null) session.close(); } } ``` 结果如图: ![图片说明](https://img-ask.csdn.net/upload/201702/20/1487565624_305086.png) 现在的情况是;如果我把.setMaxResults(50)去掉的话就会正常。 或者我使用了 session.createQuery("from Student").setParameter(0, "%张%").setFirstResult(0).setMaxResults(50) 的话,就又会正常运行了。只发了两条SQL, 求教大神们,高手们告之我究竟是哪里出错误?我在网上找了好多题目都找不到原因。
想参考springside实现Hibernate的零配置,但提示错误:org.hibernate.hql.ast.QuerySyntaxException
想参考Springside实现Hibernate的零配置文件,写了一个简单的测试用例,查询一张表(数据库表名为TB_USER,对应的实体类名为User),但是出错如下: org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [from User] 错误提示是说我的“from User”语句中“User”未建立映射。在网上查过,类似的问题一般是因为类名的大小写错误或者配置文件错误,导致类名和数据库表名没有建立映射关系,但我似乎没有这类问题。好几天了找不到原因,不知道哪里的配置有毛病,以下是相关代码 测试用例如下: [code="java"] import org.springframework.beans.factory.annotation.Autowired; import org.springside.modules.test.junit38.SpringTransactionalTestCase; import accountant.entity.User; public class DaoTest extends SpringTransactionalTestCase { @Autowired org.springside.modules.orm.hibernate.HibernateDao<User, Long> dao ; //列出所有User表记录 public void testUserList() { //试过把完整包名带上,写成“from accountant.entity.User”,还是一样的错误 dao.find("from User", null); } } [/code] User类代码如下,其中@Table(name="TB_USER")指明对应的数据库表是“TB_USER”,这张表在库中确定存在,并有两条记录 [code="java"] package accountant.entity; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; @Entity @Table(name="TB_USER") public class User { String name; String id; String sex; String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } [/code] applicationContext.xml中的数据库相关配置如下,其中 “<property name="packagesToScan" value="accountant.entity.*" />”是指定自动扫描实体类的包,User类也就在“accountant.entity”这个包下 [code="java"] <!-- 数据源配置,使用应用内的DBCP数据库连接池。--> <!--这里数据库的连接应该是没问题的,因为出错时提示的是Hql执行错误,说明数据库连接已经成功建立了,不过是执行的语句有问题 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- Connection Pooling DBCP --> <property name="initialSize" value="5" /> <property name="maxActive" value="100" /> <property name="maxIdle" value="30" /> <property name="maxWait" value="1000" /> <property name="poolPreparedStatements" value="true" /> <property name="defaultAutoCommit" value="false" /> </bean> <!-- Hibernate配置--> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="namingStrategy"> <bean class="org.hibernate.cfg.ImprovedNamingStrategy" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider </prop> </props> </property> <property name="packagesToScan" value="accountant.entity.*" /> </bean> <!-- Dao类 --> <bean id="hibernateDao" class="org.springside.modules.orm.hibernate.HibernateDao"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> [/code] 相关的代码就是以上三处,不知道哪里有遗漏或是错误,请指点一二,非常感谢! [b]问题补充:[/b] [code="java"][/code] 先谢谢二位,我的spring和hibernate的jar版本如下: [img]/upload/attachment/124016/5a67b24b-27e0-348a-ab6f-5d7003972509.gif[/img] [img]/upload/attachment/124018/751e247e-4c6c-341f-9859-4a52863af90d.gif[/img] 这个小例子是在springside的mini-web范例上直接改的,应该环境方面不会有大问题吧 to layer555: springside的mini-web的applicationContext.xml是这样的: [code="java"] <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd" default-lazy-init="true"> <description>Spring公共配置文件 </description> <!-- 定义受环境影响易变的变量 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> <property name="ignoreResourceNotFound" value="true" /> <property name="locations"> <list> <!-- 标准配置 --> <value>classpath*:/application.properties</value> <!-- 本地开发环境配置 --> <value>classpath*:/application.local.properties</value> <!-- 服务器生产环境配置 --> <!-- <value>file:/var/myapp/application.server.properties</value> --> </list> </property> </bean> <!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 --> <context:component-scan base-package="org.springside.examples.miniweb" /> <!-- 数据源配置,使用应用内的DBCP数据库连接池 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- Connection Pooling DBCP --> <property name="initialSize" value="5" /> <property name="maxActive" value="100" /> <property name="maxIdle" value="30" /> <property name="maxWait" value="1000" /> <property name="poolPreparedStatements" value="true" /> <property name="defaultAutoCommit" value="false" /> </bean> <!-- 数据源配置,使用应用服务器的数据库连接池 --> <!--<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/ExampleDB" />--> <!-- Hibernate配置 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="namingStrategy"> <bean class="org.hibernate.cfg.ImprovedNamingStrategy" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider </prop> <prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.ehcache_config_file}</prop> </props> </property> <property name="packagesToScan" value="org.springside.examples.miniweb.entity.*" /> </bean> <!-- 事务管理器配置,单数据源事务 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 事务管理器配置,多数据源JTA事务--> <!-- <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager or WebLogicJtaTransactionManager" /> --> <!-- 使用annotation定义事务 --> <tx:annotation-driven transaction-manager="transactionManager" /> </beans> [/code] 这里面也没有configurationClass,也能正常,不知道在什么地方设置或默认了 to xuzhfa123: 改了你说的两处,确实可以跑通了,非常感谢。但搞不明白的是,在上面贴的mini-web的配置文件中是这么写的: [code="java"]<property name="packagesToScan" value="org.springside.examples.miniweb.entity.*" /> [/code] 这个例子是可以正常运行的,为什么我就必须改成 [code="java"] <property name="packagesToScan" value="accountant.entity" /> [/code] 才可以呢?
jbpm4和tomcat6整合出问题了
我开始用tomcat+spring的一个项目中加入jbpm4.jbpm4和spring终于整合成功了,因为我测试了一次,运行一个简单流程没问题。然后我启动tomcat服务器,就出现以下错误提示: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jbpmConfiguration' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.jbpm.pvm.internal.cfg.SpringConfiguration]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: org.apache.log4j.Logger.trace(Ljava/lang/Object;)V 说找不到org.apache.log4j.Logger.trace(Ljava/lang/Object;)方法,我明明引入了那个包,而且也有那个方法。对了,关于tomcat和jbpm4冲突的那几个包(juel)我都调换了,tomcat我也重新卸载重装了,问题依旧。期待那位仁兄能帮我解释一下。 附上配置文件:application.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"> </property> <property name="url" value="jdbc:mysql://localhost:3306/jbpm4"> </property> <property name="username" value="root"></property> <property name="password" value="19876"></property> <property name="maxActive" value="100"></property> <property name="maxIdle" value="30"></property> <property name="maxWait" value="50"></property> <property name="defaultAutoCommit" value="true"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLInnoDBDialect </prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> <property name="mappingResources"> <list> <value>jbpm.repository.hbm.xml</value> <value>jbpm.execution.hbm.xml</value> <value>jbpm.history.hbm.xml</value> <value>jbpm.task.hbm.xml</value> <value>jbpm.identity.hbm.xml</value> <value>bean/User.hbm.xml</value> </list> </property> </bean> <bean id="jbpmConfiguration" class="org.jbpm.pvm.internal.cfg.SpringConfiguration"> <constructor-arg value="jbpm.cfg.xml"></constructor-arg> </bean> <bean id="processEngine" factory-bean="jbpmConfiguration" factory-method="buildProcessEngine"></bean> 和jbpm.cfg.xml: <?xml version="1.0" encoding="UTF-8"?> <jbpm-configuration> <import resource="jbpm.default.cfg.xml" /> <import resource="jbpm.jpdl.cfg.xml" /> <import resource="jbpm.identity.cfg.xml" /> <import resource="jbpm.mail.templates.examples.xml" /> <process-engine-context> <command-service> <retry-interceptor /> <environment-interceptor /> <spring-transaction-interceptor /> </command-service> </process-engine-context> <transaction-context> <transaction /> <hibernate-session /> </transaction-context> </jbpm-configuration> [b]问题补充:[/b] 问题自己解决了,是log4j包我不小心导了两个。
struts2+spring整合后Action实现SessionAware后获取不到Session
<p>以下是Action实现的方法,下面只是贴出了Action的实现,代码测试过没问题,但只要运行到设置Session的地方就通不过,但也不报错,通过检测发现设置session时通过IOC方式注入的map形式的session未获取到,也就是getSession得到的是null,所以程序执行不了,看看哪位能看出下面程序问题的指点一下,我找了两天了,对照struts2中的示例也没发现哪里有问题,在此先谢谢了!</p> <p>public class ManagerAction extends ActionSupport implements SessionAware{ <br>IGxManagerService gxManagerService=null; <br><br> private String username = null; <br><br>private String password = null; <br><br>private Map session; <br><br>public void setSession(Map value) {//实现SessionAware中的setSession方法,通过IOC方式注入Session <br>session = value; <br>} <br><br><span style="color: #0000ff;">public Map getSession() { //获取map形式的session集合<br>return session; <br>}</span> <br><br>         public String getUsername() { <br>return username; <br>} <br><br>public void setUsername(String username) { <br>this.username = username; <br>} <br><br>public String getPassword() { <br>return password; <br>} <br><br>public void setPassword(String password) { <br>this.password = password; <br>} <br>public GxManager getManagerSessionInfo() { <br>return (GxManager) getSession().get(WebConstants.WEB_MANAGER_KEY); <br>} <br><br>/** <br>* &lt;p&gt; <br>* Store new reference to GxManager Object. <br>* &lt;/p&gt; <br>* <br>* @param GxManager <br>*            GxManager object for authenticated GxManager <br>*/ <br>public void setManagerSessionInfo(GxManager gxManger) { <br>getSession().put(WebConstants.WEB_MANAGER_KEY, gxManger); <br>} <br>public IGxManagerService getGxManagerService() { <br>return gxManagerService; <br>} <br><br>public void setGxManagerService(IGxManagerService gxManagerService) { <br>this.gxManagerService = gxManagerService; <br>} <br><br>public String login() { <br>GxManager gxManager = null; <br>try { <br>gxManager = gxManagerService.checkLogin(getUsername(),getPassword()); <br>} catch (Exception e) { <br>// TODO Auto-generated catch block <br>e.printStackTrace(); <br>} <br>if (gxManager != null) { <br><span style="color: #ff0000;">setManagerSessionInfo(gxManager);</span><span style="color: #ff0000;"> //此处出现问题,检测的结果是调用上面蓝色的getSession时获取到的值为NULL</span><br>} <br>if (hasErrors()) { <br>                      return INPUT; <br>                   } <br>return SUCCESS; <br>} <br><br>}</p> <p> </p><br /><strong>问题补充:</strong><br />配置文件都应该是没问题的,因为只要我把setManagerSessionInfo(gxManager)这一句注释掉程序就可以正常执行的<br /><strong>问题补充:</strong><br />下面这个是spring的配置文件 <br />&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"&gt; <br /> &lt;property name="driverClassName" value="com.mysql.jdbc.Driver"&gt; <br /> &lt;/property&gt; <br /> &lt;property name="url" value="jdbc:mysql://localhost:3306/test"&gt;&lt;/property&gt; <br /> &lt;property name="username" value="root"&gt;&lt;/property&gt; <br /> &lt;property name="password" value="root"&gt;&lt;/property&gt; <br /> &lt;/bean&gt; <br /> <br /> &lt;bean id="sessionFactory" <br /> class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt; <br /> &lt;property name="dataSource"&gt; <br /> &lt;ref bean="dataSource" /&gt; <br /> &lt;/property&gt; <br /> &lt;property name="hibernateProperties"&gt; <br /> &lt;props&gt; <br /> &lt;prop key="hibernate.dialect"&gt; <br /> org.hibernate.dialect.MySQLDialect <br /> &lt;/prop&gt; <br /> &lt;prop key="hibernate.show_sql"&gt;false&lt;/prop&gt; <br /> &lt;/props&gt; <br /> &lt;/property&gt; <br /> &lt;property name="mappingResources"&gt; <br /> &lt;list&gt; <br /> &lt;value&gt;com/gx/entity/member/GxUserinfo.hbm.xml&lt;/value&gt; <br /> &lt;value&gt;com/gx/entity/GxManager.hbm.xml&lt;/value&gt;&lt;/list&gt; <br /> &lt;/property&gt; <br /> &lt;/bean&gt; <br /> &lt;bean id="myTransactionManager" <br /> class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt; <br /> &lt;property name="sessionFactory"&gt; <br /> &lt;ref local="sessionFactory" /&gt; <br /> &lt;/property&gt; <br /> &lt;/bean&gt; <br /> <br /> &lt;bean id="transationInterceptor" <br /> class="org.springframework.transaction.interceptor.TransactionInterceptor"&gt; <br /> &lt;property name="transactionManager" ref="myTransactionManager" /&gt; <br /> &lt;property name="transactionAttributes"&gt; <br /> &lt;props&gt; <br /> &lt;prop key="save*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br /> &lt;prop key="update*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br /> &lt;prop key="delete*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br /> &lt;prop key="Save*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br /> &lt;prop key="merge*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br /> &lt;prop key="shield*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br /> &lt;/props&gt; <br /> &lt;/property&gt; <br /> <br /> &lt;/bean&gt; <br /> <br /> &lt;bean <br /> class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"&gt; <br /> &lt;property name="beanNames"&gt; <br /> &lt;value&gt;*DAO,*Service,*Services&lt;/value&gt; <br /> &lt;/property&gt; <br /> &lt;property name="interceptorNames"&gt; <br /> &lt;list&gt; <br /> &lt;value&gt;transationInterceptor&lt;/value&gt; <br /> &lt;/list&gt; <br /> &lt;/property&gt; <br /> &lt;/bean&gt; <br />&nbsp;&nbsp;&nbsp; <br /> &lt;bean id="GxManagerDAO" class="com.gx.dao.imp.GxManagerDAO"&gt; <br /> &lt;property name="sessionFactory"&gt; <br /> &lt;ref bean="sessionFactory" /&gt; <br /> &lt;/property&gt; <br /> &lt;/bean&gt; <br /> &lt;bean id="GxManagerService" class="com.gx.service.imp.GxManagerService"&gt; <br /> &nbsp;&nbsp;&nbsp; &lt;property name="gxManagerDAO"&gt; <br /> &lt;ref bean="GxManagerDAO" /&gt; <br /> &lt;/property&gt; <br /> &lt;/bean&gt; <br /> &lt;bean id="ManagerAction" class="com.gx.web.action.ManagerAction"&gt; <br /> &nbsp;&nbsp;&nbsp; &lt;property name="gxManagerService"&gt; <br /> &lt;ref bean="GxManagerService" /&gt; <br /> &lt;/property&gt; <br /> &lt;/bean&gt; <br /> &lt;/beans&gt;<br /><strong>问题补充:</strong><br />public class ManagerAction extends ActionSupport implements SessionAware <br />方法中已经实现了SessionAware接口,session应该是由struts2中的IOC方式自动注入的,应该不需要通过spring进行注入才是的!<br /><strong>问题补充:</strong><br />那应该怎么注入呢,因为如果只单独使用struts2上面的方式是可以获取到session的,因为上面是struts2中所说的通过实现sessionAware以IOC的方式获取struts2中封闭的map形式的底层session集合,上面之所以得不到,应该是由于struts2整合了spring的原因,但具体在spring中如何注入就不知道怎么做了!
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载 点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Elastic:菜鸟上手指南
您们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。 我们可以按照如下的步骤来学习: 1)Elasticsearch简介:对Elasticsearch做了一个简单的介绍 2)Elasticsearch中的一些重要概念:cluster, n...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
一文带你看清 HTTP 所有概念
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层) HTTP 标头 先来回顾一下 HTTP1.1 标头都有哪几种 HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍 通用...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
【综合篇】浏览器的工作原理:浏览器幕后揭秘
web(给达达前端加星标,提升前端技能)了解浏览器是如何工作的,能够让你站在更高的角度去理解前端浏览器的发展历程的三大路线,第一是应用程序web化,第二是web应用移动化,第三是web操...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
死磕Lambda表达式(二):Lambda的使用
在哪使用Lambda表达式?怎么样正确的使用Lambda表达式?
史上最牛逼的 Eclipse 快捷键,提高开发效率!
如果你在使用IDEA,请参考博主另外的一篇idea快捷键的博客。
在三线城市工作爽吗?
我是一名程序员,从正值青春年华的 24 岁回到三线城市洛阳工作,至今已经 6 年有余。一不小心又暴露了自己的实际年龄,但老读者都知道,我驻颜有术,上次去看房子,业务员肯定地说:“小哥肯定比我小,我今年还不到 24。”我只好强颜欢笑:“你说得对。” 从我拥有记忆到现在进入而立之年,我觉得,我做过最明智的选择有下面三个: 1)高中三年,和一位女同学保持着算不上朋友的冷淡关系;大学半年,把这位女同学追到...
CSS操作之你不得不知的一些小技巧(一)ヾ(Ő∀Ő๑)ノ太棒了!!
目录 CSS单行/多行文本,超出隐藏并显示省略号 1. CSS单行/多行文本,超出隐藏并显示省略号 方法一:使用CSS属性 单行文本溢出显示省略号 width: 100px; overflow: hidden; text-overflow:ellipsis; //文本溢出显示省略号 white-space: nowrap; //文本不会换...
强烈推荐 10 款珍藏的 Chrome 浏览器插件
Firebug 的年代,我是火狐(Mozilla Firefox)浏览器的死忠;但后来不知道为什么,该插件停止了开发,导致我不得不寻求一个新的网页开发工具。那段时间,不少人开始推荐 Chrome 浏览器,我想那就试试吧,期初我觉得用起来很别扭,毕竟我不是一个“喜新厌旧”的人。但用的次数越来越多,也就习惯了。 Chrome 浏览器有一个好处,就是插件极其丰富,只有你想不到的,没有你找不到的,这恐怕是...
我以为我对数据库索引十分了解,直到我遇到了阿里面试官。
索引的数据结构分析,数据库面试到索引最常见的问题分析,我总结了一下。
Java程序员都需要懂的「反射」
前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 今天来简单写一下Java的反射。本来没打算写反射这个知识点的,只是不少的读者都问过我:“你的知识点好像缺了反射阿。能不能补一下?” 这周末也有点空了,所以来写写我对反射的简单理解。这篇是入门文章,没有高深的知识点,希望能对新人有帮助。如果...
史上最牛逼的 VSCode 插件,提高开发效率!
这篇文章收集了一些常用的vscode插件,提高开发效率。
Java第二周学习
Java第二周学习 1. 数组 1.1 定义数组格式 数据类型[] 数组名 = new 数据类型[容量]; int[] arr = new int[10]; 赋值左侧 数据类型: 告知编译器,当前数组中能够保存的数据类型到底是什么?并且在确定数据类型之后,整个数组中保存的数据类型无法修改!!! []: 告知编译器这里定义的是一个数组类型数据。 明确告知编译器,数组名是一个【引用数据类型...
相关热词 c#判断数字不得为负数 c#帧和帧协议 c#算偏移值 c# 在枚举中 c#6 字符串 插值 c#程序中的占位符标签 c#监听数组变化 c# vlc c#索引实现 c# 局域网广播通信
立即提问