find() {
+ return repository.findAll();
+ }
+
+ @Override
+ public Post save(Post post) {
+ return repository.save(post);
+ }
+
+ @Override
+ public Post update(Post post) {
+
+ Post one = repository.findOne(post.getPostId());
+
+ one.setTitle(post.getTitle());
+ one.setPostDate(post.getPostDate());
+
+ return one;
+
+ }
+
+ @Override
+ public Post delete(Post post) {
+
+ Post one = repository.findOne(post.getPostId());
+
+ repository.delete(one);
+
+ return one;
+ }
+
+ @Override
+ public Post findOne(int id) {
+ return repository.findOne(id);
+ }
+
+}
diff --git a/spring-data-example/src/main/java/net/aimeizi/spring/data/example/validation/EmpValidator.java b/spring-data-example/src/main/java/net/aimeizi/spring/data/example/validation/EmpValidator.java
new file mode 100644
index 0000000..1295d89
--- /dev/null
+++ b/spring-data-example/src/main/java/net/aimeizi/spring/data/example/validation/EmpValidator.java
@@ -0,0 +1,24 @@
+package net.aimeizi.spring.data.example.validation;
+
+import net.aimeizi.spring.data.example.entities.Emp;
+
+import org.springframework.stereotype.Component;
+import org.springframework.validation.Errors;
+import org.springframework.validation.ValidationUtils;
+import org.springframework.validation.Validator;
+
+@Component
+public class EmpValidator implements Validator {
+
+ @Override
+ public boolean supports(Class> clazz) {
+ return Emp.class.isAssignableFrom(clazz);
+ }
+
+ @Override
+ public void validate(Object target, Errors errors) {
+ ValidationUtils.rejectIfEmptyOrWhitespace(errors, "empname", "emp.empname.empty");
+ ValidationUtils.rejectIfEmptyOrWhitespace(errors, "empaddress", "emp.empaddress.empty");
+ }
+
+}
diff --git a/spring-data-example/src/main/resources/application.properties b/spring-data-example/src/main/resources/application.properties
new file mode 100644
index 0000000..c351508
--- /dev/null
+++ b/spring-data-example/src/main/resources/application.properties
@@ -0,0 +1,13 @@
+message.source.basename=i18n/messages
+
+#jdbc properties:
+jdbc.driver=com.mysql.jdbc.Driver
+jdbc.url=jdbc:mysql://localhost:3306/to_thought_tutorial
+jdbc.username=root
+jdbc.password=
+
+#Hibernate Configuration:
+hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
+hibernate.show_sql=true
+hibernate.hbm2ddl.auto=update
+entitymanager.packages.to.scan=net.aimeizi.spring.data.example.entities
\ No newline at end of file
diff --git a/spring-data-example/src/main/resources/i18n/messages.properties b/spring-data-example/src/main/resources/i18n/messages.properties
new file mode 100644
index 0000000..326ce00
--- /dev/null
+++ b/spring-data-example/src/main/resources/i18n/messages.properties
@@ -0,0 +1,2 @@
+emp.empname.empty = The "emp empname" field can't be empty.
+emp.empaddress.empty = The "emp empaddress" field can't be empty.
\ No newline at end of file
diff --git a/spring-data-example/src/main/resources/log4j.properties b/spring-data-example/src/main/resources/log4j.properties
new file mode 100644
index 0000000..c84fe20
--- /dev/null
+++ b/spring-data-example/src/main/resources/log4j.properties
@@ -0,0 +1,6 @@
+log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.Stdout.layout.conversionPattern=%-5p - %-26.26c{1} - %m\n
+
+log4j.rootLogger=INFO,Stdout
+log4j.logger.org.springframework=INFO
\ No newline at end of file
diff --git a/spring-data-example/src/main/webapp/WEB-INF/pages/emp-edit.jsp b/spring-data-example/src/main/webapp/WEB-INF/pages/emp-edit.jsp
new file mode 100644
index 0000000..2859e55
--- /dev/null
+++ b/spring-data-example/src/main/webapp/WEB-INF/pages/emp-edit.jsp
@@ -0,0 +1,34 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
+
+
+
+
+Edit Emp page
+
+
+Edit Emp page
+
+
+
+Home page
+
+
\ No newline at end of file
diff --git a/spring-data-example/src/main/webapp/WEB-INF/pages/emp-list.jsp b/spring-data-example/src/main/webapp/WEB-INF/pages/emp-list.jsp
new file mode 100644
index 0000000..10c8df0
--- /dev/null
+++ b/spring-data-example/src/main/webapp/WEB-INF/pages/emp-list.jsp
@@ -0,0 +1,33 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+
+
+
+Emp List page
+
+
+Emp List page
+
+
+
+| id | company | employees | actions |
+
+
+
+
+
+| ${emp.empid} |
+${emp.empname} |
+${emp.empaddress} |
+
+Edit
+Delete
+ |
+
+
+
+
+Home page
+
+
\ No newline at end of file
diff --git a/spring-data-example/src/main/webapp/WEB-INF/pages/emp-new.jsp b/spring-data-example/src/main/webapp/WEB-INF/pages/emp-new.jsp
new file mode 100644
index 0000000..8f3db1d
--- /dev/null
+++ b/spring-data-example/src/main/webapp/WEB-INF/pages/emp-new.jsp
@@ -0,0 +1,34 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
+
+
+
+
+New Emp page
+
+
+New Emp page
+
+
+
+Home page
+
+
\ No newline at end of file
diff --git a/spring-data-example/src/main/webapp/WEB-INF/pages/index.jsp b/spring-data-example/src/main/webapp/WEB-INF/pages/index.jsp
new file mode 100644
index 0000000..174ecfc
--- /dev/null
+++ b/spring-data-example/src/main/webapp/WEB-INF/pages/index.jsp
@@ -0,0 +1,17 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+
+
+
+
+Home page
+
+
+Home page
+
+Welcome to "Emp application".
+${message}
+Create a new emp
+View all emp
+
+
+
\ No newline at end of file
diff --git a/spring-data-example/src/main/webapp/WEB-INF/web.xml b/spring-data-example/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..192860e
--- /dev/null
+++ b/spring-data-example/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,9 @@
+
+
+
+ spring-data-example
+
+
\ No newline at end of file
diff --git a/spring-data-example/src/test/java/net/aimeizi/spring/data/example/EmpRepositoryTest.java b/spring-data-example/src/test/java/net/aimeizi/spring/data/example/EmpRepositoryTest.java
new file mode 100644
index 0000000..2a143a3
--- /dev/null
+++ b/spring-data-example/src/test/java/net/aimeizi/spring/data/example/EmpRepositoryTest.java
@@ -0,0 +1,121 @@
+package net.aimeizi.spring.data.example;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.IndexColorModel;
+import java.io.FileOutputStream;
+
+import javax.imageio.ImageIO;
+
+import net.aimeizi.spring.data.example.config.WebConfig;
+import net.aimeizi.spring.data.example.entities.Dept;
+import net.aimeizi.spring.data.example.entities.Emp;
+import net.aimeizi.spring.data.example.service.EmpService;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes=WebConfig.class)
+public class EmpRepositoryTest {
+
+
+ @Autowired
+ EmpService empService;
+
+
+ private static IndexColorModel createIndexColorModel() {
+
+ byte[] r = new byte[ 256 ];
+ byte[] g = new byte[ 256 ];
+ byte[] b = new byte[ 256 ];
+
+ // now fill in the r,g, and b arrays with a ramp or 0
+ for ( int i = 0; i < 256 ; i++ ){
+ r[i] = (byte) i;
+ g[i] = (byte) i;
+ b[i] = (byte) i;
+ }
+ return new IndexColorModel( 8, 256, r, g, b );
+
+ }
+
+
+ @Test
+ public void save(){
+
+ Emp emp = new Emp();
+ emp.setEmpname("马云");
+ emp.setEmpaddress("浙江杭州");
+
+ Dept dept = new Dept();
+
+ dept.setDeptname("研发部");
+
+ dept.setDeptphonenumber("110");
+
+ emp.setDept(dept);
+
+ empService.save(emp );
+
+ }
+
+ @Test
+ public void delete(){
+ Emp emp = empService.findOne(2);
+ empService.delete(emp);
+ }
+
+ @Test
+ public void update(){
+
+ Emp emp = empService.findOne(5);
+
+ emp.setEmpname("马化腾");
+ emp.setEmpaddress("广东深圳");
+
+ Dept dept = emp.getDept();
+ dept.setDeptphonenumber("120");
+ dept.setDeptname("大客户服务部");
+
+ emp.setDept(dept);
+
+ empService.update(emp);
+
+ }
+
+ @Test
+ public void imageEmail() throws Exception{
+
+ String email = "sxyx2008@163.com";
+
+ int height = 22;
+ BufferedImage bi = new BufferedImage(255, height,
+ BufferedImage.TYPE_INT_RGB);
+ Graphics2D g = (Graphics2D) bi.getGraphics();
+ Font mFont = new Font("Verdana", Font.PLAIN, 14);
+ g.setFont(mFont);
+ g.drawString(email, 2, 19);
+ FontMetrics fm = g.getFontMetrics();
+ int new_width = fm.charsWidth(email.toCharArray(), 0, email.length()) + 4;
+ int new_height = fm.getHeight();
+ BufferedImage nbi = new BufferedImage(new_width, new_height,
+ BufferedImage.TYPE_BYTE_INDEXED, createIndexColorModel());
+ Graphics2D g2 = (Graphics2D) nbi.getGraphics();
+ g2.setColor(new Color(0, 0, 0, 0));// 透明
+ g2.fillRect(0, 0, new_width, new_height);
+ g2.setFont(mFont);
+ g2.setColor(new Color(200, 0, 0));
+ g2.drawString(email, 2, new_height - 4);
+
+ ImageIO.write(nbi, "gif", new FileOutputStream(
+ "target/sxyx2008@163.com.gif"));
+ }
+
+}
diff --git a/spring-data-example/src/test/java/net/aimeizi/spring/data/example/PostRepositoryTest.java b/spring-data-example/src/test/java/net/aimeizi/spring/data/example/PostRepositoryTest.java
new file mode 100644
index 0000000..b687ebe
--- /dev/null
+++ b/spring-data-example/src/test/java/net/aimeizi/spring/data/example/PostRepositoryTest.java
@@ -0,0 +1,81 @@
+package net.aimeizi.spring.data.example;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import net.aimeizi.spring.data.example.config.WebConfig;
+import net.aimeizi.spring.data.example.entities.Post;
+import net.aimeizi.spring.data.example.service.PostService;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.AnnotationConfigContextLoader;
+import org.springframework.test.context.web.WebAppConfiguration;
+
+@WebAppConfiguration
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes=WebConfig.class,loader=AnnotationConfigContextLoader.class)
+public class PostRepositoryTest {
+
+ @Autowired
+ PostService postService;
+
+ @Test
+ public void save() {
+ Post post = new Post();
+ post.setPostDate(new Date());
+ post.setTitle("Second Post");
+
+ postService.save(post);
+
+ Post dbpost = postService.findOne(post.getPostId());
+ assertNotNull(dbpost);
+ System.out.println(dbpost.getTitle());
+ }
+
+ @Test
+ public void find() {
+
+ List list = postService.find();
+
+ for (Post p : list) {
+ System.out.println(p);
+ }
+
+ }
+
+ @Test
+ public void findOne() {
+
+ System.out.println(postService.findOne(1));
+
+ }
+
+ @Test
+ public void update(){
+
+ Post post = new Post();
+ post.setPostId(1);
+ post.setPostDate(Calendar.getInstance().getTime());
+ post.setTitle("update title");
+
+ postService.update(post);
+ }
+
+ @Test
+ public void delete(){
+
+ Post post = postService.findOne(2);
+
+ postService.delete(post);
+
+ find();
+ }
+
+}