


Java – Entitätsregeln, Objektstatus, Cache, Transaktionen, Batch-Abfrage und Kundenlistenanzeige
1. Entitätsregeln im Ruhezustand
Hinweise zur Erstellung von Entitätsklassen
1. Persistenz Die Klasse bietet Parameterlose Konstruktion
2. Mitgliedsvariablen sind privat und bieten öffentlichen Zugriff auf Get/Set-Methoden. Attribute sind erforderlich
3. Für Attribute in persistenten Klassen sollten so oft wie möglich Wrapper-Typen verwendet werden
4. Die Persistenzklasse muss oid entsprechend der Primärschlüsselspalte in der Datenbank bereitstellen
5. Verwenden Sie nicht final, um die Klasse zu ändern
Primärschlüsseltyp
Natürlicher Primärschlüssel (selten)
Wenn es eine Geschäftsspalte in der Tabelle gibt, die die Spalte erfüllt, haben muss und nicht wiederholt werden darf kann als Primärschlüssel verwendet werden.
Ersatz-Primärschlüssel (gemeinsam)
Wenn es in der Tabelle keine Geschäftsspalte gibt, die die Merkmale erfüllt, haben muss und nicht wiederholt, erstellen Sie eine Spalte ohne geschäftliche Bedeutung als Primärschlüssel
Strategie zur Primärschlüsselgenerierung
Surrogate Primärschlüssel:
Identität: Primärschlüssel-Autoinkrement Der Primärschlüsselwert wird von der Datenbank verwaltet. Bei der Eingabe der
-Sequenz ist es nicht erforderlich, die Primärschlüsselgenerierungsstrategie in Oracle anzugeben .
Inkrementieren (Verständnis): Der Primärschlüssel wird von hibernate automatisch inkrementiert. Vor jeder Einfügung wird der maximale ID-Wert in der Tabelle als neuer Primärschlüsselwert verwendet gleichzeitig wird es Probleme mit der Abfrage geben) Wird während der Entwicklung nicht verwendet
native:hilo+sequence+identity Automatisch eine von drei Strategien auswählen
uuid: Generieren Sie eine zufällige Zeichenfolge als Primärschlüssel. Der Primärschlüsseltyp muss vom Typ
2. Objektstatus im Ruhezustand
Das Objekt ist in drei Zustände unterteilt
//测试对象的三种状态public class Demo { @Test//查看三种状态public void fun1(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作Customer c = new Customer(); // 没有id, 没有与session关联 => 瞬时状态 c.setCust_name("联想"); // 瞬时状态 session.save(c); // 持久化状态, 有id,有关联 //4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } @Test//三种状态特点//save方法: 其实不能理解成保存.理解成将瞬时状态转换成持久状态的方法//主键自增 : 执行save方法时,为了将对象转换为持久化状态.必须生成id值.所以需要执行insert语句生成.//increment: 执行save方法,为了生成id.会执行查询id最大值的sql语句.public void fun2(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作Customer c = new Customer(); // 没有id, 没有与session关联 => 瞬时状态 c.setCust_name("联想"); // 瞬时状态 session.save(c); // 持久化状态, 有id,有关联 //4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } @Test//三种状态特点// 持久化状态特点: 持久化状态对象的任何变化都会自动同步到数据库中.public void fun3(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作 Customer c = session.get(Customer.class, 1l);//持久化状态对象 c.setCust_name("微软公司"); //4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } }
Übergangsdiagramm der drei Zustände
3. Ruhezustand erweitert – Cache der ersten Ebene
Caching: Verbesserung der Effizienz Der Cache der ersten Ebene im Ruhezustand soll auch die Effizienz des Betriebs der Datenbank verbessern 🎜>Mittel zur Effizienzsteigerung 1: Abfrageeffizienz verbessern
Mittel zur Effizienzsteigerung 2: unnötiges Senden reduzieren Änderungsanweisungen
Wissenspunkt: So legen Sie den Isolationsgrad der Datenbank im Ruhezustand fest
<!-- 指定hibernate操作数据库时的隔离级别 #hibernate.connection.isolation 1|2|4|8 0001 1 读未提交 0010 2 读已提交 0100 4 可重复读 1000 8 串行化 --> <property name="hibernate.connection.isolation">4</property>
Öffnen Sie die Transaktion, bevor das Geschäft beginnt, und bestätigen Sie die Transaktion, nachdem das Geschäft abgeschlossen ist Während der Ausführung tritt eine Ausnahme auf.
Das Sitzungsobjekt ist erforderlich, um die Datenbank auf der Dao-Ebene zu steuern. Das Sitzungsobjekt wird ausgeführt. Wir müssen sicherstellen, dass die Dao-Schicht und die Service-Schicht dasselbe Sitzungsobjekt verwenden. Im Ruhezustand hat der Ruhezustand das Problem der Verwendung derselben Sitzung für uns gelöst. Unsere Entwickler müssen nur sf.getCurrentSession( aufrufen. )-Methode kann das an den aktuellen Thread gebundene Sitzungsobjekt abrufen Hinweis 1: Der Aufruf der getCurrentSession-Methode muss mit einem Konfigurationsabschnitt in der Hauptkonfiguration übereinstimmen<!-- 指定session与当前线程绑定 --> <property name="hibernate.current_session_context_class">thread</property>
Im CRM-Projekt:
Serviceschicht
public void save(Customer c) { Session session = HibernateUtils.getCurrentSession();//打开事务Transaction tx = session.beginTransaction();//调用Dao保存客户try { customerDao .save(c); } catch (Exception e) { e.printStackTrace(); tx.rollback(); }//关闭事务 tx.commit(); }
public void save(Customer c) {//1 获得sessionSession session = HibernateUtils.getCurrentSession();//3 执行保存 session.save(c); }
5. Batch-Abfrage im Ruhezustand (Übersicht)
HQL-Abfrage-Ruhezustand-Abfragesprache (Abfrage mit mehreren Tabellen, wird jedoch verwendet, wenn sie nicht kompliziert ist)
Hibernate exklusive Abfragesprache, eine objektorientierte Abfragesprache
//测试HQL语句public class Demo { @Test//基本查询public void fun1(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1> 书写HQL语句// String hql = " from cn.itheima.domain.Customer ";String hql = " from Customer "; // 查询所有Customer对象//2> 根据HQL语句创建查询对象Query query = session.createQuery(hql);//3> 根据查询对象获得查询结果List<Customer> list = query.list(); // 返回list结果//query.uniqueResult();//接收唯一的查询结果 System.out.println(list);//-------------------------------------------//4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } @Test//条件查询//HQL语句中,不可能出现任何数据库相关的信息的public void fun2(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1> 书写HQL语句String hql = " from Customer where cust_id = 1 "; // 查询所有Customer对象//2> 根据HQL语句创建查询对象Query query = session.createQuery(hql);//3> 根据查询对象获得查询结果Customer c = (Customer) query.uniqueResult(); System.out.println(c);//-------------------------------------------//4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } @Test//条件查询//问号占位符public void fun3(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1> 书写HQL语句String hql = " from Customer where cust_id = ? "; // 查询所有Customer对象//2> 根据HQL语句创建查询对象Query query = session.createQuery(hql);//设置参数//query.setLong(0, 1l);query.setParameter(0, 1l);//3> 根据查询对象获得查询结果Customer c = (Customer) query.uniqueResult(); System.out.println(c);//-------------------------------------------//4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } @Test//条件查询//命名占位符public void fun4(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1> 书写HQL语句String hql = " from Customer where cust_id = :cust_id "; // 查询所有Customer对象//2> 根据HQL语句创建查询对象Query query = session.createQuery(hql);//设置参数query.setParameter("cust_id", 1l);//3> 根据查询对象获得查询结果Customer c = (Customer) query.uniqueResult(); System.out.println(c);//-------------------------------------------//4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } @Test//分页查询public void fun5(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1> 书写HQL语句String hql = " from Customer "; // 查询所有Customer对象//2> 根据HQL语句创建查询对象Query query = session.createQuery(hql);//设置分页信息 limit ?,?query.setFirstResult(1); query.setMaxResults(1);//3> 根据查询对象获得查询结果List<Customer> list = query.list(); System.out.println(list);//-------------------------------------------//4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } }
Kriterienabfrage (einzelne Tabelle). Bedingungsabfrage)
Hibernates eigene anweisungsfreie objektorientierte Abfrage
//测试Criteria查询public class Demo { @Test//基本查询public void fun1(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//------------------------------------------- //查询所有的Customer对象Criteria criteria = session.createCriteria(Customer.class); List<Customer> list = criteria.list(); System.out.println(list); // Customer c = (Customer) criteria.uniqueResult(); //-------------------------------------------//4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } @Test//条件查询//HQL语句中,不可能出现任何数据库相关的信息的// > gt// >= ge// < lt// <= le// == eq// != ne// in in// between and between// like like// is not null isNotNull// is null isNull// or or// and andpublic void fun2(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//创建criteria查询对象Criteria criteria = session.createCriteria(Customer.class);//添加查询参数 => 查询cust_id为1的Customer对象criteria.add(Restrictions.eq("cust_id", 1l));//执行查询获得结果Customer c = (Customer) criteria.uniqueResult(); System.out.println(c);//-------------------------------------------//4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } @Test//分页查询public void fun3(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//创建criteria查询对象Criteria criteria = session.createCriteria(Customer.class);//设置分页信息 limit ?,?criteria.setFirstResult(1); criteria.setMaxResults(2);//执行查询List<Customer> list = criteria.list(); System.out.println(list);//-------------------------------------------//4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } @Test//查询总记录数public void fun4(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//创建criteria查询对象Criteria criteria = session.createCriteria(Customer.class);//设置查询的聚合函数 => 总行数 criteria.setProjection(Projections.rowCount());//执行查询Long count = (Long) criteria.uniqueResult(); System.out.println(count);//-------------------------------------------//4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } }
Native SQL-Abfrage (komplex Geschäftsabfrage)
五、练习:客户列表
案例比较简单,可以按照上面笔记的知识点完成
servlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1 调用Service查询所有客户List<Customer> list = cs.getAll();//2 将客户列表放入request域request.setAttribute("list", list);//3 转发到list.jsp显示request.getRequestDispatcher("/jsp/customer/list.jsp").forward(request, response); }
service:
public List<Customer> getAll() { Session session = HibernateUtils.getCurrentSession();//打开事务Transaction tx = session.beginTransaction(); List<Customer> list = customerDao.getAll(); //关闭事务 tx.commit();return list; }
dao:
public List<Customer> getAll() {//1 获得sessionSession session = HibernateUtils.getCurrentSession();//2 创建Criteria对象Criteria c = session.createCriteria(Customer.class);return c.list(); }
Das obige ist der detaillierte Inhalt vonJava – Entitätsregeln, Objektstatus, Cache, Transaktionen, Batch-Abfrage und Kundenlistenanzeige. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Keine Notwendigkeit mehr für Pip? Kommen Sie und lernen Sie, wie Sie Pip effektiv deinstallieren! Einführung: pip ist eines der Paketverwaltungstools von Python, mit dem Python-Pakete einfach installiert, aktualisiert und deinstalliert werden können. Manchmal müssen wir jedoch pip möglicherweise deinstallieren, vielleicht weil wir ein anderes Paketverwaltungstool verwenden möchten oder weil wir die Python-Umgebung vollständig löschen müssen. In diesem Artikel wird erläutert, wie Sie Pip effizient deinstallieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Methoden zum Deinstallieren von Pip Im Folgenden werden zwei gängige Methoden zum Deinstallieren von Pip vorgestellt.

Um mehr über die Matplotlib-Farbtabelle zu erfahren, benötigen Sie spezifische Codebeispiele. 1. Einführung Matplotlib ist eine leistungsstarke Python-Zeichenbibliothek. Sie bietet einen umfangreichen Satz an Zeichenfunktionen und -werkzeugen, mit denen verschiedene Arten von Diagrammen erstellt werden können. Die Farbkarte (Colormap) ist ein wichtiges Konzept in Matplotlib, das das Farbschema des Diagramms bestimmt. Eine eingehende Untersuchung der Matplotlib-Farbtabelle wird uns helfen, die Zeichenfunktionen von Matplotlib besser zu beherrschen und das Zeichnen komfortabler zu gestalten.

Der Reiz des Erlernens der C-Sprache: Das Potenzial von Programmierern freisetzen Mit der kontinuierlichen Weiterentwicklung der Technologie ist die Computerprogrammierung zu einem Bereich geworden, der viel Aufmerksamkeit erregt hat. Unter vielen Programmiersprachen war die Sprache C schon immer bei Programmierern beliebt. Seine Einfachheit, Effizienz und breite Anwendung machen das Erlernen der C-Sprache für viele Menschen zum ersten Schritt, um in den Bereich der Programmierung einzusteigen. In diesem Artikel geht es um den Reiz des Erlernens der C-Sprache und darum, wie man das Potenzial von Programmierern durch das Erlernen der C-Sprache freisetzt. Der Reiz des Erlernens der C-Sprache liegt zunächst einmal in ihrer Einfachheit. Im Vergleich zu anderen Programmiersprachen C-Sprache

Lernen Sie Pygame von Grund auf: Komplettes Installations- und Konfigurations-Tutorial, spezifische Codebeispiele erforderlich. Einführung: Pygame ist eine Open-Source-Spieleentwicklungsbibliothek, die mit der Programmiersprache Python entwickelt wurde. Sie bietet eine Fülle von Funktionen und Tools, mit denen Entwickler problemlos eine Vielzahl von Typen erstellen können des Spiels. Dieser Artikel hilft Ihnen, Pygame von Grund auf zu erlernen und bietet ein vollständiges Installations- und Konfigurations-Tutorial sowie spezifische Codebeispiele, um Ihnen einen schnellen Einstieg zu erleichtern. Teil eins: Python und Pygame installieren Stellen Sie zunächst sicher, dass Sie dies getan haben

Beim Bearbeiten von Textinhalten in Word müssen Sie manchmal Formelsymbole eingeben. Manche Leute wissen nicht, wie man die Stammzahl in Word eingibt, also habe ich den Redakteur gebeten, mit meinen Freunden ein Tutorial zur Eingabe der Stammzahl in Word zu teilen. Ich hoffe, es hilft meinen Freunden. Öffnen Sie zunächst die Word-Software auf Ihrem Computer, öffnen Sie dann die Datei, die Sie bearbeiten möchten, und bewegen Sie den Cursor an die Stelle, an der Sie das Stammzeichen einfügen müssen, siehe Beispielbild unten. 2. Wählen Sie [Einfügen] und dann im Symbol [Formel]. Wie im roten Kreis im Bild unten gezeigt: 3. Wählen Sie dann unten [Neue Formel einfügen]. Wie im roten Kreis im Bild unten gezeigt: 4. Wählen Sie [Radikal] und dann das entsprechende Radikal. Wie im roten Kreis im Bild unten gezeigt:

In C/C++ gelten folgende Zeigervergleichsregeln: Zeiger, die auf dasselbe Objekt zeigen, sind gleich. Zeiger auf verschiedene Objekte sind nicht gleich. Ausnahme: Zeiger auf Nulladressen sind gleich.

Titel: Lernen Sie die Hauptfunktionen der Go-Sprache von Grund auf. Als einfache und effiziente Programmiersprache wird die Go-Sprache von Entwicklern bevorzugt. In der Go-Sprache ist die Hauptfunktion eine Einstiegsfunktion, und jedes Go-Programm muss die Hauptfunktion als Einstiegspunkt des Programms enthalten. In diesem Artikel wird erläutert, wie Sie die Hauptfunktion der Go-Sprache von Grund auf erlernen, und es werden spezifische Codebeispiele bereitgestellt. 1. Zuerst müssen wir die Go-Sprachentwicklungsumgebung installieren. Sie können zur offiziellen Website (https://golang.org) gehen

Was ist JPA? Wie unterscheidet es sich von JDBC? JPA (JavaPersistence API) ist eine Standardschnittstelle für objektrelationales Mapping (ORM), die es Java-Entwicklern ermöglicht, vertraute Java-Objekte zum Betreiben von Datenbanken zu verwenden, ohne SQL-Abfragen direkt in die Datenbank schreiben zu müssen. JDBC (JavaDatabaseConnectivity) ist die Standard-API von Java für die Verbindung mit Datenbanken. Sie erfordert, dass Entwickler SQL-Anweisungen verwenden, um die Datenbank zu betreiben. JPA kapselt JDBC, bietet eine bequemere und übergeordnete API für die objektrelationale Zuordnung und vereinfacht Datenzugriffsvorgänge. Was ist in JPA eine Entität? juristische Person
