Hibernate多对多操作
---------------------siwuxie095
Hibernate 多对多操作
以用户和角色为例
(一)多对多映射配置
第一步:创建两个实体类,用户和角色
第二步:让两个实体类之间互相表示
(1)在用户实体类中表示多个角色

(2)在角色实体类中表示多个用户

第三步:配置映射关系
(1)配置基本的映射
(2)配置关联关系的映射(多对多关系)
1)在用户的映射配置文件中,表示所有角色

2)在角色的映射配置文件中,表示所有用户

第四步:在核心配置文件中引入映射配置文件

(二)多对多级联保存
如:添加两个用户,为每个用户添加两个角色
(1)复杂写法
先在角色的映射配置文件中的 set 标签添加 inverse 属性,并
将其值设置为 true,再进行具体实现

|
/** * 多对多级联保存的复杂写法 * * * 手动加上 @Test 以进行单元测试(将自动导入 JUnit 4 的 jar 包) * * 选中方法名,右键->Run As->JUint Test */ @Test public void testSave(){ SessionFactory sessionFactory=null; Session session=null; Transaction tx=null; try { //得到 SessionFactory 对象 sessionFactory=HibernateUtils.getSessionFactory(); //创建 Session 对象 session=sessionFactory.openSession(); //开启事务 tx=session.beginTransaction(); //添加两个用户,为每个用户添加两个角色 //(1) //创建用户和角色对象 User user1=new User(); user1.setUserName("小白"); user1.setUserPassword("8888"); User user2=new User(); user2.setUserName("小黑"); user2.setUserPassword("4444"); Role role1=new Role(); role1.setRoleName("保镖"); role1.setRoleMemo("强大的保镖"); Role role2=new Role(); role2.setRoleName("秘书"); role2.setRoleMemo("漂亮的秘书"); Role role3=new Role(); role3.setRoleName("司机"); role3.setRoleMemo("称职的司机"); //(2) //建立用户和角色对象的关系 // //在用户实体类中表示角色,在角色实体类中表示用户 // //具体: //把角色对象放到用户对象的 Set 集合中 //把用户对象放到角色对象的 Set 集合中 // //user1 --- role1 / role2 //user2 --- role1 / role3 // //注意:如果建立了双向的关系,一定要有一方放弃外 //键维护权。如下 user1.getRoleSet().add(role1); user1.getRoleSet().add(role2); user2.getRoleSet().add(role1); user2.getRoleSet().add(role3); role1.getUserSet().add(user1); role1.getUserSet().add(user2); role2.getUserSet().add(user1); role3.getUserSet().add(user2); //(3)保存到数据库(级联保存) session.save(user1); session.save(user2); session.save(role1); session.save(role2); session.save(role3); /* * 由于是多对多且进行了双向关联,所以一定要有一方 * 放弃外键维护权,否则将无法保存到数据库中 * * 一般由被动方放弃外键维护权,这里角色是被动方 * * 具体做法: * * 在角色的映射配置文件中的 set 标签中添加 inverse * 属性,并将其值设置为 true */ //提交事务 tx.commit(); } catch (Exception e) { //回滚事务 tx.rollback(); } finally { //关闭资源 session.close(); sessionFactory.close(); } } |
(2)简化写法
先在用户的映射配置文件中的 set 标签添加 cascade 属性,并
将其值设置为 save-update,再进行具体实现

|
/** * 多对多级联保存的简化写法 * * 在用户的映射配置文件中的 set 标签 * 添加 cascade 属性,并将其值设置为 * save-update */ @Test public void testSaveX(){ SessionFactory sessionFactory=null; Session session=null; Transaction tx=null; try { //得到 SessionFactory 对象 sessionFactory=HibernateUtils.getSessionFactory(); //创建 Session 对象 session=sessionFactory.openSession(); //开启事务 tx=session.beginTransaction(); //添加两个用户,为每个用户添加两个角色 //(1) //创建用户和角色对象 User user1=new User(); user1.setUserName("小白"); user1.setUserPassword("8888"); User user2=new User(); user2.setUserName("小黑"); user2.setUserPassword("4444"); Role role1=new Role(); role1.setRoleName("保镖"); role1.setRoleMemo("强大的保镖"); Role role2=new Role(); role2.setRoleName("秘书"); role2.setRoleMemo("漂亮的秘书"); Role role3=new Role(); role3.setRoleName("司机"); role3.setRoleMemo("称职的司机"); //(2) //建立用户和角色对象的关系 // //在用户实体类中表示角色 // //具体: //把角色对象放到用户对象的 Set 集合中 // //user1 --- role1 / role2 //user2 --- role1 / role3 user1.getRoleSet().add(role1); user1.getRoleSet().add(role2); user2.getRoleSet().add(role1); user2.getRoleSet().add(role3); //(3)保存到数据库(级联保存) session.save(user1); session.save(user2); //提交事务 tx.commit(); } catch (Exception e) { //回滚事务 tx.rollback(); } finally { //关闭资源 session.close(); sessionFactory.close(); } } |
(三)多对多级联删除(一般不使用,仅作了解)
如:删除某个用户
先在用户的映射配置文件中的 set 标签添加 cascade 属性,并
将其值设置为 delete,再进行具体实现

|
/** * 多对多级联删除 * * 简化写法:在用户的映射配置文件中的 set 标签 * 添加 cascade 属性,并将其值设置为 delete */ @Test public void testDelete(){ SessionFactory sessionFactory=null; Session session=null; Transaction tx=null; try { //得到 SessionFactory 对象 sessionFactory=HibernateUtils.getSessionFactory(); //创建 Session 对象 session=sessionFactory.openSession(); //开启事务 tx=session.beginTransaction(); //(1) //通过 id 查询用户对象 User user=session.get(User.class, 1); //(2) //调用 Session 的 delete() 方法实现级联删除 session.delete(user); //多对多级联删除,一般不使用,仅作了解即可 // //注意:此时角色的映射配置文件中的 set 标签 //不能将 inverse 属性设为 true,否则将无法 //删除 // //另外:set 标签也不能将 cascade 属性设为 //delete,否则 testSaveX() 方法保存的数据 //将全部删除 //提交事务 tx.commit(); } catch (Exception e) { //回滚事务 tx.rollback(); } finally { //关闭资源 session.close(); sessionFactory.close(); } } |
(四)维护第三张表
通过第三张表来维护多对多关系
如:让某个用户有某个角色
第一步:根据 id 查询用户和角色
第二步:把角色对象放到用户对象的 Set 集合中

再如:让某个用户没有某个角色
第一步:根据 id 查询用户和角色
第二步:从用户对象的 Set 集合中移除角色对象

|
/** * 维护第三张表 */ @Test public void testTable(){ SessionFactory sessionFactory=null; Session session=null; Transaction tx=null; try { //得到 SessionFactory 对象 sessionFactory=HibernateUtils.getSessionFactory(); //创建 Session 对象 session=sessionFactory.openSession(); //开启事务 tx=session.beginTransaction(); //让某个用户有某个角色 //(1)根据 id 查询用户对象和角色对象 User user=session.get(User.class, 1); Role role=session.get(Role.class, 3); //(2)把角色对象放到用户对象的 Set 集合中 user.getRoleSet().add(role); //让某个用户没有某个角色 //(1)根据 id 查询用户对象和角色对象 User userx=session.get(User.class, 1); Role rolex=session.get(Role.class, 1); //(2)从用户对象的 Set 集合中移除角色对象 userx.getRoleSet().remove(rolex); //提交事务 tx.commit(); } catch (Exception e) { //回滚事务 tx.rollback(); } finally { //关闭资源 session.close(); sessionFactory.close(); } } |
工程结构目录如下:

HibernateUtils.java:
|
package com.siwuxie095.utils; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtils { static Configuration cfg=null; static SessionFactory sessionFactory=null; //或:加上 private final 亦可,不过此时不能等于 null // private static final Configuration cfg; // private static final SessionFactory sessionFactory; //静态代码块 static { //加载核心配置文件 cfg=new Configuration(); cfg.configure(); sessionFactory=cfg.buildSessionFactory(); } //提供方法返回 sessionFactory public static SessionFactory getSessionFactory() { return sessionFactory; } //提供方法返回与本地线程绑定的 Session public static Session getCurrentSession() { return sessionFactory.getCurrentSession(); } } |
User.java:
|
package com.siwuxie095.entity; import java.util.HashSet; import java.util.Set; //用户实体类 public class User { private Integer uid; //用户 id private String userName; //用户名称 private String userPassword; //用户密码 //在用户实体类中表示多个角色,即一个用户可以有多个角色 // //Hibernate 中要求使用 Set 集合表示"多"的数据 private Set<Role> roleSet=new HashSet<Role>(); public Set<Role> getRoleSet() { return roleSet; } public void setRoleSet(Set<Role> roleSet) { this.roleSet = roleSet; } public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } } |
Role.java:
|
package com.siwuxie095.entity; import java.util.HashSet; import java.util.Set; //角色实体类 public class Role { private Integer rid; //角色 id private String roleName; //角色名称 private String roleMemo; //角色描述 //在角色实体类中表示多个用户,即一个角色可以有多个用户 // //Hibernate 中要求使用 Set 集合表示"多"的数据 private Set<User> userSet=new HashSet<User>(); public Set<User> getUserSet() { return userSet; } public void setUserSet(Set<User> userSet) { this.userSet = userSet; } public Integer getRid() { return rid; } public void setRid(Integer rid) { this.rid = rid; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public String getRoleMemo() { return roleMemo; } public void setRoleMemo(String roleMemo) { this.roleMemo = roleMemo; } } |
HibernateManyToMany.java:
|
package com.siwuxie095.hibernatetest; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.junit.Test; import com.siwuxie095.entity.Role; import com.siwuxie095.entity.User; import com.siwuxie095.utils.HibernateUtils; //多对多操作 public class HibernateManyToMany { /** * 多对多级联保存的复杂写法 * * * 手动加上 @Test 以进行单元测试(将自动导入 JUnit 4 的 jar 包) * * 选中方法名,右键->Run As->JUint Test */ @Test public void testSave(){ SessionFactory sessionFactory=null; Session session=null; Transaction tx=null; try { //得到 SessionFactory 对象 sessionFactory=HibernateUtils.getSessionFactory(); //创建 Session 对象 session=sessionFactory.openSession(); //开启事务 tx=session.beginTransaction(); //添加两个用户,为每个用户添加两个角色 //(1) //创建用户和角色对象 User user1=new User(); user1.setUserName("小白"); user1.setUserPassword("8888"); User user2=new User(); user2.setUserName("小黑"); user2.setUserPassword("4444"); Role role1=new Role(); role1.setRoleName("保镖"); role1.setRoleMemo("强大的保镖"); Role role2=new Role(); role2.setRoleName("秘书"); role2.setRoleMemo("漂亮的秘书"); Role role3=new Role(); role3.setRoleName("司机"); role3.setRoleMemo("称职的司机"); //(2) //建立用户和角色对象的关系 // //在用户实体类中表示角色,在角色实体类中表示用户 // //具体: //把角色对象放到用户对象的 Set 集合中 //把用户对象放到角色对象的 Set 集合中 // //user1 --- role1 / role2 //user2 --- role1 / role3 // //注意:如果建立了双向的关系,一定要有一方放弃外 //键维护权。如下 user1.getRoleSet().add(role1); user1.getRoleSet().add(role2); user2.getRoleSet().add(role1); user2.getRoleSet().add(role3); role1.getUserSet().add(user1); role1.getUserSet().add(user2); role2.getUserSet().add(user1); role3.getUserSet().add(user2); //(3)保存到数据库(级联保存) session.save(user1); session.save(user2); session.save(role1); session.save(role2); session.save(role3); /* * 由于是多对多且进行了双向关联,所以一定要有一方 * 放弃外键维护权,否则将无法保存到数据库中 * * 一般由被动方放弃外键维护权,这里角色是被动方 * * 具体做法: * * 在角色的映射配置文件中的 set 标签中添加 inverse * 属性,并将其值设置为 true */ //提交事务 tx.commit(); } catch (Exception e) { //回滚事务 tx.rollback(); } finally { //关闭资源 session.close(); sessionFactory.close(); } } /** * 多对多级联保存的简化写法 * * 在用户的映射配置文件中的 set 标签 * 添加 cascade 属性,并将其值设置为 * save-update */ @Test public void testSaveX(){ SessionFactory sessionFactory=null; Session session=null; Transaction tx=null; try { //得到 SessionFactory 对象 sessionFactory=HibernateUtils.getSessionFactory(); //创建 Session 对象 session=sessionFactory.openSession(); //开启事务 tx=session.beginTransaction(); //添加两个用户,为每个用户添加两个角色 //(1) //创建用户和角色对象 User user1=new User(); user1.setUserName("小白"); user1.setUserPassword("8888"); User user2=new User(); user2.setUserName("小黑"); user2.setUserPassword("4444"); Role role1=new Role(); role1.setRoleName("保镖"); role1.setRoleMemo("强大的保镖"); Role role2=new Role(); role2.setRoleName("秘书"); role2.setRoleMemo("漂亮的秘书"); Role role3=new Role(); role3.setRoleName("司机"); role3.setRoleMemo("称职的司机"); //(2) //建立用户和角色对象的关系 // //在用户实体类中表示角色 // //具体: //把角色对象放到用户对象的 Set 集合中 // //user1 --- role1 / role2 //user2 --- role1 / role3 user1.getRoleSet().add(role1); user1.getRoleSet().add(role2); user2.getRoleSet().add(role1); user2.getRoleSet().add(role3); //(3)保存到数据库(级联保存) session.save(user1); session.save(user2); //提交事务 tx.commit(); } catch (Exception e) { //回滚事务 tx.rollback(); } finally { //关闭资源 session.close(); sessionFactory.close(); } } /** * 多对多级联删除 * * 简化写法:在用户的映射配置文件中的 set 标签 * 添加 cascade 属性,并将其值设置为 delete */ @Test public void testDelete(){ SessionFactory sessionFactory=null; Session session=null; Transaction tx=null; try { //得到 SessionFactory 对象 sessionFactory=HibernateUtils.getSessionFactory(); //创建 Session 对象 session=sessionFactory.openSession(); //开启事务 tx=session.beginTransaction(); //(1) //通过 id 查询用户对象 User user=session.get(User.class, 1); //(2) //调用 Session 的 delete() 方法实现级联删除 session.delete(user); //多对多级联删除,一般不使用,仅作了解即可 // //注意:此时角色的映射配置文件中的 set 标签 //不能将 inverse 属性设为 true,否则将无法 //删除 // //另外:set 标签也不能将 cascade 属性设为 //delete,否则 testSaveX() 方法保存的数据 //将全部删除 //提交事务 tx.commit(); } catch (Exception e) { //回滚事务 tx.rollback(); } finally { //关闭资源 session.close(); sessionFactory.close(); } } /** * 维护第三张表 */ @Test public void testTable(){ SessionFactory sessionFactory=null; Session session=null; Transaction tx=null; try { //得到 SessionFactory 对象 sessionFactory=HibernateUtils.getSessionFactory(); //创建 Session 对象 session=sessionFactory.openSession(); //开启事务 tx=session.beginTransaction(); //让某个用户有某个角色 //(1)根据 id 查询用户对象和角色对象 User user=session.get(User.class, 1); Role role=session.get(Role.class, 3); //(2)把角色对象放到用户对象的 Set 集合中 user.getRoleSet().add(role); //让某个用户没有某个角色 //(1)根据 id 查询用户对象和角色对象 User userx=session.get(User.class, 1); Role rolex=session.get(Role.class, 1); //(2)从用户对象的 Set 集合中移除角色对象 userx.getRoleSet().remove(rolex); //提交事务 tx.commit(); } catch (Exception e) { //回滚事务 tx.rollback(); } finally { //关闭资源 session.close(); sessionFactory.close(); } } } |
User.hbm.xml:
|
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- (1) class 标签:配置实体类和数据库表的对应; name 属性:实体类的全路径,即全限定名; table 属性:数据库表的名称(数据库表由 Hibernate 自动生成) --> <class name="com.siwuxie095.entity.User" table="t_user"> <!-- (2) id 标签:配置实体类 id 和表 id 对应(主键); name 属性:实体类里 id 属性名称; column 属性:生成表中 id 字段名称 --> <id name="uid" column="uid"> <generator class="native"></generator> </id> <!-- (3) property 标签:配置其它属性和表中字段对应; name 属性:实体类属性名称; column 属性:生成表中字段名称 --> <property name="userName" column="user_name"></property> <property name="userPassword" column="user_password"></property> <!-- (4) set 标签:配置关联关系的映射(配置关联对象),代表一个 Set 集合; name 属性:关联另一方的对象的 Set 集合的名称(在用户实体类中声明); table 属性:第三张表的名称; cascade 属性:save-update 表示级联保存,delete 表示级联删除(逗号隔开); inverse 属性:true 表示放弃关系维护(放弃外键的维护权)(默认为 false) --> <set name="roleSet" table="user_role" cascade="delete"> <!-- key 标签:配置当前对象(关联一方)在第三张表中的外键 column 属性:当前对象(关联一方)在第三张表中的外键名称 --> <key column="user_id"></key> <!-- many-to-many 标签:配置实体类的多对多关联; class:关联另一方的类的全路径,即角色实体类的全限定名; column:关联的另一方在第三张表的外键名称,即角色表在第三张表中的外键名称 --> <many-to-many class="com.siwuxie095.entity.Role" column="role_id"></many-to-many> </set> </class> </hibernate-mapping> |
Role.hbm.xml:
|
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.siwuxie095.entity.Role" table="t_role"> <id name="rid" column="rid"> <generator class="native"></generator> </id> <property name="roleName" column="role_name"></property> <property name="roleMemo" column="role_memo"></property> <!-- set 标签:配置关联关系的映射(配置关联对象),代表一个 Set 集合; name 属性:关联另一方的对象的 Set 集合的名称(在角色实体类中声明); table 属性:第三张表的名称; cascade 属性:save-update 表示级联保存,delete 表示级联删除(逗号隔开); inverse 属性:true 表示放弃关系维护(放弃外键的维护权)(默认为 false) --> <set name="userSet" table="user_role" cascade="save-update" inverse="false"> <!-- key 标签:配置当前对象(关联一方)在第三张表中的外键 column 属性:当前对象(关联一方)在第三张表中的外键名称 --> <key column="role_id"></key> <!-- many-to-many 标签:配置实体类的多对多关联; class:关联另一方的类的全路径,即用户实体类的全限定名; column:关联的另一方在第三张表的外键名称,即用户表在第三张表中的外键名称 --> <many-to-many class="com.siwuxie095.entity.User" column="user_id"></many-to-many> </set> </class> </hibernate-mapping> |
hibernate.cfg.xml:
|
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 第一部分:配置数据库信息(必须) --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 或使用 jdbc:mysql:///hibernate_db 代替,省略 localhost:3306 --> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_db</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">8888</property> <!-- 第二部分:配置 Hibernate 信息(可选) --> <!-- 输出底层 sql 语句 --> <property name="hibernate.show_sql">true</property> <!-- 输出底层 sql 语句格式 --> <property name="hibernate.format_sql">true</property> <!-- Hibernate 帮助创建表,不是自动创建,而需要配置之后。 update:如果已经有表,就更新,如果没有,就自动创建 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 配置数据库方言,让 Hibernate 框架识别不同数据库自己特有的语句 如:在 MySQL 中实现分页的关键字 limit,只能在 MySQL 中使用,而 在 Oracle 中实现分页的关键字则是 rownum --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 配置 Session 绑定本地线程 --> <property name="hibernate.current_session_context_class">thread</property> <!-- 第三部分:引入映射配置文件,把映射配置文件放到核心配置文件(必须) --> <mapping resource="com/siwuxie095/entity/User.hbm.xml"/> <mapping resource="com/siwuxie095/entity/Role.hbm.xml"/> </session-factory> </hibernate-configuration> |
【made by siwuxie095】
Hibernate多对多操作的更多相关文章
- hibernate 多对多操作(级联操作)
一.级联保存 分别在用户和角色配置文件中在set标签中加入cascade="save-update": 示例:添加同时添加用户对象和角色对象并关联两个对象: 只需将角色放入用户对象 ...
- Hibernate_day03--Hibernate多对多操作
Hibernate多对多操作 多对多映射配置 以用户和角色为例演示 第一步 创建实体类,用户和角色 第二步 让两个实体类之间互相表示 (1)一个用户里面表示所有角色,使用set集合 具体: User. ...
- hibernate多对一的操作解析
在hibernate的关联操作中有很多关系,其中多对一关系是最常见的.我们看这两个表. 这里有部门表和员工表. 那么我们可以这么说一个部门可以有多个员工.这就是1对多的关系.这是我们站在部门表的角度上 ...
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- hibernate多对一双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- hibernate多对一单向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- hibernate 多对多
HibernateHibernate多对多关联映射通常别拆分成两个多对一关联映射1. 下面的HostBean.UserBean.UserHostBean,UserHostBean是两个表之间的关联表, ...
- hibernate 多对多 最佳实践
首先 看看我们 ER 画画 :盖 一对一 .一对多 .多对多 的关系 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvem91dG9uZ3l1YW4=/fo ...
- hibernate多对多的更新问题
错误原因 A different ]; nested exception ]] with root cause org.hibernate.NonUniqueObjectException: A di ...
随机推荐
- c/c++中system函数在Linux和windows下区别
windows 在windows下的system函数中命令可以不区别大小写! 功 能: 发出一个DOS命令 #include <stdlib.h> int system(char *com ...
- wordpress缓存插件使用提高网站速度
WordPress是世界上使用量最多的CMS,由于程序非常吃主机性能,正常情况下当页面被访问时,使用php和mysql. 因此,系统需要消耗RAM和CPU. 如果同一时间有大量访客访问,系统将使用大量 ...
- apache编译参数详解
常用编译参数: ./configure //配置源代码树–prefix=/usr/local/apache //体系无关文件的顶级安装目录PREFIX ,也就Apache的安装目录.–e ...
- printf()_scanf()_取余运算符与取模运算符
基本的输入和输出函数的用法 printf();四种用法 1.printf("字符串\n"); 2.printf("输出控制符",输出参数); 3.printf( ...
- Python控制台输出不换行(进度条等)
sys.stdout.write('\r'+str) sys.stdout.flush() time.sleep(1)
- Epel源配置
CentOS6的请编辑/etc/yum.repos.d/epel.repo输入以下内容 [epel] name=Extra Packages for Enterprise Linux 6 - $bas ...
- 【CSS】文字超出显示省略号&连续字符换行
方法1.多行控制(css3) .text { width: 100%; word-break: break-all; display: -webkit-box; -webkit-line-clamp: ...
- spi驱动框架全面分析,从master驱动到设备驱动
内核版本:linux2.6.32.2 硬件资源:s3c2440 参考: 韦东山SPI视频教程 内容概括: 1.I2C 驱动框架回顾 2.SPI 框架简单介绍 3.maste ...
- ALSA声卡09_从零编写之参数设置_学习笔记
1.参数设置分析 (1)open: soc_pcm_open 依次调用cpu_dai, dma, codec_dai, machine的open或startup函数 只在dma的open函数里添加参数 ...
- Maven的学习
Maven是Apache的一个项目,它使用对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具.它集项目的构建,清理,编译等于一体,以前我们在使用IDE时,基本上一 ...