diff --git a/Chapter3-3-1/pom.xml b/Chapter3-3-1/pom.xml
new file mode 100644
index 0000000..53e94b9
--- /dev/null
+++ b/Chapter3-3-1/pom.xml
@@ -0,0 +1,60 @@
+
+
+ 4.0.0
+
+ com.didispace
+ Chapter3-3-1
+ 1.0.0
+ jar
+
+ Chapter3-3-1
+ Spring Boot project
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.3.2.RELEASE
+
+
+
+
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ mysql
+ mysql-connector-java
+ 5.1.21
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
\ No newline at end of file
diff --git a/Chapter3-3-1/src/main/java/com/didispace/Application.java b/Chapter3-3-1/src/main/java/com/didispace/Application.java
new file mode 100644
index 0000000..2a14b75
--- /dev/null
+++ b/Chapter3-3-1/src/main/java/com/didispace/Application.java
@@ -0,0 +1,13 @@
+package com.didispace;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/Chapter3-3-1/src/main/java/com/didispace/domain/User.java b/Chapter3-3-1/src/main/java/com/didispace/domain/User.java
new file mode 100644
index 0000000..11e13ac
--- /dev/null
+++ b/Chapter3-3-1/src/main/java/com/didispace/domain/User.java
@@ -0,0 +1,58 @@
+package com.didispace.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author 程序猿DD
+ * @version 1.0.0
+ * @date 16/3/21 下午3:35.
+ * @blog http://blog.didispace.com
+ */
+@Entity
+public class User {
+
+ @Id
+ @GeneratedValue
+ private Long id;
+
+ @Column(nullable = false, length = 5)
+ private String name;
+
+ @Column(nullable = false)
+ private Integer age;
+
+ public User(){}
+
+ public User(String name, Integer age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Integer getAge() {
+ return age;
+ }
+
+ public void setAge(Integer age) {
+ this.age = age;
+ }
+
+}
diff --git a/Chapter3-3-1/src/main/java/com/didispace/domain/UserRepository.java b/Chapter3-3-1/src/main/java/com/didispace/domain/UserRepository.java
new file mode 100644
index 0000000..6bc9442
--- /dev/null
+++ b/Chapter3-3-1/src/main/java/com/didispace/domain/UserRepository.java
@@ -0,0 +1,24 @@
+package com.didispace.domain;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
+
+/**
+ * @author 程序猿DD
+ * @version 1.0.0
+ * @date 16/3/23 下午2:34.
+ * @blog http://blog.didispace.com
+ */
+public interface UserRepository extends JpaRepository {
+
+ User findByName(String name);
+
+ User findByNameAndAge(String name, Integer age);
+
+ @Query("from User u where u.name=:name")
+ User findUser(@Param("name") String name);
+
+
+}
diff --git a/Chapter3-3-1/src/main/java/com/didispace/service/UserService.java b/Chapter3-3-1/src/main/java/com/didispace/service/UserService.java
new file mode 100644
index 0000000..0a18e62
--- /dev/null
+++ b/Chapter3-3-1/src/main/java/com/didispace/service/UserService.java
@@ -0,0 +1,15 @@
+package com.didispace.service;
+
+import com.didispace.domain.User;
+
+import javax.transaction.Transactional;
+
+/**
+ * Created by Administrator on 2016/5/27.
+ */
+public interface UserService {
+
+ @Transactional
+ User login(String name, String password);
+
+}
diff --git a/Chapter3-3-1/src/main/resources/application.properties b/Chapter3-3-1/src/main/resources/application.properties
new file mode 100644
index 0000000..aa6a7e6
--- /dev/null
+++ b/Chapter3-3-1/src/main/resources/application.properties
@@ -0,0 +1,6 @@
+spring.datasource.url=jdbc:mysql://localhost:3306/test
+spring.datasource.username=root
+spring.datasource.password=123456
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+
+spring.jpa.properties.hibernate.hbm2ddl.auto=create
\ No newline at end of file
diff --git a/Chapter3-3-1/src/test/java/com/didispace/ApplicationTests.java b/Chapter3-3-1/src/test/java/com/didispace/ApplicationTests.java
new file mode 100644
index 0000000..8f6b72b
--- /dev/null
+++ b/Chapter3-3-1/src/test/java/com/didispace/ApplicationTests.java
@@ -0,0 +1,60 @@
+package com.didispace;
+
+import com.didispace.domain.User;
+import com.didispace.domain.UserRepository;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.test.annotation.Rollback;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import javax.transaction.Transactional;
+
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringApplicationConfiguration(Application.class)
+public class ApplicationTests {
+
+ @Autowired
+ private UserRepository userRepository;
+
+ @Test
+ @Transactional
+ public void test() throws Exception {
+
+ // 创建10条记录
+ userRepository.save(new User("AAA", 10));
+ userRepository.save(new User("BBB", 20));
+ userRepository.save(new User("CCC", 30));
+ userRepository.save(new User("DDD", 40));
+ userRepository.save(new User("EEE", 50));
+ userRepository.save(new User("FFF", 60));
+ userRepository.save(new User("GGG", 70));
+ userRepository.save(new User("HHHHHHHHH", 80));
+ userRepository.save(new User("III", 90));
+ userRepository.save(new User("JJJ", 100));
+
+ // 测试findAll, 查询所有记录
+ Assert.assertEquals(10, userRepository.findAll().size());
+
+ // 测试findByName, 查询姓名为FFF的User
+ Assert.assertEquals(60, userRepository.findByName("FFF").getAge().longValue());
+
+ // 测试findUser, 查询姓名为FFF的User
+ Assert.assertEquals(60, userRepository.findUser("FFF").getAge().longValue());
+
+ // 测试findByNameAndAge, 查询姓名为FFF并且年龄为60的User
+ Assert.assertEquals("FFF", userRepository.findByNameAndAge("FFF", 60).getName());
+
+ // 测试删除姓名为AAA的User
+ userRepository.delete(userRepository.findByName("AAA"));
+
+ // 测试findAll, 查询所有记录, 验证上面的删除是否成功
+ Assert.assertEquals(9, userRepository.findAll().size());
+
+ }
+
+
+}