Spring 的持久化实例(JDBC, JdbcTemplate、HibernateDaoSupport、JdbcDaoSupport、SqlSessionDaoSupport等)...

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、表(这里用mysql,数据库名为yiibai)

CREATE TABLE `customer` (`CUST_ID` int(10) UNSIGNED NOT NULL,`NAME` varchar(100) NOT NULL,`AGE` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `customer`ADD PRIMARY KEY (`CUST_ID`);

二、不用JdbcTemplate的情况

表的实体类Customer

package com.yiibai.springjdbc.bean;public class Customer {int custId;String name;int age;public Customer(int custId, String name, int age) {super();this.custId = custId;this.name = name;this.age = age;}public int getCustId() {return custId;}public void setCustId(int custId) {this.custId = custId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Customer [custId=" + custId + ", name=" + name + ", age=" + age + "]";}
}

DAO接口

package com.yiibai.springjdbc.dao;import java.util.List;
import com.yiibai.springjdbc.bean.Customer;public interface CustomerDAO {public void insert(Customer customer);public Customer findByCustomerId(int custId);public List<Customer> queryCustomer() throws Exception ;
}

DAO实现(不用JdbcTemplate)

package com.yiibai.springjdbc.daoimpl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;import javax.sql.DataSource;import com.yiibai.springjdbc.bean.Customer;
import com.yiibai.springjdbc.dao.CustomerDAO;public class CustomerImplDAO implements CustomerDAO {private DataSource dataSource;@Overridepublic void insert(Customer customer) {// TODO 自动生成的方法存根String sql = "INSERT INTO customer " + "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";Connection conn = null;try {conn = dataSource.getConnection();PreparedStatement ps = conn.prepareStatement(sql);ps.setInt(1, customer.getCustId());ps.setString(2, customer.getName());ps.setInt(3, customer.getAge());ps.executeUpdate();ps.close();} catch (SQLException e) {throw new RuntimeException(e);} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {}}}}@Overridepublic Customer findByCustomerId(int custId) {// TODO 自动生成的方法存根String sql = "SELECT * FROM customer WHERE CUST_ID = ?";Connection conn = null;try {conn = dataSource.getConnection();PreparedStatement ps = conn.prepareStatement(sql);ps.setInt(1, custId);Customer customer = null;ResultSet rs = ps.executeQuery();if (rs.next()) {customer = new Customer(rs.getInt("CUST_ID"), rs.getString("NAME"), rs.getInt("Age"));}rs.close();ps.close();return customer;} catch (SQLException e) {throw new RuntimeException(e);} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {}}}}public void setDataSource(DataSource dataSource) {this.dataSource = dataSource;}@Overridepublic List<Customer> queryCustomer() throws Exception {// TODO 自动生成的方法存根Connection conn = dataSource.getConnection();String sql = "Select c.CUST_ID, c.NAME, c.AGE from customer c";System.out.println(sql);Statement smt = conn.createStatement();ResultSet rs = smt.executeQuery(sql);List<Customer> list = new ArrayList<Customer>();while (rs.next()) {int cID = rs.getInt("CUST_ID");String cName = rs.getString("NAME");int cAge = rs.getInt("AGE");Customer cust = new Customer(cID, cName, cAge);list.add(cust);}return list;}}

配置文件spring-dao.xml  spring-datasource.xml  spring-module.xml都放置在(特别重要)包com.yiibai.springjdbc下面:

spring-datasource.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/yiibai?useSSL=false" /><property name="username" value="your-user" /><property name="password" value="your-passwd" /></bean></beans>

也可以使用DBCP连接池来配置数据源(需要导入commons-dbcp-1.4.jar包)

   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">        <property name="driverClassName" value="com.mysql.jdbc.Driver" />       <property name="url" value="jdbc:mysql://localhost:3306/yiibai?useSSL=false" />       <property name="username" value="your-name" />       <property name="password" value="your-passwd" />       </bean>

这里需要修改用户密码来适应你的数据库环境

spring-dao.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="customerDAO" class="com.yiibai.springjdbc.daoimpl.CustomerImplDAO"><property name="dataSource" ref="dataSource" /></bean></beans>

spring-module.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- Using Mysql datasource --><import resource="spring-datasource.xml" /><import resource="spring-dao.xml" /></beans>

测试(主)类

package com.yiibai.springjdbc;import java.util.List;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.yiibai.springjdbc.bean.Customer;
import com.yiibai.springjdbc.dao.CustomerDAO;public class CustTest {private static ApplicationContext ctx;public static void main(String[] args) throws Exception {ctx = new ClassPathXmlApplicationContext("com/yiibai/springjdbc/spring-module.xml");CustomerDAO customerDAO = (CustomerDAO) ctx.getBean("customerDAO");Customer customer = new Customer(1, "yiibai",29);customerDAO.insert(customer);Customer customer1 = customerDAO.findByCustomerId(1);System.out.println(customer1);List<Customer> custList = customerDAO.queryCustomer();for(Customer cs : custList){System.out.println("Customer ID " + cs.getCustId());System.out.println("Customer Name " + cs.getName());System.out.println("Customer Age" + cs.getAge());System.out.println("----------------------------");}}}

运行结果:表customer加了一条记录,并输出如下信息:

(执行前把表customer中id为1的记录删除,不然插入异常)

三、使用 JdbcTemplate、JdbcDaoSupport实现

Customer和DAO接口不变,主要变化是DAO实现:CustomerImplDAO类改为JdbcCustomerDAO

package com.yiibai.springjdbc.daoimpl;import java.util.List;import org.springframework.jdbc.core.support.JdbcDaoSupport;import com.yiibai.springjdbc.bean.Customer;
import com.yiibai.springjdbc.bean.CustomerRowMapper;
import com.yiibai.springjdbc.dao.CustomerDAO;public class JdbcCustomerDAO extends JdbcDaoSupport implements CustomerDAO {@Overridepublic void insert(Customer customer) {// TODO 自动生成的方法存根String sql = "INSERT INTO customer " +"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";getJdbcTemplate().update(sql, new Object[] { customer.getCustId(),customer.getName(),customer.getAge()  });}@Overridepublic Customer findByCustomerId(int custId) {// TODO 自动生成的方法存根/** 	这种写法也可以	String sql = "SELECT * FROM customer WHERE CUST_ID =  '"+custId+"' ";return getJdbcTemplate().queryForObject(sql,new CustomerRowMapper());*/String sql = "SELECT * FROM customer WHERE CUST_ID = ?";return getJdbcTemplate().queryForObject(sql,new Object[] { custId },new CustomerRowMapper());}@Overridepublic List<Customer> queryCustomer() throws Exception {// TODO 自动生成的方法存根String sql = "SELECT * FROM customer";return getJdbcTemplate().query(sql, new CustomerRowMapper());}}

需要说明2点:

1、本实现继承JdbcDaoSupport,而 JdbcDaoSupport定义了 JdbcTemplate和DataSource 属性,只需在配置文件中注入DataSource 即可,然后会创建jdbcTemplate的实例,不必像前面的实现CustomerImplDAO那样,需要显式定义一个DataSource成员变量。

2、这里出现了CustomerRowMapper类:本来应该这样写的queryForObject(sql,Customer.class);但Spring并不知道如何将结果转成Customer.class。所以需要写一个CustomerRowMapper 继承RowMapper接口 ,其代码如下:

package com.yiibai.springjdbc.bean;import java.sql.ResultSet;
import java.sql.SQLException;import org.springframework.jdbc.core.RowMapper;public class CustomerRowMapper implements RowMapper<Customer> {@Overridepublic Customer mapRow(ResultSet rs, int rowNum) throws SQLException {// TODO 自动生成的方法存根return new Customer(rs.getInt("CUST_ID"),rs.getString("NAME"),rs.getInt("AGE"));}}

文件spring-dao.xml里bean的定义修改为(变化的是class):

    <bean id="customerDAO" class="com.yiibai.springjdbc.daoimpl.JdbcCustomerDAO"><property name="dataSource" ref="dataSource" /></bean>

其他配置文件和主类都不变、运行结果少了Select c.CUST_ID, c.NAME, c.AGE from customer c
,这是因为CustomerImplDAO版本人为地插入一句 System.out.println(sql);以示和JDBC模板实现版本JdbcCustomerDAO的区别。
可以看出采用JDBC模板大大简化代码。

四、  HibernateTemplate、HibernateDaoSupport实现版本

CustomerImplDAO类改为HibCustomerDao

package com.yiibai.springjdbc.daoimpl;import java.util.List;import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
import com.yiibai.springjdbc.bean.Customer;
import com.yiibai.springjdbc.dao.CustomerDAO;public class HibCustomerDao extends HibernateDaoSupport implements CustomerDAO {@Overridepublic void insert(Customer customer) {// TODO 自动生成的方法存根this.getHibernateTemplate().save(customer);}@Overridepublic Customer findByCustomerId(int custId) {// TODO 自动生成的方法存根//或find("from Customer where CUST_ID = ?",custId).get(0);return (Customer) getHibernateTemplate().get(Customer.class, custId);}@Overridepublic List<Customer> queryCustomer() throws Exception {// TODO 自动生成的方法存根return (List<Customer>) getHibernateTemplate().find("from com.yiibai.springjdbc.bean.Customer"); 	}}

配置文件修改就比较复杂了:要配置SessionFactory、transactionManager、transactionInterceptor等。

,另外要在包com.yiibai.springjdbc.bean增加表对象Customer的Hibernate映射文件Customer.hbm.xml以供配置hibernate SessionFactory使用:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.yiibai.springjdbc.bean"><class name="Customer" table="customer"><id name="custId" type="java.lang.Integer"><column name="CUST_ID" /><generator class="native"/></id><property name="name" unique="true" type="java.lang.String"><column name="NAME" />	</property><property name="age" unique="true" type="java.lang.Integer"><column name="AGE" />	</property>	</class>
</hibernate-mapping>

修改后的spring-dao.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"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/jeehttp://www.springframework.org/schema/jee/spring-jee.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util.xsdhttp://www.springframework.org/schema/toolhttp://www.springframework.org/schema/tool/spring-tool.xsd"><!-- 把数据源注入给Session工厂 --><bean id="custsessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource1" /><property name="mappingResources"><list><value>com/yiibai/springjdbc/bean/Customer.hbm.xml</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">${hibernate.dialect}</prop><prop key="hibernate.hbm2ddl.auto">update</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.generate_statistics">true</prop><prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop></props></property></bean><!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="custsessionFactory" /></bean><!--define bean of transaction interceptor --><bean id="transactionInterceptor"class="org.springframework.transaction.interceptor.TransactionInterceptor"><property name="transactionManager" ref="transactionManager" /><property name="transactionAttributes"><props><prop key="delete*">PROPAGATION_REQUIRED</prop><prop key="update*">PROPAGATION_REQUIRED</prop><prop key="save*">PROPAGATION_REQUIRED,-Exception</prop><prop key="find*">PROPAGATION_REQUIRED,readOnly</prop><prop key="*">PROPAGATION_REQUIRED</prop></props></property></bean><beanclass="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><property name="beanNames"><list><value>*Dao</value></list></property><property name="interceptorNames"><list><value>transactionInterceptor</value></list></property></bean><bean id="customerDAO" class="com.yiibai.springjdbc.daoimpl.HibCustomerDao">  <property name="sessionFactory" ref="custsessionFactory" /></bean>  </beans>

如果仅配置SessionFactory、而不配置transactionManager、transactionInterceptor,查询没问题,而插入不行,会出现下面的异常:

Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

有没有办修改SessionFactory的设置解决这个问题,求高人指点。

hibernate配置也可以用注解方式(无需Customer.hbm.xml):

修改Customer类如下( custId必须要改CUST_ID,和表格字段名完全一致):

package com.yiibai.springjdbc.bean;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;@Entity
@Table(name = "customer")
public class Customer {@Idint CUST_ID;String name;int age;public Customer() {super();// TODO 自动生成的构造函数存根}public Customer(int custId, String name, int age) {super();this.CUST_ID = custId;this.name = name;this.age = age;}public int getCustId() {return CUST_ID;}public void setCustId(int custId) {this.CUST_ID = custId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Customer [custId=" + CUST_ID + ", name=" + name + ", age=" + age + "]";}
}

spring-dao.xml文件的custsessionFactory配置中

		<property name="mappingResources"><list><value>com/yiibai/springjdbc/bean/Customer.hbm.xml</value></list></property>

改为:

 	<property name="annotatedClasses"><list><value>com.yiibai.springjdbc.bean.Customer</value></list></property>

另外经实践.hbm.xml版本(注射方式则不会,我也没搞明白其中的道理)的CUST_ID不是根据insert(customer)传递过来参数的值,而是会根据数据库表customer当前的ID“指针”;比如传递过来的参数是Customer(1, "yiibai",29),插入后有可能变(3, "yiibai",29)。

可用下面命令来复位ID“指针”


mysql> use yiibai;
mysql> ALTER TABLE customer AUTO_INCREMENT=0;

这样新插入的CUST_ID值就是:最后一条记录CUST_ID+1。

五、mybatis、SqlSessionDaoSupport版本

        为了简单起见,使用注解方式使用mybatis(和XML配置可以混用的,详见该文),重写了dao接口放在com.yiibai.springjdbc.mybatisdao包下,为保证主类代码不变原来的接口CustomerDAO继续使用。

package com.yiibai.springjdbc.mybatisdao;import java.util.List;import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;import com.yiibai.springjdbc.bean.Customer;public interface ICustomer {@Insert("insert into customer(CUST_ID,name,age) values(#{CUST_ID},#{name}, #{age})")public void insert(Customer customer);@Select("select * from customer where CUST_ID= #{CUST_ID}")public Customer findByCustomerId(int custId);@Select("select * from customer")public List<Customer> queryCustomer();@Delete("delete from customer where CUST_ID=#{CUST_ID}")public int deleteCustomerById(int id);
}

所有的sql操作由该接口完成,后面的DAO实现类MybatisCustImpDao,实际上仅仅调用该接口的方法:

package com.yiibai.springjdbc.daoimpl;import java.util.List;import org.mybatis.spring.support.SqlSessionDaoSupport;import com.yiibai.springjdbc.bean.Customer;
import com.yiibai.springjdbc.dao.CustomerDAO;
import com.yiibai.springjdbc.mybatisdao.ICustomer;public class MybatisCustImpDao extends SqlSessionDaoSupport implements CustomerDAO {@Overridepublic void insert(Customer customer) {// TODO 自动生成的方法存根this.getSqlSession().getMapper(ICustomer.class).insert(customer);;}@Overridepublic Customer findByCustomerId(int custId) {// TODO 自动生成的方法存根return this.getSqlSession().getMapper(ICustomer.class).findByCustomerId(custId);}@Overridepublic List<Customer> queryCustomer() throws Exception {// TODO 自动生成的方法存根return this.getSqlSession().getMapper(ICustomer.class).queryCustomer();}}

mybatis的配置文件mybatiscust.xml放在com.yiibai.springjdbc下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><typeAliases><typeAlias alias="Customer" type="com.yiibai.springjdbc.bean.Customer" /></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://127.0.0.1:3306/yiibai?useSSL=false" /><property name="username" value="your-user" /><property name="password" value="your-passwd" /></dataSource></environment></environments><mappers><!-- XML的方式 注册映射配置文件--><!-- <mapper resource="com/yiibai/springjdbc/bean/CustMybatis.xml" /> --><!--接口的方式  注册接口--><mapper class="com.yiibai.springjdbc.mybatisdao.ICustomer"/></mappers></configuration>

bean必须注入sqlSessionFactory或sqlSessionTemplate。还是在中spring-dao.xml配置:

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation"value="classpath:com/yiibai/springjdbc/mybatiscust.xml" /></bean><bean id="CustomerDao" class="com.yiibai.springjdbc.daoimpl.MybatisCustImpDao"><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean>

 或

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation"value="classpath:com/yiibai/springjdbc/mybatiscust.xml" /></bean><bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg ref="sqlSessionFactory" /></bean><bean id="CustomerDao" class="com.yiibai.springjdbc.daoimpl.MybatisCustImpDao"><property name="sqlSessionTemplate" ref="sqlSession" /></bean>

主程序还是不变。

参考:

Spring Mybatis实例SqlSessionDaoSupport混用xml配置和注解

HibernateTemplate、HibernateDaoSupport两种方法实现增删

Spring JdbcTemplate+JdbcDaoSupport实例

Spring与Dao-Jdbc模板实现增删改查

使用Jdbc Template的基本操作步骤

Spring+mybatis的一个简单例子

spring与mybatis三种整合方法MyBatis中

如何通过继承SqlSessionDaoSupport来编写DAO(一)

Spring进行面向切面编程的一个简单例子

项目的代码和依赖包都在这里,下后解压到eclipse的workspace导入选择import Porojects from File System or Archive。

 

 

转载于:https://my.oschina.net/u/2245781/blog/1552110

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

麦克劳林展开式_数学家麦克劳林与牛顿的故事

数学家麦克劳林麦克劳林(Colin Maclaurin1698年2月-1746年6月), 苏格兰数学家&#xff0c;麦克劳林是18世纪英国最具有影响的数学家之一。01麦克劳林是一位牧师的儿子&#xff0c;半岁丧父&#xff0c;9岁丧母。由其叔父抚养成人。叔父也是一位牧师。麦克劳林是一个“神童”&am…

微信小程序把玩(三十三)Record API

微信小程序把玩&#xff08;三十三&#xff09;Record API 原文:微信小程序把玩&#xff08;三十三&#xff09;Record API其实这个API也挺奇葩的&#xff0c;录音结束后success不走&#xff0c;complete不走&#xff0c;fail也不走&#xff0c; 不知道是不是因为电脑测试的原因…

如何获取元素在父级div里的位置_关于元素的浮动你了解多少

首先&#xff0c;在介绍什么是浮动之前我们先介绍一下html中元素的普通流布局方式。在普通流中&#xff0c;元素是按照它在 HTML 中的出现的先后顺序自上而下依次排列布局的&#xff0c;在排列过程中所有的行内元素水平排列&#xff0c;直到当行被占满然后换行&#xff0c;块级…

Java电商项目-5.内容管理cms系统

目录 实现加载内容分类树功能实现内容分类动态添加删除内容分类节点实现内容分类节点的分页显示实现广告内容的添加实现广告内容删除实现广告内容编辑到Github获取源码请点击此处实现加载内容分类树功能 注: 往后将不在说编写远程服务方法和编写web模块等重复语句, 直接用"…

【JS新手教程】LODOP打印复选框选中的任务或页数

之前的博文&#xff1a;【JS新手教程】LODOP打印复选框选中的内容关于任务&#xff1a;Lodop打印语句最基本结构介绍&#xff08;什么是一个任务&#xff09;关于本文用到的JS的eval方法&#xff1a;JS-JAVASCRIPT的eval()方法该文用的是不同checkbox&#xff0c;对应不同的val…

查询范围_企二哥:查询企业经营范围的三种方法

一、查询企业经营范围的三种方法1. 进经营地的工商局网站,有个“全国企业信用信息公示系统”进去后输入公司名称搜索就出来了。2. 有个软件叫做天眼查&#xff0c;打开天眼查输入要查询的公司名称&#xff0c;就可以搜出来了。不光是经营范围&#xff0c;还有许多和企业相关的资…

html显示hdf5文件,python读取hdf5文件

python怎样读取hdf5文件python 中h5py读文件,提示错误File "h5py\_objects完整代码和完整错误信息的图片。Windows环境下给Python安装h5py失败&#xff0c;HDF5已经安装使用pip install h5py命令安装已经安装了HDF5-1.10.0-win64.msi3第一张图上说的是,“不能打开头文件hd…

20145206邹京儒《网络对抗》逆向及Bof基础实践

20145206邹京儒《网络对抗》逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是&#xff1a;main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段&#xff0c…

Haproxy+Keepalived实现负载均衡

HaproxyKeepalived实现负载均衡HAProxy介绍反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入新的1.3引入了frontend,backend&#xff1b;f…

C#使用CLR/C++的DLL间接调用Native C++的DLL

C#使用CLR/C的DLL间接调用Native C的DLL 开发环境&#xff1a;win 7 VS2010 简介&#xff1a;C#的exe使用CLR/C间接调用Native C的DLL. 第一步&#xff1a;创建一个C#的Console Application工程-->命名“ConsoleApplication1”。 第二步&#xff1a;创建一个CLR/C的工程&am…

列表输出循环左移_python 列表推导式(经典代码)(21)

文章首发微信公众号&#xff0c;微信搜索&#xff1a;猿说python截止到目前为止&#xff0c;python基础内容已经学习了50%左右&#xff0c;在学习编程过程中&#xff0c;我们不仅要学习python语法&#xff0c;同时也需要学习如何把自己代码写的更美观&#xff0c;效率更高。一.…

Robot Framework自动化测试(一)--- 安装

所需环境&#xff1a; 1、python 2、robotframework  https://pypi.python.org/pypi/robotframework/2.8.5#downloads 3、wxPython ——>是python的一个GUI库&#xff0c;下面要安装的RIDE是基于这个库开发的&#xff0c;所以要安装 地址&#xff1a;https://wxpython.org…

linux_svn命令操作

转至元数据起始 linux下svn命令大全 1、将文件checkout到本地目录 svn checkout path&#xff08;path是服务器上的目录&#xff09;例如&#xff1a;svn checkout svn://192.168.1.1/pro/domain简写&#xff1a;svn co 2、往版本库中添加新的文件 svn add file例如&#xff1a…

html怎么让五张照片并排显示,最考验右脑5张照片,30s内能发现问题都是牛人,PS做不出来...

我们的大脑认定这种空间不可能存在&#xff0c;然而却要忍受眼睛亲眼所见其存在的苦恼。“眼见为实”已经成为错误的判断标准&#xff0c;于是你会感到很过瘾&#xff0c;颠覆的快感。事实上&#xff0c;通过色彩&#xff0c;不仅可以考量人们的视力&#xff0c;更能判断大脑水…

Cloud in Action: Install OpenStack Ocata from scratch

Cloud in Action: Install OpenStack Ocata from scratch薛国锋 xueguofeng2011gmail.comOpenStack can control and manage large pools of compute, storage, and networking resources throughout a datacenter, througha dashboard or via the OpenStack API, and work…

CentOS7配置ip

CentOS7配置ip 安装完centos7,重启就可以与linux第一次接触了。我是最小化安装&#xff0c;所以没有图形界面。登录介面显示发型版本和内核版本&#xff1a; CentOS Linux 7(Core) Kernel 3.10.0-862.e17.x86_64 on an x86_64 下面就是登录提示localhost login。在后面输入roo…

Spring Cloud Config服务端配置细节(一)

上篇文章我们看了Spring Cloud中分布式配置中心的一个基本使用&#xff0c;这里边还涉及到许多细节&#xff0c;本文我们就来看看服务端配置中的一些细节。 本文是Spring Cloud系列的第二十三篇文章&#xff0c;了解前二十二篇文章内容有助于更好的理解本文&#xff1a; 1.使用…

POJ 1797 Heavy Transportation

传送门&#xff1a;http://poj.org/problem?id1797 不想吐槽了&#xff0c;弄了好久才AC 实现代码&#xff1a; #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <cstdio> #include <iostream> u…

java8中方法区的内存大小如何设置_从Java8升级到Java11

奇技 指南为什么选择Java11?容器环境支持&#xff0c;GC等领域的增强&#xff0c;仅通过切换到 Java 11 就有 16&#xff05; 的改进。进行了瘦身&#xff0c;更轻量级&#xff0c;安装包体积小。JDK11 是一个长期支持版。1Java11相对于Java8的一些新特性1.变量类型推断Var关…

hive 初认识

结构Hive 是建立在hadoop上的数据仓库架构,它提供了一系列的工具,可以进行数据提取转换加载(这个过程叫做ETL),这是一种可以存储,查询和分析存储在hadoop中的大规模数据的机制.Hive定义了简单的类SQL查询语句 成为hql,他允许数据SQL的用户查询数据.同时 这个语言也允许数据mapr…