sssdj:SpringMVC + Spring + SpringDataJpa-> 如今比較流行的一種設計(Spring全家桶)java
要集成三大框架(Spring+SpringMVC+SpringDataJpa)mysql
o(對象,java面向對象) r(關係,關係型數據庫) m(映射)sql
基本項目搭建數據庫
你們也能夠手動建立框架
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <!-- 我們這個配置是要鏈接數據庫的(jpa支持我們鏈接多個數據庫) persistence-unit:持久化單元(可能有多個,每個對應一個數據庫) name:取個名稱(隨便取) transaction(事務,同生共死)-type(類型) RESOURCE_LOCAL:本地的事務 JTA: 分佈式系統要使用的事務 基本的數據庫鏈接配置(四大金剛) properties:屬性(全部屬性均可以在下面的文件中找到) resources\源碼包\hibernate-release-4.3.8.Final\project\etc\hibernate.properties --> <persistence-unit name="cn.itsource.jpa" transaction-type="RESOURCE_LOCAL"> <properties> <!--鏈接數據庫的四個基本屬性--> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.url" value="jdbc:mysql:///jpa" /> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.password" value="root" /> <!-- 配置方言(數據庫兼容):你要操做的是什麼數據庫,根據不一樣的方言拼接不一樣的SQL InnoDB:支持事務,支持外鍵 MyISAM:不支持事務,不支持外鍵(屬性高) --> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <!--配置建表策略(自動化幫咱們建立相應的表)--> <property name="hibernate.hbm2ddl.auto" value="create" /> <!--能夠看到SQL的展現--> <property name="hibernate.show_sql" value="true" /> <!--能夠看到SQL的展現(漂亮一點)--> <!--<property name="hibernate.format_sql" value="true" />--> </properties> </persistence-unit> </persistence>
//告訴JPA:這個類是要作實體化的 /** * @Entity:我是一個實體類,JPA快來管我 * @Table(name = "t_employee"):我和哪些張是有關係的 * 若是不寫,他就認爲你有一個表叫:Employee */ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "t_employee") public class Employee { /** * @Id:表明我是一個主鍵 * @GeneratedValue:咱們認爲主鍵是自增的 */ @Id @GeneratedValue private Long id; private String name; private String password; //getter,setter省略 }
/** * 在JPA中,因此增刪改都須要咱們去提交事務 */ //拿到EntityManagerFactory(傳入持久化單元的名稱) EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("cn.itsource.jpa"); //拿出到實體管理對象 EntityManager entityManager = entityManagerFactory.createEntityManager(); //拿出一個事務 EntityManager裏面有一個事務(只能拿到一個事務) //開始事務 entityManager.getTransaction().begin(); //persist:持久化(保存一條數據) entityManager.persist(employee); //提交事務 entityManager.getTransaction().commit(); //關閉資源 entityManager.close(); entityManagerFactory.close();
先完成了工具類dom
//幫我們拿到一個EntityManager對象 public class JpaUtil { private static EntityManagerFactory factory; //加載時運行,且只運行一次 static { try { factory = Persistence.createEntityManagerFactory("cn.itsource.jpa"); } catch (Exception e) { e.printStackTrace(); } } //直接拿到EntityManager對象 public static EntityManager getEntityManager(){ return factory.createEntityManager(); } }
增刪改須要添加事務分佈式
entityManager.persist(employee);
ide
entityManager.merge(employee);
工具
先查詢,再判斷,最後刪除測試
Employee employee = entityManager.find(Employee.class, id); if(employee!=null) { //這裏要求我們傳一個對象進去 entityManager.remove(employee); }
傳類型與id
entityManager.find(Employee.class,id);
query對象(entityManager建立) jpql:面向對象的查詢語言
entityManager = JpaUtil.getEntityManager(); //使用查詢對象,寫JPQL:像SQL,可是更加簡單(面向對象) //1.準備JPQL 不要寫* ,from後面是一個類 //String jpql = "select o from cn.itsource.jpa.domain.Employee o"; // String jpql = "select o from Employee o"; String jpql = "from Employee"; //2.根據JPQL拿到查詢對象 Query query = entityManager.createQuery(jpql); //3.返回全部數據 return query.getResultList();
先刪除-> 再建立 -> 用完(EntityManagerFactory關閉)再刪(測試)
先刪除-> 再建立(測試)
驗證功能(只驗證domain中寫好的屬性)