Hibernate笔记6-JPA-注解
一.JPA简介--Java Persistence API。
是SUN公司推出的一套基于ORM的规范。hibernate框架中提供了JPA的实现。JPA通过JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
优势:标准化/容器级特性的支持/简单方便/JPQL查询/面向对象的高级特性
二.基于JPA注解的单表映射
a.导入Hibernate必备的13个jar包;
b.创建Hibernate核心配置文件:hibernate.cfg.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE hibernate-configuration PUBLIC
3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
5 <hibernate-configuration>
6 <session-factory>
7 <!--数据库配置 -->
8 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
9 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
10 <property name="hibernate.connection.url">jdbc:mysql:///day58</property>
11 <property name="hibernate.connection.username">root</property>
12 <property name="hibernate.connection.password">root</property>
13 <!--hibernate基本配置 -->
14 <property name="hibernate.hbm2ddl.auto">create</property>
15 <property name="hibernate.show_sql">true</property>
16 <property name="hibernate.format_sql">true</property>
17 <!--配置数据源的提供商 (记得导入c3p0的jar包) -->
18 <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
19 <!--配置事务的隔离级别 -->
20 <property name="hibernate.connection.isolation">4</property>
21 <!--配置与当前线程绑定的session对象 -->
22 <property name="hibernate.current_session_context_class">thread</property>
23 <!--指定映射文件位置 (文件变为class,属性值为类的全限定名) -->
24 <mapping class="huguangqin.com.cnblogs.entity.Customer"/>
25 </session-factory>
26 </hibernate-configuration>
c.使用JPA注解配置实体类
1 package huguangqin.com.cnblogs.entity;
2 import java.io.Serializable;
3 import javax.persistence.Column;
4 import javax.persistence.Entity;
5 import javax.persistence.GeneratedValue;
6 import javax.persistence.GenerationType;
7 import javax.persistence.Id;
8 import javax.persistence.Table;
9
10 @Entity // 表示当前类是一个实体类
11 @Table(name = "cst_customer") // 建立当前实体类与表之间的对应关系
12 public class Customer implements Serializable {
13 @Id // 表示当前属性为主键
14 @GeneratedValue(strategy = GenerationType.IDENTITY) // 指定主键生成策略
15 @Column(name = "cust_id") // 属性对应的字段名
16 private Long custId;
17 @Column(name = "cust_name")
18 private String custName;
19 @Column(name = "cust_source")
20 private String custSource;
21 @Column(name = "cust_industry")
22 private String custIndustry;
23 @Column(name = "cust_level")
24 private String custLevel;
25 @Column(name = "cust_address")
26 private String custAddress;
27 @Column(name = "cust_phone")
28 private String custPhone;
29
30 public Long getCustId() {
31 return custId;
32 }
33
34 public void setCustId(Long custId) {
35 this.custId = custId;
36 }
37
38 public String getCustName() {
39 return custName;
40 }
41
42 public void setCustName(String custName) {
43 this.custName = custName;
44 }
45
46 public String getCustSource() {
47 return custSource;
48 }
49
50 public void setCustSource(String custSource) {
51 this.custSource = custSource;
52 }
53
54 public String getCustIndustry() {
55 return custIndustry;
56 }
57
58 public void setCustIndustry(String custIndustry) {
59 this.custIndustry = custIndustry;
60 }
61
62 public String getCustLevel() {
63 return custLevel;
64 }
65
66 public void setCustLevel(String custLevel) {
67 this.custLevel = custLevel;
68 }
69
70 public String getCustAddress() {
71 return custAddress;
72 }
73
74 public void setCustAddress(String custAddress) {
75 this.custAddress = custAddress;
76 }
77
78 public String getCustPhone() {
79 return custPhone;
80 }
81
82 public void setCustPhone(String custPhone) {
83 this.custPhone = custPhone;
84 }
85
86 // toString
87 @Override
88 public String toString() {
89 return "Customer [custId=" + custId + ", custName=" + custName + ", custSource=" + custSource
90 + ", custIndustry=" + custIndustry + ", custLevel=" + custLevel + ", custAddress=" + custAddress
91 + ", custPhone=" + custPhone + "]";
92 }
93
94 }
95
d.实现保存功能
1 package huguangqin.com.cnblogs.demo;
2 import org.hibernate.Session;
3 import org.hibernate.Transaction;
4 import org.junit.Test;
5 import huguangqin.com.cnblogs.entity.Customer;
6 import huguangqin.com.cnblogs.util.HibernateUtils;
7
8 /**
9 * 实现保存一个客户的功能
10 */
11 public class JPATest {
12 @Test
13 public void add() {
14 // 获取session
15 Session cs = HibernateUtils.getCurrentSession();
16 // 开启事务
17 Transaction tx = cs.beginTransaction();
18 // 创建对象
19 Customer c = new Customer();
20 c.setCustName("大通股份");
21 // 保存
22 cs.save(c);
23 // 提交
24 tx.commit();
25 }
26 }
27
常用注解说明:
@Entity
作用:指定当前类是实体类。写上此注解用于在创建SessionFactory时,加载映射配置。
@Table
作用:指定实体类和表之间的对应关系。
属性:
name:指定数据库表的名称
@Id
作用:指定当前字段是主键。
@GeneratedValue
作用:指定主键的生成方式。
属性:
strategy :指定主键生成策略。JPA支持四种生成策略:TABLE,SEQUENCE,IDENTITY,AUTO。
IDENTITY:主键由数据库自动生成(主要是自动增长型);mysql
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 oracle
AUTO:主键由程序控制。
TABLE:使用一个特定的数据库表格来保存主键。
@Column
作用:指定实体类属性和数据库表之间的对应关系
属性:
name:指定数据库表的列名称。
unique:是否唯一
nullable:是否可以为空
inserttable:是否可以插入
updateable:是否可以更新
columnDefinition: 定义建表时创建此列的DDL
secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。
三.一对多关系映射
注解说明:
@OneToMany:
作用:建立一对多的关系映射
属性:
targetEntityClass:指定多方的类的字节码
mappedBy:指定从表实体类中引用主表对象的名称。
cascade:指定要使用的级联操作
fetch:指定是否采用延迟加载
orphanRemoval:是否使用孤儿删除
@ManyToOne
作用:建立多对一的关系
属性:
targetEntityClass:指定一的一方实体类字节码
cascade:指定要使用的级联操作
fetch:指定是否采用延迟加载
optional:关联是否可选。如果设置为false,则必须始终存在非空关系。
@JoinColumn
作用:用于定义主键字段和外键字段的对应关系。
属性:
name:指定外键字段的名称
referencedColumnName:指定引用主表的主键字段名称
unique:是否唯一。默认值不唯一
nullable:是否允许为空。默认值允许。
insertable:是否允许插入。默认值允许。
updatable:是否允许更新。默认值允许。
columnDefinition:列的定义信息。
示例:双向一对多关系
实体类-Customer:
1 package huguangqin.com.cnblogs.entity;
2 import java.io.Serializable;
3 import java.util.HashSet;
4 import java.util.Set;
5 import javax.persistence.CascadeType;
6 import javax.persistence.Column;
7 import javax.persistence.Entity;
8 import javax.persistence.GeneratedValue;
9 import javax.persistence.GenerationType;
10 import javax.persistence.Id;
11 import javax.persistence.OneToMany;
12 import javax.persistence.Table;
13
14 @Entity // 表示当前类是一个实体类
15 @Table(name = "cst_customer") // 建立当前实体类与表之间的对应关系
16 public class Customer implements Serializable {
17 @Id // 表示当前属性为主键
18 @GeneratedValue(strategy = GenerationType.IDENTITY) // 指定主键生成策略
19 @Column(name = "cust_id") // 属性对应的字段名
20 private Long custId;
21 @Column(name = "cust_name")
22 private String custName;
23 @Column(name = "cust_source")
24 private String custSource;
25 @Column(name = "cust_industry")
26 private String custIndustry;
27 @Column(name = "cust_level")
28 private String custLevel;
29 @Column(name = "cust_address")
30 private String custAddress;
31 @Column(name = "cust_phone")
32 private String custPhone;
33 // 一对多,此处为关键处,mappedBy-放弃外键维护权
34 @OneToMany(targetEntity = Linkman.class, mappedBy = "customer", cascade = CascadeType.ALL)
35 private Set<Linkman> linkmans = new HashSet<>();
36
37 public Set<Linkman> getLinkmans() {
38 return linkmans;
39 }
40
41 public void setLinkmans(Set<Linkman> linkmans) {
42 this.linkmans = linkmans;
43 }
44
45 public Long getCustId() {
46 return custId;
47 }
48
49 public void setCustId(Long custId) {
50 this.custId = custId;
51 }
52
53 public String getCustName() {
54 return custName;
55 }
56
57 public void setCustName(String custName) {
58 this.custName = custName;
59 }
60
61 public String getCustSource() {
62 return custSource;
63 }
64
65 public void setCustSource(String custSource) {
66 this.custSource = custSource;
67 }
68
69 public String getCustIndustry() {
70 return custIndustry;
71 }
72
73 public void setCustIndustry(String custIndustry) {
74 this.custIndustry = custIndustry;
75 }
76
77 public String getCustLevel() {
78 return custLevel;
79 }
80
81 public void setCustLevel(String custLevel) {
82 this.custLevel = custLevel;
83 }
84
85 public String getCustAddress() {
86 return custAddress;
87 }
88
89 public void setCustAddress(String custAddress) {
90 this.custAddress = custAddress;
91 }
92
93 public String getCustPhone() {
94 return custPhone;
95 }
96
97 public void setCustPhone(String custPhone) {
98 this.custPhone = custPhone;
99 }
100
101 // toString
102 @Override
103 public String toString() {
104 return "Customer [custId=" + custId + ", custName=" + custName + ", custSource=" + custSource
105 + ", custIndustry=" + custIndustry + ", custLevel=" + custLevel + ", custAddress=" + custAddress
106 + ", custPhone=" + custPhone + "]";
107 }
108
109 }
110
实体类-Linkman
1 package huguangqin.com.cnblogs.entity;
2 import java.io.Serializable;
3 import javax.persistence.Column;
4 import javax.persistence.Entity;
5 import javax.persistence.GeneratedValue;
6 import javax.persistence.GenerationType;
7 import javax.persistence.Id;
8 import javax.persistence.JoinColumn;
9 import javax.persistence.ManyToOne;
10 import javax.persistence.Table;
11
12 @Entity
13 @Table(name = "cst_linkman")
14 public class Linkman implements Serializable {
15 @Id
16 @GeneratedValue(strategy = GenerationType.IDENTITY)
17 @Column(name = "lkm_id")
18 private Long lkmId;// 联系人编号(主键)
19 @Column(name = "lkm_name")
20 private String lkmName;// 姓名
21 @Column(name = "lkm_gender")
22 private String lkmGender;// 性别
23 @Column(name = "lkm_phone")
24 private String lkmPhone;// 办 公电话
25 @Column(name = "lkm_mobile")
26 private String lkmMobile;// 手机
27 @Column(name = "lkm_email")
28 private String lkmEmail;// 邮箱
29 @Column(name = "lkm_position")
30 private String lkmPosition;// 职位
31 @Column(name = "lkm_memo")
32 private String lkmMemo;// 备注
33 // 多个linkman对应一个customer,此处为关键
34 @ManyToOne(targetEntity = Customer.class)
35 @JoinColumn(name = "lkm_cust_id", referencedColumnName = "cust_id") // 指定外键名和参照主键
36 private Customer customer;
37
38 public Customer getCustomer() {
39 return customer;
40 }
41
42 public void setCustomer(Customer customer) {
43 this.customer = customer;
44 }
45
46 // getter/setter
47 public Long getLkmId() {
48 return lkmId;
49 }
50
51 public void setLkmId(Long lkmId) {
52 this.lkmId = lkmId;
53 }
54
55 public String getLkmName() {
56 return lkmName;
57 }
58
59 public void setLkmName(String lkmName) {
60 this.lkmName = lkmName;
61 }
62
63 public String getLkmGender() {
64 return lkmGender;
65 }
66
67 public void setLkmGender(String lkmGender) {
68 this.lkmGender = lkmGender;
69 }
70
71 public String getLkmPhone() {
72 return lkmPhone;
73 }
74
75 public void setLkmPhone(String lkmPhone) {
76 this.lkmPhone = lkmPhone;
77 }
78
79 public String getLkmMobile() {
80 return lkmMobile;
81 }
82
83 public void setLkmMobile(String lkmMobile) {
84 this.lkmMobile = lkmMobile;
85 }
86
87 public String getLkmEmail() {
88 return lkmEmail;
89 }
90
91 public void setLkmEmail(String lkmEmail) {
92 this.lkmEmail = lkmEmail;
93 }
94
95 public String getLkmPosition() {
96 return lkmPosition;
97 }
98
99 public void setLkmPosition(String lkmPosition) {
100 this.lkmPosition = lkmPosition;
101 }
102
103 public String getLkmMemo() {
104 return lkmMemo;
105 }
106
107 public void setLkmMemo(String lkmMemo) {
108 this.lkmMemo = lkmMemo;
109 }
110
111 // toString
112 @Override
113 public String toString() {
114 return "Linkman [lkmId=" + lkmId + ", lkmName=" + lkmName + ", lkmGender=" + lkmGender + ", lkmPhone="
115 + lkmPhone + ", lkmMobile=" + lkmMobile + ", lkmEmail=" + lkmEmail + ", lkmPosition=" + lkmPosition
116 + ", lkmMemo=" + lkmMemo + "]";
117 }
118
119 }
120
测试代码:
1 package huguangqin.com.cnblogs.demo;
2
3 import org.hibernate.Session;
4 import org.hibernate.Transaction;
5 import org.junit.Test;
6
7 import huguangqin.com.cnblogs.entity.Customer;
8 import huguangqin.com.cnblogs.entity.Linkman;
9 import huguangqin.com.cnblogs.util.HibernateUtils;
10
11 /**
12 * 一对多,保存一个客户,即能保存对应的多个联系人
13 */
14 public class JPATest01 {
15 @Test
16 public void add() {
17 // 获取session
18 Session cs = HibernateUtils.getCurrentSession();
19 // 开启事务,并返回事务对象
20 Transaction tx = cs.beginTransaction();
21 // 创建对象
22 Customer c = new Customer();
23 c.setCustName("百度");
24 Linkman man = new Linkman();
25 man.setLkmName("大王");
26 // 创建关系--双方均需创建关系,否则外键添加不上
27 c.getLinkmans().add(man);
28 man.setCustomer(c);
29 // 保存
30 cs.save(c);
31 // 提交事务
32 tx.commit();
33 }
34 }
35
四.多对多关系映射
注解说明
@ManyToMany
作用:用于映射多对多关系
属性:
cascade:配置级联操作。
fetch:配置是否采用延迟加载。
targetEntity:配置目标的实体类。映射多对多的时候不用写。
@JoinTable
作用:针对中间表的配置
属性:
nam:配置中间表的名称
joinColumns:中间表的外键字段关联当前实体类所对应表的主键字段
inverseJoinColumn:中间表的外键字段关联对方表的主键字段
@JoinColumn
作用:用于定义主键字段和外键字段的对应关系。
属性:
name:指定外键字段的名称
referencedColumnName:指定引用主表的主键字段名称
unique:是否唯一。默认值不唯一
nullable:是否允许为空。默认值允许。
insertable:是否允许插入。默认值允许。
updatable:是否允许更新。默认值允许。
columnDefinition:列的定义信息。
示例:多对多关系
实体类:-User
1 package huguangqin.com.cnblogs.entity;
2 import java.io.Serializable;
3 import java.util.HashSet;
4 import java.util.Set;
5 import javax.persistence.CascadeType;
6 import javax.persistence.Column;
7 import javax.persistence.Entity;
8 import javax.persistence.GeneratedValue;
9 import javax.persistence.GenerationType;
10 import javax.persistence.Id;
11 import javax.persistence.JoinColumn;
12 import javax.persistence.JoinTable;
13 import javax.persistence.ManyToMany;
14 import javax.persistence.Table;
15
16 @Entity
17 @Table(name = "user")
18 public class User implements Serializable {
19
20 @Id
21 @GeneratedValue(strategy = GenerationType.IDENTITY)
22 @Column(name = "user_id")
23 private Long userId;
24
25 @Column(name = "user_name")
26 private String userName;
27
28 @Column
29 private String address;
30
31 // 对应多个角色
32 @ManyToMany(targetEntity = Role.class, cascade = CascadeType.ALL)
33 @JoinTable(name = "role_user",
34 joinColumns = {@JoinColumn(name = "sys_user_id", referencedColumnName = "user_id") },
35 inverseJoinColumns = {@JoinColumn(name = "sys_role_id", referencedColumnName = "role_id") })
36 private Set<Role> roles = new HashSet<>(0);
37
38 // getter/setter
39 public Long getUserId() {
40 return userId;
41 }
42
43 public void setUserId(Long userId) {
44 this.userId = userId;
45 }
46
47 public String getUserName() {
48 return userName;
49 }
50
51 public void setUserName(String userName) {
52 this.userName = userName;
53 }
54
55 public String getAddress() {
56 return address;
57 }
58
59 public void setAddress(String address) {
60 this.address = address;
61 }
62
63 public Set<Role> getRoles() {
64 return roles;
65 }
66
67 public void setRoles(Set<Role> roles) {
68 this.roles = roles;
69 }
70
71 // toString
72 @Override
73 public String toString() {
74 return "User [userId=" + userId + ", userName=" + userName + ", address=" + address + ", roles=" + roles + "]";
75 }
76
77 }
78
实体类:Role
1 package huguangqin.com.cnblogs.entity;
2 import java.io.Serializable;
3 import java.util.HashSet;
4 import java.util.Set;
5 import javax.persistence.Column;
6 import javax.persistence.Entity;
7 import javax.persistence.GeneratedValue;
8 import javax.persistence.GenerationType;
9 import javax.persistence.Id;
10 import javax.persistence.ManyToMany;
11 import javax.persistence.Table;
12
13 @Entity
14 @Table(name = "role")
15 public class Role implements Serializable {
16
17 @Id
18 @GeneratedValue(strategy = GenerationType.IDENTITY)
19 @Column(name = "role_id")
20 private Long roleId;
21
22 @Column(name = "role_name")
23 private String roleName;
24
25 // 对应多个用户
26 @ManyToMany(mappedBy = "roles") // 放弃维护权,已由对方Role属性维护
27 private Set<User> users = new HashSet<>(0);
28
29 // getter/setter
30 public Long getRoleId() {
31 return roleId;
32 }
33
34 public void setRoleId(Long roleId) {
35 this.roleId = roleId;
36 }
37
38 public String getRoleName() {
39 return roleName;
40 }
41
42 public void setRoleName(String roleName) {
43 this.roleName = roleName;
44 }
45
46 public Set<User> getUsers() {
47 return users;
48 }
49
50 public void setUsers(Set<User> users) {
51 this.users = users;
52 }
53
54 // toString
55 @Override
56 public String toString() {
57 return "Role [roleId=" + roleId + ", roleName=" + roleName + ", users=" + users + "]";
58 }
59
60 }
61
62 测试代码:
63 package huguangqin.com.cnblogs.demo;
64 import org.hibernate.Session;
65 import org.hibernate.Transaction;
66 import org.junit.Test;
67 import huguangqin.com.cnblogs.entity.Role;
68 import huguangqin.com.cnblogs.entity.User;
69 import huguangqin.com.cnblogs.util.HibernateUtils;
70
71 public class AnotationTest {
72 @Test
73 public void test() {
74 // 获取Session
75 Session cs = HibernateUtils.getCurrentSession();
76 // 开启事务
77 Transaction tx = cs.beginTransaction();
78 // 构建对象
79 Role r = new Role();
80 r.setRoleName("model");
81 User u = new User();
82 u.setUserName("Rose");
83 // 创建关系
84 r.getUsers().add(u);
85 u.getRoles().add(r);
86 // 保存,由于设置了级联操作,只保存一个即可
87 cs.save(u);
88 // 提交事务
89 tx.commit();
90 }
91
92 }
93
Hibernate笔记6-JPA-注解的更多相关文章
- Java、Hibernate(JPA)注解大全
1.@Entity(name=”EntityName”) 必须,name为可选,对应数据库中一的个表 2.@Table(name=””,catalog=””,schema=””) 可选,通常和@Ent ...
- Spring+Hibernate+struts2+JPA 注解+跨域//完成手机端点击加载更多 下拉加载更多
一.使用IDEA新建一个maven项目(student) 1.1.0编写pom文件,添加项目所需要的包 <?xml version="1.0" encoding=" ...
- Hibernate 和 JPA 注解
转载请注明:Hibernate 和 JPA 注解 | 言曌博客 1.@Entity(name="EntityName") 必须, name为可选,对应数据库中一的个表 2.@Tab ...
- hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系
前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hi ...
- JPA学习笔记1——JPA基础
1.JPA简介: Java持久化规范,是从EJB2.x以前的实体Bean(Entity bean)分离出来的,EJB3以后不再有实体bean,而是将实体bean放到JPA中实现.JPA是sun提出的一 ...
- jpa 注解使用说明
1.@Entity(name="EntityName") 必须,name为可选,对应数据库中一的个表 2.@Table(name="",catalog=&quo ...
- 再谈Hibernate级联删除——JPA下的Hibernate实现一对多级联删除CascadeType.DELETE_ORPHAN
声明: 1.本文系原创,非抄袭或转载过来的. 2.本文论点都亲手做过实验论证. 3.本文所讲的Hibernate配置都基于注解的方式,hbm语法未提供. 非常多人对持久层概念搞不清JPA.Hibern ...
- springBoot注解大全JPA注解springMVC相关注解全局异常处理
https://www.cnblogs.com/tanwei81/p/6814022.html 一.注解(annotations)列表 @SpringBootApplication:包含了@Compo ...
- JPA注解实现联合主键
当表中一个主键不能唯一标识一条记录的时候,就需要使用联合主键了,下面是使用JPA注解实现联合主键的代码 1 首先需要建立一个复合主键类,用来存放需要生产联合主键的属性,该类需要实现序列化. packa ...
- Hibernate关系映射(注解)
1.类级别注解 @Entity 映射实体类 @Table 映射数句库表 @Entity(name="tableName") - 必须,注解将一个类声明为一个实体bea ...
随机推荐
- JVM原理解析
JVM主要的功能: 内存分配 程序调度 内存释放(栈等自动释放.堆垃圾回收) 异常处理 https://www.cnblogs.com/dingyingsi/p/3760447.html https: ...
- JavaScript的内部对象
JavaScript的内部对象 按创建方式不同分为:使用变量声明的隐性对象,使用new创建的显性对象 隐性对象 在赋值和声明后就是一个隐性对象,隐性对象不支持prototype属性,也无法随意扩展对象 ...
- 学习过程的记录:实验室电脑上的jdk环境变量
亲爱的,先区分安装路径和软件的存放路径好不好呢? 1.变量名:JAVA_HOME 变量值:D:\Program Files\Java\jdk1.7.0_21 2. 编辑 Path(粘贴到最后) %JA ...
- c# 指针unsafe/fixed -- 【一】
指针C#unsafefixed 目录(?)[-] 概述 unsafe fixed 1.1 概述 unsafe关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的.可以在属性.方法.类的声明中使 ...
- Flask 入门(第一篇)
1. 认识 Flask Flask 是一个微型 Web 框架,依赖于 jinjia2 模板系统和 Werkzeug WSGI(本质为 Socket 服务端) 服务,默认情况不支持数据库抽象层.表单验证 ...
- 如何使用visual studio 2017创建C语言项目
使用visual studio 2017创建一个C语言项目,步骤如下: (1)打开Visual Studio 2017环境后出现欢迎界面,如图1所示. 图1 Visual Studio 2017欢迎 ...
- 机器学习十大算法之EM算法
此文已由作者赵斌授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 由于目前论坛的Markdown不支持Mathjax,数学公式没法正常识别,文章只能用截图上传了... ...
- ZOJ - 3777(状压dp)
The 11th Zhejiang Provincial Collegiate Programming Contest is coming! As a problem setter, Edward i ...
- 反射实现数据库增删改查DAO及DAOImpl源代码(一)
这是DAO层,第一次尝试,如有bug希望能即使反馈,我们共同进步.具体的用法和实现原理我会在前面几篇博客中补充更新.配置文件及项目目录结构会在下一篇中贴出! package com.javasm.su ...
- 浮点数与快速log2
请先于浮点数的文章:http://blog.jobbole.com/86371/ 先贴一张关于float和double的图: float: double: 快速log2长这样: int flog2(f ...