querydsl是一個采用api代替拼湊字符串來構造查詢語句,可跟 hibernate 和 jpa 等框架結合使用。網上很多教程都是結合spring jpa框架下使用的教程,本文介紹的是非spring環境下querydsl jpa整合使用。
1、使用eclipse生成jpa實體類,idea也能生成同樣jpa實體類。
鼠標右鍵打開jpa tools工具:
創建數據庫鏈接:
選擇那些數據庫表需要生成jpa實體類:
關聯表生成:
設置實體生成屬性:
單個實體屬性修改
生成的jpa實體類adminlog.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
package com.test.db.entity; import java.io.serializable; import javax.persistence.*; import java.util.date; /** * the persistent class for the admin_log database table. * */ @entity @table (name= "admin_log" ) @namedquery (name= "adminlog.findall" , query= "select a from adminlog a" ) public class adminlog implements serializable { private static final long serialversionuid = 1l; @id @generatedvalue (strategy=generationtype.auto) @column (unique= true , nullable= false ) private string id; @column (name= "action_id" , length= 20 ) private string actionid; @column (name= "client_ip" , length= 15 ) private string clientip; @column (name= "controller_id" , length= 20 ) private string controllerid; @temporal (temporaltype.timestamp) @column (name= "create_date" ) private date createdate; @column (name= "create_user" , length= 50 ) private string createuser; @column (name= "func_name" , length= 50 ) private string funcname; @column (name= "module_name" , length= 50 ) private string modulename; @column (name= "right_name" , length= 50 ) private string rightname; @column (length= 200 ) private string url; public adminlog() { } public string getid() { return this .id; } public void setid(string id) { this .id = id; } public string getactionid() { return this .actionid; } public void setactionid(string actionid) { this .actionid = actionid; } public string getclientip() { return this .clientip; } public void setclientip(string clientip) { this .clientip = clientip; } public string getcontrollerid() { return this .controllerid; } public void setcontrollerid(string controllerid) { this .controllerid = controllerid; } public date getcreatedate() { return this .createdate; } public void setcreatedate(date createdate) { this .createdate = createdate; } public string getcreateuser() { return this .createuser; } public void setcreateuser(string createuser) { this .createuser = createuser; } public string getfuncname() { return this .funcname; } public void setfuncname(string funcname) { this .funcname = funcname; } public string getmodulename() { return this .modulename; } public void setmodulename(string modulename) { this .modulename = modulename; } public string getrightname() { return this .rightname; } public void setrightname(string rightname) { this .rightname = rightname; } public string geturl() { return this .url; } public void seturl(string url) { this .url = url; } } |
2、生成querydsl查詢類
maven pom.xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
<project xmlns= "http://maven.apache.org/pom/4.0.0" xmlns:xsi= "http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation= "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" > <modelversion> 4.0 . 0 </modelversion> <groupid>com.test.db</groupid> <artifactid>dbtest</artifactid> <packaging>jar</packaging> <version> 1.0 -snapshot</version> <name>dbtest</name> <url>http: //maven.apache.org</url> <properties> <querydsl.version> 4.2 . 1 </querydsl.version> </properties> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version> 3.8 . 1 </version> <scope>test</scope> </dependency> <dependency> <groupid>com.querydsl</groupid> <artifactid>querydsl-sql</artifactid> <version>${querydsl.version}</version> </dependency> <dependency> <groupid>com.querydsl</groupid> <artifactid>querydsl-apt</artifactid> <version>${querydsl.version}</version> </dependency> <dependency> <groupid>com.querydsl</groupid> <artifactid>querydsl-jpa</artifactid> <version>${querydsl.version}</version> </dependency> <dependency> <groupid>com.querydsl</groupid> <artifactid>querydsl-sql-codegen</artifactid> <version>${querydsl.version}</version> <scope>provided</scope> </dependency> <dependency> <groupid>org.eclipse.persistence</groupid> <artifactid>org.eclipse.persistence.jpa</artifactid> <version> 2.6 . 0 </version> </dependency> <dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-log4j12</artifactid> <version> 1.6 . 1 </version> </dependency> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version> 8.0 . 11 </version> </dependency> <dependency> <groupid>com.alibaba</groupid> <artifactid>druid</artifactid> <version> 1.1 . 10 </version> </dependency> <dependency> <groupid>org.hibernate</groupid> <artifactid>hibernate-entitymanager</artifactid> <version> 5.4 . 0 . final </version> </dependency> </dependencies> <build> <plugins> <!-- 生成jpa實體插件 --> <plugin> <groupid>com.querydsl</groupid> <artifactid>querydsl-maven-plugin</artifactid> <version>${querydsl.version}</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>jpa-export</goal> </goals> <configuration> <targetfolder>${project.basedir}/target/generated-sources/java</targetfolder> <packages>com.test.db.entity</packages> </configuration> </execution> </executions> </plugin> <!-- 生成jpa實體插件 --> <!-- <plugin> <groupid>com.mysema.maven</groupid> <artifactid>apt-maven-plugin</artifactid> <version> 1.1 . 3 </version> <executions> <execution> <goals> <goal>process</goal> </goals> <configuration> <outputdirectory>target/generated-sources/java</outputdirectory> <processor>com.querydsl.apt.jpa.jpaannotationprocessor</processor> </configuration> </execution> </executions> </plugin> --> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version> 3.1 </version> <configuration> <source> 1.8 </source> <target> 1.8 </target> <encoding>utf- 8 </encoding> </configuration> </plugin> </plugins> </build> </project> |
執行命令mvn compile或mvn eclipse:eclipse生成jpa實體對應的querydsl查詢類
adminlog.java對應的querydsl對應查詢類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
package com.test.db.entity; import static com.querydsl.core.types.pathmetadatafactory.*; import com.querydsl.core.types.dsl.*; import com.querydsl.core.types.pathmetadata; import javax.annotation.generated; import com.querydsl.core.types.path; /** * qadminlog is a querydsl query type for adminlog */ @generated ( "com.querydsl.codegen.entityserializer" ) public class qadminlog extends entitypathbase<adminlog> { private static final long serialversionuid = 392071999l; public static final qadminlog adminlog = new qadminlog( "adminlog" ); public final stringpath actionid = createstring( "actionid" ); public final stringpath clientip = createstring( "clientip" ); public final stringpath controllerid = createstring( "controllerid" ); public final datetimepath<java.util.date> createdate = createdatetime( "createdate" , java.util.date. class ); public final stringpath createuser = createstring( "createuser" ); public final stringpath funcname = createstring( "funcname" ); public final stringpath id = createstring( "id" ); public final stringpath modulename = createstring( "modulename" ); public final stringpath rightname = createstring( "rightname" ); public final stringpath url = createstring( "url" ); public qadminlog(string variable) { super (adminlog. class , forvariable(variable)); } public qadminlog(path<? extends adminlog> path) { super (path.gettype(), path.getmetadata()); } public qadminlog(pathmetadata metadata) { super (adminlog. class , metadata); } } |
3、查詢例子
jpa持久化meta-inf\persistence.xml配置文件,entitymanagerfactory創建實例時,需要讀取該配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<?xml version= "1.0" encoding= "utf-8" ?> <persistence 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" version= "2.0" > <persistence-unit name= "jpa" transaction-type= "resource_local" > <provider>org.hibernate.ejb.hibernatepersistence</provider> <properties> <!-- .mysqlinnodbdialect --> <property name= "hibernate.dialect" value= "org.hibernate.dialect.mysql8dialect" /> <property name= "javax.persistence.jdbc.driver" value= "com.mysql.cj.jdbc.driver" /> <property name= "javax.persistence.jdbc.url" value= "jdbc:mysql://127.0.0.1:3306/yiiboot?useunicode=true&characterencoding=utf-8&servertimezone=asia/shanghai&usessl=true" /> <property name= "javax.persistence.jdbc.user" value= "root" /> <property name= "javax.persistence.jdbc.password" value= "123" /> <property name= "connection.provider_class" value= "com.alibaba.druid.support.hibernate.druidconnectionprovider" /> <!-- 配置初始化大小、最小、最大 --> <property name= "initialsize" value= "1" /> <property name= "minidle" value= "1" /> <property name= "maxactive" value= "20" /> <!-- 配置獲取連接等待超時的時間 --> <property name= "maxwait" value= "60000" /> <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 --> <property name= "timebetweenevictionrunsmillis" value= "60000" /> <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 --> <property name= "minevictableidletimemillis" value= "300000" /> </properties> </persistence-unit> </persistence> |
測試代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package com.test.db.main; import java.util.list; import javax.persistence.entitymanagerfactory; import javax.persistence.persistence; import com.querydsl.jpa.impl.jpaqueryfactory; import com.test.db.entity.adminmodule; import com.test.db.entity.qadminmodule; public class jpatest { public static void main(string[] args) throws exception{ string persistenceunitname = "jpa" ; entitymanagerfactory entitymanagerfactory = persistence.createentitymanagerfactory(persistenceunitname); jpaqueryfactory queryfactory = new jpaqueryfactory(entitymanagerfactory.createentitymanager()); qadminmodule adminmodule = qadminmodule.adminmodule; list<adminmodule> list = queryfactory.selectfrom(adminmodule).fetch(); list.foreach(module->{ system.out.println(module.getid() + "," + module.getdisplaylabel() + "," + module.getcreatedate()); }); } } |
querydsl官方文檔:http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html#jpa_integration
java類庫:https://www.21doc.net/java/awesomejava#database
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://my.oschina.net/penngo/blog/2998232