README.md 10.0 KB
Newer Older
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
1

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
2
# MyBatis JPA Extra
M
MaxKey 已提交
3 4
**MyBatis JPA Extra**对MyBatis扩展JPA功能
   
M
MaxKey 已提交
5
1.基于JPA 2.1的注释**简化CUID操作**;
M
MaxKey 已提交
6 7 8 9
	
2.用Interceptor实现数据库**SELECT分页查询**;
	
3.提供mybatis-jpa-extra-spring-boot-starter,**简化SpringBoot集成**;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
10

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
11
## 1、JavaBean注释简单
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
12

M
MaxKey 已提交
13
仅有6个注释
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
14
> * @Entity
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
15 16
> * @Table
> * @Column
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
17
> * @Id
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
18
> * @GeneratedValue
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
19 20
> * @Transient 

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
21

M
MaxKey 已提交
22
@GeneratedValue有4中策略 
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
23 24

 1. **AUTO**
M
readme  
MaxKey 已提交
25 26 27
	
	snowflakeid
	
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
28 29 30 31 32 33 34 35 36 37 38 39 40 41
    uuid

    uuid.hex

    serial

 2. **SEQUENCE**
 
    generator值为数据库序列名

 3. **IDENTITY**
 
    generator无,根据数据库自动生成方式

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
42

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
43
```java
M
readme  
MaxKey 已提交
44
package org.apache.mybatis.jpa.test.entity;
MaxKey单点登录官方's avatar
README  
MaxKey单点登录官方 已提交
45

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
46 47
import java.io.Serializable;
import javax.persistence.Column;
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
48
import javax.persistence.Entity;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
49 50 51 52
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
M
readme  
MaxKey 已提交
53 54
import org.apache.mybatis.jpa.persistence.JpaBaseEntity;

MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
55
@Entity
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
56
@Table(name = "STUDENTS")  
M
readme  
MaxKey 已提交
57
public class Students extends JpaBaseEntity implements Serializable{
MaxKey单点登录官方's avatar
README  
MaxKey单点登录官方 已提交
58 59 60 61 62
	/**
	 * 
	 */
	private static final long serialVersionUID = -6928570405840778151L;
	
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
63 64
	@Id
	@Column
M
readme  
MaxKey 已提交
65
	@GeneratedValue(strategy=GenerationType.AUTO,generator="snowflakeid")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
66
	//@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="SEQ_MYBATIS_STUD")
MaxKey单点登录官方's avatar
README  
MaxKey单点登录官方 已提交
67
	//@GeneratedValue(strategy=GenerationType.IDENTITY,generator="SEQ_MYBATIS_STUD")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
68 69 70 71 72 73 74 75 76 77 78 79 80 81
	private String id;
	@Column
	private String stdNo;
	@Column
	private String stdName;
	@Column
	private String stdGender;
	@Column
	private int stdAge;
	@Column
	private String stdMajor;
	@Column
	private String stdClass;
	
M
readme  
MaxKey 已提交
82 83 84 85
	@Column
	private byte[] images;
	
	
MaxKey单点登录官方's avatar
README  
MaxKey单点登录官方 已提交
86 87 88 89
	public Students() {
		super();
	}

M
readme  
MaxKey 已提交
90

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
91 92 93 94
	public String getStdNo() {
		return stdNo;
	}

M
readme  
MaxKey 已提交
95

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
96 97 98 99
	public void setStdNo(String stdNo) {
		this.stdNo = stdNo;
	}

M
readme  
MaxKey 已提交
100

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
101 102 103 104
	public String getStdName() {
		return stdName;
	}

M
readme  
MaxKey 已提交
105

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
106 107 108 109
	public void setStdName(String stdName) {
		this.stdName = stdName;
	}

M
readme  
MaxKey 已提交
110 111 112 113




MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
114 115 116 117
	public String getStdGender() {
		return stdGender;
	}

M
readme  
MaxKey 已提交
118

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
119 120 121 122
	public void setStdGender(String stdGender) {
		this.stdGender = stdGender;
	}

M
readme  
MaxKey 已提交
123

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
124 125 126 127
	public int getStdAge() {
		return stdAge;
	}

M
readme  
MaxKey 已提交
128

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
129 130 131 132
	public void setStdAge(int stdAge) {
		this.stdAge = stdAge;
	}

M
readme  
MaxKey 已提交
133

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
134 135 136 137
	public String getStdMajor() {
		return stdMajor;
	}

M
readme  
MaxKey 已提交
138

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
139 140 141 142
	public void setStdMajor(String stdMajor) {
		this.stdMajor = stdMajor;
	}

M
readme  
MaxKey 已提交
143

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
144 145 146 147
	public String getStdClass() {
		return stdClass;
	}

M
readme  
MaxKey 已提交
148

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
149 150 151 152
	public void setStdClass(String stdClass) {
		this.stdClass = stdClass;
	}

M
readme  
MaxKey 已提交
153

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
154 155 156 157
	public String getId() {
		return id;
	}

M
readme  
MaxKey 已提交
158

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
159 160 161 162
	public void setId(String id) {
		this.id = id;
	}

M
readme  
MaxKey 已提交
163 164 165 166 167 168 169 170 171 172

	public byte[] getImages() {
		return images;
	}


	public void setImages(byte[] images) {
		this.images = images;
	}

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
173 174
}

M
readme  
MaxKey 已提交
175

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
176 177
```

M
readme  
MaxKey 已提交
178
## 2、单表新增、修改、删除、查询、分页查询
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
179 180 181 182 183 184 185 186 187

```java
package org.apache.mybatis.jpa.test;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.mybatis.jpa.test.dao.service.StudentsService;
M
readme  
MaxKey 已提交
188
import org.apache.mybatis.jpa.test.entity.Students;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
189 190 191 192 193 194 195 196 197
import org.apache.mybatis.jpa.util.WebContext;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyBatisTestRunner {
M
readme  
MaxKey 已提交
198
	
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
199 200 201
	private static final Logger _logger = LoggerFactory.getLogger(MyBatisTestRunner.class);
	
	public static ApplicationContext context;
MaxKey单点登录官方's avatar
rm  
MaxKey单点登录官方 已提交
202
	public static StudentsService service;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
203
	
M
readme  
MaxKey 已提交
204
	
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
205 206 207 208
	@Test
	public void insert() throws Exception{
		_logger.info("insert...");
		Students student=new Students();
M
readme  
MaxKey 已提交
209
		//student.setId("10024");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
210 211 212 213 214 215
		student.setStdNo("10024");
		student.setStdGender("M");
		student.setStdName("司马昭");
		student.setStdAge(20);
		student.setStdMajor("政治");
		student.setStdClass("4");
MaxKey单点登录官方's avatar
rm  
MaxKey单点登录官方 已提交
216
		service.insert(student);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
217
		
M
readme  
MaxKey 已提交
218 219 220
		Thread.sleep(1000);
		_logger.info("insert id " + student.getId());
		//service.remove(student.getId());
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
221 222 223 224
		
	}
	
	
M
readme  
MaxKey 已提交
225 226 227
	@Test
	public void merge() throws Exception{
		_logger.info("merge...");
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
228
		Students student=new Students();
M
readme  
MaxKey 已提交
229
		//student.setId("10024");
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
230 231 232 233 234 235
		student.setStdNo("10024");
		student.setStdGender("M");
		student.setStdName("司马昭");
		student.setStdAge(20);
		student.setStdMajor("政治");
		student.setStdClass("4");
M
readme  
MaxKey 已提交
236
		service.merge(student);
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
237 238
		
		Thread.sleep(1000);
M
readme  
MaxKey 已提交
239 240
		_logger.info("insert id " + student.getId());
		//service.remove(student.getId());
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
241 242
		
	}
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
243
	
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
244 245 246
	@Test
	public void get() throws Exception{
		_logger.info("get...");
M
readme  
MaxKey 已提交
247
		Students student=service.get("317d5eda-927c-4871-a916-472a8062df23");
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
248 249 250
		
		System.out.println("Students "+student);
		 _logger.info("Students "+student);
M
readme  
MaxKey 已提交
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277
	}
	
	@Test
	public void update() throws Exception{
		_logger.info("get...");
		Students student=service.get("317d5eda-927c-4871-a916-472a8062df23");
		System.out.println("Students "+student);
		 _logger.info("Students "+student);
		 
		 _logger.info("update...");
		 student.setImages(null);
		 service.update(student);
		 _logger.info("updateed.");
		 
		 student.setImages("ssss".getBytes());
		 service.update(student);
		 _logger.info("updateed2.");
	}
	
	
	@Test
	public void find() throws Exception{
		_logger.info("find...");
		Students student=service.find(Students.class,"317d5eda-927c-4871-a916-472a8062df23");
		
		System.out.println("Students "+student);
		 _logger.info("Students "+student);	 
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
278 279

	}
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
280
	
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
281 282 283 284 285 286
	@Test
	public void remove() throws Exception{
		
		_logger.info("remove...");
		Students student=new Students();
		student.setId("921d3377-937a-4578-b1e2-92fb23b5e512");
M
readme  
MaxKey 已提交
287
		service.remove(student.getId());
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
288 289 290 291 292 293 294 295 296 297 298
		
	}
	
	@Test
	public void batchDelete() throws Exception{
		_logger.info("batchDelete...");
		List<String> idList=new ArrayList<String>();
		idList.add("8584804d-b5ac-45d2-9f91-4dd8e7a090a7");
		idList.add("ab7422e9-a91a-4840-9e59-9d911257c918");
		idList.add("12b6ceb8-573b-4f01-ad85-cfb24cfa007c");
		idList.add("dafd5ba4-d2e3-4656-bd42-178841e610fe");
M
readme  
MaxKey 已提交
299
		service.batchDelete(idList);
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
300
	}
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
301 302 303

	@Test
	public void queryPageResults() throws Exception{
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
304
		
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
305 306 307 308 309
		_logger.info("queryPageResults...");
		 Students student=new Students();
		 //student.setId("af04d610-6092-481e-9558-30bd63ef783c");
		 student.setStdGender("M");
		 //student.setStdMajor(政治");
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
310
		 student.setPageSize(10);
M
readme  
MaxKey 已提交
311
		 student.setPageNumber(1);
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
312
		 List<Students> allListStudents = 
M
readme  
MaxKey 已提交
313
				 service.queryPageResults(student).getRows();
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
314 315 316
		 for (Students s : allListStudents) {
			 _logger.info("Students "+s);
		 }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
317 318 319 320
	}
	
	@Test
	public void queryPageResultsByMapperId() throws Exception{
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
321

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
322 323 324 325
		_logger.info("queryPageResults by mapperId...");
		 Students student=new Students();
		 student.setStdGender("M");
		 //student.setStdMajor(政治");
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
326 327
		 student.setPageSize(10);
		 student.setPageNumber(2);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
328
		 
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
329
		 List<Students> allListStudents = 
M
readme  
MaxKey 已提交
330
				 service.queryPageResults("queryPageResults1",student).getRows();
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
331 332 333
		 for (Students s : allListStudents) {
			 _logger.info("Students "+s);
		 }
M
readme  
MaxKey 已提交
334
		 
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
335
	}
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
336 337
	
	
M
readme  
MaxKey 已提交
338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353
	
	@Test
	public void findAll() throws Exception{
		_logger.info("findAll...");
		List<Students> allListStudents =service.findAll();
		 for (Students s : allListStudents) {
			 _logger.info("Students "+s);
		 }
	}
	
	@Before
	public void initSpringContext(){
		if(context!=null) return;
		_logger.info("init Spring Context...");
		SimpleDateFormat sdf_ymdhms =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String startTime=sdf_ymdhms.format(new Date());
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
354

M
readme  
MaxKey 已提交
355 356 357 358 359 360 361 362 363
		try{
			MyBatisTestRunner runner=new MyBatisTestRunner();
			runner.init();
			
		}catch(Exception e){
			e.printStackTrace();
		}
		
		_logger.info("-- --Init Start at " + startTime+" , End at  "+sdf_ymdhms.format(new Date()));
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
364
	}
M
readme  
MaxKey 已提交
365 366 367 368 369 370 371 372 373 374 375 376
	
	//Initialization ApplicationContext for Project
	public void init(){
		
		_logger.info("Application dir "+System.getProperty("user.dir"));
		context = new ClassPathXmlApplicationContext(new String[] {"spring/applicationContext.xml"});
		
		WebContext.applicationContext=context;
		service =(StudentsService)WebContext.getBean("studentsService");
		
	}
	
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
377
}
M
readme  
MaxKey 已提交
378

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
379 380
```

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
381

M
MaxKey 已提交
382
## 3、映射文件配置
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
383

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427
```xml
<mapper namespace="org.apache.mybatis.jpa.test.dao.persistence.StudentsMapper" >
	<sql id="sql_condition">
		WHERE	1	=	1
    	<if test="id != null">
			AND	ID	=	'${id}'
		</if>
		<if test="stdName != null  and stdName != '' ">
			AND STDNAME like '%${stdName}%'
		</if>
		<if test="stdGender != null  and stdGender != '' ">
			AND	STDGENDER	=	#{stdGender}
		</if>
		<if test="stdMajor != null">
			<![CDATA[AND	STDMAJOR	= #{stdMajor}]]>
		</if>
	</sql>
	
    <select id="queryPageResults" parameterType="Students" resultType="Students">
    	SELECT 
    		ID		   ,
			STDNO      ,
			STDNAME    ,
			STDGENDER  ,
			STDAGE     ,
			STDMAJOR   ,
			STDCLASS 
    	FROM STUDENTS 
    	<include refid="sql_condition"/>
    </select>
 
     <select id="queryPageResults1" parameterType="Students" resultType="Students">
    	SELECT 
    		ID		   ,
			STDNO      ,
			STDNAME    ,
			STDGENDER  ,
			STDAGE     ,
			STDMAJOR   ,
			STDCLASS 
    	FROM STUDENTS 
    	<include refid="sql_condition"/>
    </select>
       
MaxKey单点登录官方's avatar
rm  
MaxKey单点登录官方 已提交
428
     <select id="queryBy" parameterType="Students" resultType="Students">
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447
    	SELECT 
    		ID		   ,
			STDNO      ,
			STDNAME    ,
			STDGENDER  ,
			STDAGE     ,
			STDMAJOR   ,
			STDCLASS 
    	FROM ROLES 
    	<include refid="sql_condition"/>
    </select>
  
    <delete id="delete" parameterType="Students" >
    	DELETE FROM STUDENTS WHERE ID=#{id}
    </delete>
    
```


M
MaxKey 已提交
448
##  4、SpringBoot配置
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
449

MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
450 451 452 453 454 455 456 457
```ini
#
spring.datasource.username=root
spring.datasource.password=maxkey
spring.datasource.url=jdbc:mysql://localhost/test?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

M
readme  
MaxKey 已提交
458 459 460
mybatis.dialect=mysql
mybatis.type-aliases-package=org.apache.mybatis.jpa.test.entity
mybatis.mapper-locations=classpath*:/org/apache/mybatis/jpa/test/dao/persistence/xml/${mybatis.dialect}/*.xml
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
461
mybatis.table-column-escape=true
M
readme  
MaxKey 已提交
462 463
mybatis.table-column-snowflake-datacenter-id=1
mybatis.table-column-snowflake-machine-id=1
MaxKey单点登录官方's avatar
v2.2  
MaxKey单点登录官方 已提交
464
#mybatis.table-column-escape-char=`
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
465
```
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
466

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
467

M
MaxKey 已提交
468 469 470 471 472 473
##  5、相关资源

[MyBatis网站][1]

[MyBatis GitHub源码][2]

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
474 475
  [1]: http://www.mybatis.org/mybatis-3/
  [2]: https://github.com/mybatis/mybatis-3/