Hibernate中的JPA写法(利用注解的形式)
来源:互联网 发布:美国邮箱数据出售 编辑:程序博客网 时间:2024/06/07 22:21
首先说一点:关于配置文件,叫persistence.xml放在META-INF下边,而这个文件夹放在src/main/resources中
关于具体的用法,在代码中做了详细的说明
首先看配置文件
<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <!--此处的名字与文件加载配置文件的名字一样 --> <persistence-unit name="jpa-2" transaction-type="RESOURCE_LOCAL"> <!-- 指定jpa的实现厂商 --> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <!-- 类的全路径,注意放的位置 --> <!-- 即把所对应的实体应该要放到这一个配置文件中 --> <class>com.qf.pojo.JpaUser</class> <!-- 数据库连接和厂商的相关信息,都要包含在这一个节点之中 --> <properties> <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/> <property name="hibernate.connection.password" value="root"/> <property name="hibernate.connection.url" value="jdbc:mysql:///jpa"/> <!-- 关于乱码问题,在这儿的URL路径后边做拼接操作 --> <property name="hibernate.connection.username" value="root"/> <!-- 数据库连接的相关注册 --> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL55Dialect"/> <!-- 注意数据库的版本55 --> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.show_sql" value="true"/> <!-- 这一句是自动创建表,再利用Hibernate.cfg.xml时,也可以自动创建 表 ,但理论上都是先设计表结构 --> <property name="hibernate.hbm2ddl.auto" value="update"/> <!-- 数据库厂商的相关属性 --> </properties> </persistence-unit> </persistence>
关于工具类的写法
package com.qf.jpaUtils;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;public class JpaUtils { private static EntityManagerFactory entityManagerFactory ; static{ //配置文件的名字 entityManagerFactory=Persistence.createEntityManagerFactory("jpa-2"); /*加载配置文件,获取工厂*/ } public static EntityManager getentityManager(){ /*通过工厂得到实体对象*/ return entityManagerFactory.createEntityManager(); } }下边是基础的CRUD以及JPQL语句
package com.qf.dao;import java.util.List;import javax.persistence.EntityManager;import javax.persistence.EntityTransaction;import javax.persistence.Query;import javax.persistence.TypedQuery;import com.qf.jpaUtils.JpaUtils;import com.qf.pojo.JpaUser;public class JpaUserDao { /* * 测试自动创建表 * public static void main(String[] args) { 加载配置,得到实体工厂,联系Hibernate.config.xml,步骤大体相同EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jpa-2");EntityManager entityManager = entityManagerFactory.createEntityManager();entityManagerFactory.close();}*/ /* 开始做crud操作*/ //基础的添加数据 public void addJpaUser(JpaUser pojo){ EntityManager manager = JpaUtils.getentityManager(); EntityTransaction transaction = manager.getTransaction(); /*需要注意一下,先要获取事务,然后再开启事务*/ transaction.begin(); manager.persist(pojo); transaction.commit(); manager.close(); } //基础的删除数据 public void delJpaUser(long id){ //关于删除的操作,首先要根据id找到数据,然后再去删除 EntityManager manager = JpaUtils.getentityManager(); EntityTransaction transaction = manager.getTransaction(); transaction.begin(); JpaUser pojo = manager.find(JpaUser.class,id); manager.remove(pojo);//根据ID去删除 transaction.commit(); manager.close(); } //基础的查找数据 public JpaUser findJpaUser(long jpaid){ EntityManager manager = JpaUtils.getentityManager(); EntityTransaction transaction = manager.getTransaction(); transaction.begin(); JpaUser jpaUser = manager.find(JpaUser.class, jpaid); transaction.commit(); manager.close(); return jpaUser; } //基础的更新数据 public void updateJpaUser(JpaUser pojo){ EntityManager manager = JpaUtils.getentityManager(); EntityTransaction transaction = manager.getTransaction(); transaction.begin(); JpaUser jpaUser = manager.merge(pojo); /*更新数据的方法*/ System.err.println(jpaUser.getJpasex()); transaction.commit(); manager.close(); } //查找全部数据 public void findall(){ EntityManager manager = JpaUtils.getentityManager(); String jpql="from JpaUser"; TypedQuery<JpaUser> query = manager.createQuery(jpql, JpaUser.class); List<JpaUser> list = query.getResultList(); for (JpaUser jpaUser : list) {System.out.println(jpaUser.getJpaname());} manager.close(); } //根据条件查找,占位符的问题 public void findByName(String jpaname){ EntityManager manager = JpaUtils.getentityManager(); String jphl="from JpaUser j where j.jpaname=?1"; //此处的占位符可以把一省略,默认将是从0开始 TypedQuery<JpaUser> query = manager.createQuery(jphl,JpaUser.class); @SuppressWarnings("unused")TypedQuery<JpaUser> parameter = query.setParameter(1, jpaname); List<JpaUser> list = query.getResultList(); for (JpaUser jpaUser : list) {System.out.println(jpaUser.getJpaname()+"\t"+jpaUser.getJpasex());} manager.close(); }//查找部分列数据,去调试 public void findsome(){ EntityManager manager = JpaUtils.getentityManager(); String jpql="select j.jpaname,j.jpaage from JpaUser j"; Query query = manager.createQuery(jpql); List<?> list = query.getResultList(); for (int i = 0; i < list.size(); i++) { //当去查询部分数据时,利用调试的方法去看,输出的什么内容 Object[] object= (Object[]) list.get(i); System.out.println(object[0]+"\t"+object[1]); } manager.close(); } //模糊查询 public void findLike(String jpaname){ EntityManager manager = JpaUtils.getentityManager(); String jpql="from JpaUser where jpaname like ?"; // String jpql="from JpaUser where jpaname like :jpaname"; //这样也可以 TypedQuery<JpaUser> query = manager.createQuery(jpql,JpaUser.class); query.setParameter(0,"%"+ jpaname+"%"); List<JpaUser> list = query.getResultList(); for (JpaUser jpaUser : list) {System.out.println(jpaUser.getJpaname()+"\t"+jpaUser.getJpaage());} manager.close(); } //更新数据,根据id去更新数据 public void findUpUser(long jpaid,String jpaname){ EntityManager manager = JpaUtils.getentityManager(); EntityTransaction transaction = manager.getTransaction(); transaction.begin(); String jpql="update JpaUser set jpaname=:jpaname where jpaid=:jpaid"; Query createQuery = manager.createQuery(jpql); createQuery.setParameter("jpaname", jpaname); createQuery.setParameter("jpaid", jpaid); createQuery.executeUpdate();//最容易忘记的语句 transaction.commit(); manager.close(); } //根据条件去删除数据 public void dealUpUser(long jpaid){ EntityManager manager = JpaUtils.getentityManager(); EntityTransaction transaction = manager.getTransaction(); transaction.begin(); String jpql="delete from JpaUser where jpaid=:jpaid"; Query query = manager.createQuery(jpql); query.setParameter("jpaid", jpaid); int update = query.executeUpdate(); System.out.println(update); transaction.commit(); manager.close(); } //查询总记录数 public void countUpUser(){ EntityManager manager = JpaUtils.getentityManager(); String jpql="select count(jpaid) from JpaUser"; Query query = manager.createQuery(jpql); long sum=(Long)query.getSingleResult(); System.out.println("总条数为"+sum); manager.close(); } //分页 开始的页数 和一页中显示的数量 public void findPag(int startIndex,int size){ EntityManager manager = JpaUtils.getentityManager(); String jpql="from JpaUser"; TypedQuery<JpaUser> query = manager.createQuery(jpql,JpaUser.class); query.setFirstResult(startIndex); //关于这两个方法 query.setMaxResults(size); List<JpaUser> list = query.getResultList(); for (JpaUser jpaUser : list) {System.out.println(jpaUser.getJpaname()+"\t"+jpaUser.getJpaage());} manager.close(); } }
关于实体类的创建,使用注解的方式去创建(这是在单表)
package com.qf.pojo;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name="jpa_user")/*数据库中表的表名*/public class JpaUser {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)/*关于主键的自动生成*/ private long jpaid;@Column(name="jpa_name") private String jpaname; private int jpaage; @Column(name="jpa_sex") /* @里边中name的属性都是数据库表中的字段的名字*/ private String jpasex;public long getJpaid() {return jpaid;}public void setJpaid(long jpaid) {this.jpaid = jpaid;}public String getJpaname() {return jpaname;}public void setJpaname(String jpaname) {this.jpaname = jpaname;}public int getJpaage() {return jpaage;}public void setJpaage(int jpaage) {this.jpaage = jpaage;}public String getJpasex() {return jpasex;}public void setJpasex(String jpasex) {this.jpasex = jpasex;} }
若是在关联表中,请看下边的代码(配置文件中只需做这两个类的映射,即class标签)
package com.qf.pojo;import java.util.HashSet;import java.util.Set;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.OneToMany;import javax.persistence.Table;@Entity@Table(name="friendtype")public class Friendtype {@Id@GeneratedValue(strategy=GenerationType.IDENTITY) private long ftypeid;@OneToMany(mappedBy="friendtype") private Set friendinfo = new HashSet(0);//在主表中有一个set集合public long getFtypeid() {return ftypeid;}public void setFtypeid(long ftypeid) {this.ftypeid = ftypeid;}public Set getFriendinfo() {return friendinfo;}public void setFriendinfo(Set friendinfo) {this.friendinfo = friendinfo;}public Friendtype(long ftypeid, Set friendinfo) {super();this.ftypeid = ftypeid;this.friendinfo = friendinfo;}public Friendtype() {super();} }
package com.qf.pojo;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.Table;@Entity@Table(name="friendinfo")public class Friendinfo {@Id@GeneratedValue(strategy=GenerationType.IDENTITY) private long friendid; private String friendname; private String friendage; private String friendsex; private String friendhobby; @ManyToOne @JoinColumn(name="ftypeid") private Friendtype friendtype;//子表中有一个这个属性(关于主表的)public long getFriendid() {return friendid;}public void setFriendid(long friendid) {this.friendid = friendid;}public String getFriendname() {return friendname;}public void setFriendname(String friendname) {this.friendname = friendname;}public String getFriendage() {return friendage;}public void setFriendage(String friendage) {this.friendage = friendage;}public String getFriendsex() {return friendsex;}public void setFriendsex(String friendsex) {this.friendsex = friendsex;}public String getFriendhobby() {return friendhobby;}public void setFriendhobby(String friendhobby) {this.friendhobby = friendhobby;}public Friendtype getFriendtype() {return friendtype;}public void setFriendtype(Friendtype friendtype) {this.friendtype = friendtype;}public Friendinfo(long friendid, String friendname, String friendage, String friendsex, String friendhobby,Friendtype friendtype) {super();this.friendid = friendid;this.friendname = friendname;this.friendage = friendage;this.friendsex = friendsex;this.friendhobby = friendhobby;this.friendtype = friendtype;}public Friendinfo() {super();} }
阅读全文
0 0
- Hibernate中的JPA写法(利用注解的形式)
- 使用JPA 注解的Hibernate
- (Hibernate)JPA注解总结
- Hibernate,JPA注解(一)
- Hibernate,JPA注解(二)
- Hibernate,JPA注解(三)
- Hibernate or JPA Annotation中BLOB、CLOB注解写法
- 利用Hibernate进行简单的增删改查(未使用JPA注解,以Oracle为例)
- hibernate反向工程生成带注解的实体(jpa)
- 基于注解形式的hibernate二级缓存的使用(ehcache)
- 基于注解形式的hibernate二级缓存的使用(ehcache)
- 基于注解形式的hibernate二级缓存的使用(ehcache)
- Spring学习(六)spring整合注解形式的hibernate
- JPA/Hibernate注解的主键策略
- JPA hibernate 基于注解的级联
- hibernate的JPA注解和hbm
- 利用hibernate注解解决jpa无法级联删除
- hibernate注解形式的树状结构设计
- springcloud启动报错LoggerFactory is not a Logback LoggerContext but Logback...
- python
- nodejs-websocket 实现单聊和群聊
- 一类有依赖的树形DP
- 如何更好地使用EventBus
- Hibernate中的JPA写法(利用注解的形式)
- Java锁优化
- [C]成员运算符"."和间接成员运算符"->"浅析
- js统计html中标签出现次数最多的标签
- zookeeper搭建环境配置
- 如何查看80端口被占用?
- Deep learning: prevent overfitting && speed up training
- hdu 6161--Big binary tree(思维--压缩空间)
- 使用MappedByteBuffer读取大文件(1G以上)和释放MappedByteBuffer的资源