├── .gitignore ├── README.md ├── pom.xml ├── ssm-common ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── leeyom │ ├── pojo │ └── DataGridResult.java │ └── utils │ ├── DateUtils.java │ └── StringUtils.java ├── ssm-dao ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── leeyom │ └── dao │ └── user │ └── UserMapper.java ├── ssm-pojo ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── leeyom │ └── pojo │ └── User.java ├── ssm-service ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── leeyom │ └── service │ └── user │ ├── UserService.java │ └── impl │ └── UserServiceImpl.java └── ssm-web ├── pom.xml └── src ├── main ├── java │ └── com │ │ └── leeyom │ │ ├── controller │ │ └── UserController.java │ │ └── filter │ │ └── CorsFilter.java ├── resources │ ├── jdbc.properties │ ├── log4j.properties │ ├── mapper │ │ └── UserMapper.xml │ ├── spring │ │ ├── mybatis-config.xml │ │ ├── spring-mvc.xml │ │ └── spring-mybatis.xml │ └── t_user.sql └── webapp │ ├── WEB-INF │ ├── test.jsp │ └── web.xml │ └── index.jsp └── test └── java └── TestMybatis.java /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Maven template 3 | target/ 4 | pom.xml.tag 5 | pom.xml.releaseBackup 6 | pom.xml.versionsBackup 7 | pom.xml.next 8 | release.properties 9 | dependency-reduced-pom.xml 10 | buildNumber.properties 11 | .mvn/timing.properties 12 | 13 | # Avoid ignoring Maven wrapper jar file (.jar files are usually ignored) 14 | !/.mvn/wrapper/maven-wrapper.jar 15 | .idea/ 16 | *.iml 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 |

3 | 4 |   5 | LICENSE 6 |   7 | 8 | 9 |

10 | 11 | # 项目结构 12 | ## 项目目录 13 | ``` 14 | ssm-demo 15 | ├── ssm-common -- 公共模块,主要存放一些工具类 16 | | ├── src 17 | | ├── pom.xml -- 打包方式:jar 18 | ├── ssm-dao -- 存放mybatis相关的mapper接口 19 | | ├── src 20 | | ├── pom.xml -- 打包方式:jar 21 | ├── ssm-pojo -- 存放实体类 22 | | ├── src 23 | | ├── pom.xml -- 打包方式:jar 24 | ├── ssm-service -- 存放业务逻辑类 25 | | ├── src 26 | | ├── pom.xml -- 打包方式:jar 27 | ├── ssm-web -- 存放前台页面,客户端交互相关的controller 28 | | ├── src 29 | | ├── pom.xml -- 打包方式:war 30 | ├── pom.xml --打包方式为pom,一些公用的依赖 31 | ``` 32 | 33 | ## 模块依赖关系 34 | 35 | ![20180211151831567174772.png](http://image.leeyom.top/20180211151831567174772.png) 36 | 37 | # 过程 38 | 39 | 更具体的内容可以参考我博客文章:[《Maven的多模块 Spring MVC + Spring + Mybatis 项目的搭建》](http://www.leeyom.top/2017/08/01/tech-maven-multi-module-ssm/),这里就不详述了。 40 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.leeyom.ssm 8 | ssm 9 | pom 10 | 1.0-SNAPSHOT 11 | 12 | 13 | ssm-web 14 | ssm-service 15 | ssm-common 16 | ssm-dao 17 | ssm-pojo 18 | 19 | 20 | 21 | 22 | 4.1.7.RELEASE 23 | 1.7.7 24 | 1.2.17 25 | 2.4 26 | 4.9 27 | 1.2.35 28 | 2.2.4 29 | 3.3.2 30 | 31 | 32 | UTF-8 33 | 1.8 34 | 1.8 35 | 1.8 36 | 37 | 38 | 39 | 40 | 41 | 42 | com.leeyom.ssm 43 | ssm-common 44 | 1.0-SNAPSHOT 45 | 46 | 47 | 48 | 49 | org.springframework 50 | spring-core 51 | ${spring.version} 52 | 53 | 54 | 55 | org.springframework 56 | spring-beans 57 | ${spring.version} 58 | 59 | 60 | 61 | org.springframework 62 | spring-web 63 | ${spring.version} 64 | 65 | 66 | 67 | org.springframework 68 | spring-webmvc 69 | ${spring.version} 70 | 71 | 72 | 73 | org.springframework 74 | spring-oxm 75 | ${spring.version} 76 | 77 | 78 | 79 | org.springframework 80 | spring-tx 81 | ${spring.version} 82 | 83 | 84 | 85 | org.springframework 86 | spring-orm 87 | ${spring.version} 88 | 89 | 90 | 91 | org.springframework 92 | spring-jdbc 93 | ${spring.version} 94 | 95 | 96 | 97 | org.springframework 98 | spring-context 99 | ${spring.version} 100 | 101 | 102 | 103 | org.springframework 104 | spring-context-support 105 | ${spring.version} 106 | 107 | 108 | 109 | org.springframework 110 | spring-test 111 | ${spring.version} 112 | 113 | 114 | 115 | org.springframework 116 | spring-aspects 117 | ${spring.version} 118 | 119 | 120 | 121 | org.springframework 122 | spring-aop 123 | ${spring.version} 124 | 125 | 126 | 127 | 128 | junit 129 | junit 130 | ${junit.version} 131 | test 132 | 133 | 134 | 135 | 136 | log4j 137 | log4j 138 | ${log4j.version} 139 | 140 | 141 | 142 | org.slf4j 143 | slf4j-api 144 | ${slf4j.version} 145 | 146 | 147 | 148 | org.slf4j 149 | slf4j-log4j12 150 | ${slf4j.version} 151 | 152 | 153 | 154 | 155 | com.google.code.gson 156 | gson 157 | ${gson.version} 158 | 159 | 160 | net.sf.json-lib 161 | json-lib 162 | ${json-lib.version} 163 | jdk15 164 | 165 | 166 | 167 | com.alibaba 168 | fastjson 169 | ${fastjson.version} 170 | 171 | 172 | 173 | 174 | org.apache.commons 175 | commons-lang3 176 | ${commons-lang3.version} 177 | 178 | 179 | -------------------------------------------------------------------------------- /ssm-common/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | com.leeyom.ssm 7 | ssm-common 8 | 1.0-SNAPSHOT 9 | jar 10 | 11 | 12 | UTF-8 13 | 1.8 14 | 1.8 15 | 1.8 16 | 17 | -------------------------------------------------------------------------------- /ssm-common/src/main/java/com/leeyom/pojo/DataGridResult.java: -------------------------------------------------------------------------------- 1 | package com.leeyom.pojo; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 分页结果封装实体 7 | * @author leeyom 8 | */ 9 | public class DataGridResult { 10 | /** 11 | * 总的记录数 12 | */ 13 | Long total; 14 | /** 15 | * 数据集 16 | */ 17 | List rows; 18 | 19 | public Long getTotal() { 20 | return total; 21 | } 22 | 23 | public void setTotal(Long total) { 24 | this.total = total; 25 | } 26 | 27 | public List getRows() { 28 | return rows; 29 | } 30 | 31 | public void setRows(List rows) { 32 | this.rows = rows; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /ssm-common/src/main/java/com/leeyom/utils/DateUtils.java: -------------------------------------------------------------------------------- 1 | package com.leeyom.utils; 2 | 3 | import java.text.DateFormat; 4 | import java.text.ParseException; 5 | import java.text.SimpleDateFormat; 6 | import java.util.ArrayList; 7 | import java.util.Calendar; 8 | import java.util.Date; 9 | import java.util.List; 10 | 11 | /** 12 | * 日期工具类 13 | * @author Leeyom Wang 14 | * @date 2017年10月19日 12:05 15 | */ 16 | public class DateUtils { 17 | 18 | private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); 19 | private static final SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 20 | 21 | /** 22 | * 将日期转化为指定格式的字符串 23 | * @param date 需要转化的日期 24 | * @param pattern 转化规则 25 | * @return 指定格式的日期字符串 26 | */ 27 | public static String getString(Date date, String pattern) { 28 | DateFormat df = new SimpleDateFormat(pattern); 29 | return df.format(date); 30 | } 31 | 32 | /** 33 | * 将日期字符串转换为指定格式的日期对象 34 | * @param strDate 日期字符串 35 | * @param format 转化规则 36 | * @return 指定格式的日期对象 37 | */ 38 | public static Date getDate(String strDate, String format) { 39 | DateFormat df = new SimpleDateFormat(format); 40 | try { 41 | return df.parse(strDate); 42 | } catch (ParseException e) { 43 | throw new IllegalArgumentException("Can't parse " + strDate + " using " + format); 44 | } 45 | } 46 | 47 | /** 48 | * 获取两个日期对象之间相差的天数 49 | * @param beginDate 开始时间 50 | * @param endDate 结束时间 51 | * @return 相差天数 52 | */ 53 | public static int getDays(Date beginDate, Date endDate) { 54 | int days = -1; 55 | long beginMillisecond = beginDate.getTime(); 56 | long endMillisecond = endDate.getTime(); 57 | long millisecondForDay = 24 * 60 * 60 * 1000; 58 | days = (int) ((endMillisecond - beginMillisecond) / millisecondForDay); 59 | return days; 60 | } 61 | 62 | /** 63 | * 获得两个日期对象之间相差的小时数 64 | * @param beginDate 开始时间 65 | * @param endDate 结束时间 66 | * @return 相差小时 67 | */ 68 | public static long getTimes(Date beginDate, Date endDate) { 69 | long time = -1; 70 | long beginMillisecond = beginDate.getTime(); 71 | long endMillisecond = endDate.getTime(); 72 | long millisecondForDay = 60 * 60 * 1000; 73 | time = (long) ((endMillisecond - beginMillisecond) / millisecondForDay); 74 | return time; 75 | } 76 | 77 | /** 78 | * 指定的日期加上或者减去指定的天数 79 | * @param date 日期 80 | * @param day 天数 81 | * @return 修改后的日期 82 | */ 83 | public static Date addDays(Date date, int day) { 84 | Calendar calendar = Calendar.getInstance(); 85 | calendar.setTime(date); 86 | calendar.add(Calendar.DATE, day); 87 | return calendar.getTime(); 88 | } 89 | 90 | /** 91 | * 判断当前时间是上午还是下午 92 | * @param date 日期 93 | * @return 上午or下午 94 | */ 95 | public static String getAmOrPm(Date date) { 96 | String str = ""; 97 | Calendar calendar = Calendar.getInstance(); 98 | calendar.setTime(date); 99 | int num = calendar.get(Calendar.AM_PM); 100 | if (num == 0) { 101 | str = "上午"; 102 | } else if (num == 1) { 103 | str = "下午"; 104 | } 105 | return str; 106 | } 107 | 108 | /** 109 | * 获取指定时间的星期数 110 | * @param date 日期 111 | * @return 例如:星期一 112 | */ 113 | public static String getStrWeek(Date date) { 114 | String strWeek = ""; 115 | Calendar calendar = Calendar.getInstance(); 116 | calendar.setTime(date); 117 | int weekNum = calendar.get(Calendar.DAY_OF_WEEK); 118 | if (weekNum == 1) { 119 | strWeek = "星期天"; 120 | } else if (weekNum == 2) { 121 | strWeek = "星期一"; 122 | } else if (weekNum == 3) { 123 | strWeek = "星期二"; 124 | } else if (weekNum == 4) { 125 | strWeek = "星期三"; 126 | } else if (weekNum == 5) { 127 | strWeek = "星期四"; 128 | } else if (weekNum == 6) { 129 | strWeek = "星期五"; 130 | } else if (weekNum == 7) { 131 | strWeek = "星期六"; 132 | } 133 | return strWeek; 134 | } 135 | 136 | /** 137 | * 获取指定时间的星期数 138 | * @param date 139 | * @return 例如:1 140 | */ 141 | public static int getIntWeek(Date date) { 142 | int intWeek = 0; 143 | Calendar calendar = Calendar.getInstance(); 144 | calendar.setTime(date); 145 | int weekNum = calendar.get(Calendar.DAY_OF_WEEK); 146 | if (weekNum == 1) { 147 | intWeek = 7; 148 | } else if (weekNum == 2) { 149 | intWeek = 1; 150 | } else if (weekNum == 3) { 151 | intWeek = 2; 152 | } else if (weekNum == 4) { 153 | intWeek = 3; 154 | } else if (weekNum == 5) { 155 | intWeek = 4; 156 | } else if (weekNum == 6) { 157 | intWeek = 5; 158 | } else if (weekNum == 7) { 159 | intWeek = 6; 160 | } 161 | return intWeek; 162 | } 163 | 164 | /** 165 | * 获取当前时间的下个星期一 166 | * @return 下个星期一的Date对象 167 | */ 168 | public static Date getNextMonday() { 169 | Date date = new Date(); 170 | int w = getIntWeek(date); 171 | if (w == 1) { 172 | return addDays(date, 7); 173 | } 174 | if (w == 2) { 175 | return addDays(date, 6); 176 | } 177 | if (w == 3) { 178 | return addDays(date, 5); 179 | } 180 | if (w == 4) { 181 | return addDays(date, 4); 182 | } 183 | if (w == 5) { 184 | return addDays(date, 3); 185 | } 186 | if (w == 6) { 187 | return addDays(date, 2); 188 | } 189 | return null; 190 | } 191 | 192 | /** 193 | * 获取当月第一天 194 | * @return 195 | */ 196 | public static String getFirstDayOfMonth() { 197 | String str = ""; 198 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); 199 | Calendar lastDate = Calendar.getInstance(); 200 | lastDate.set(Calendar.DATE, 1);// 设为当前月的1 号 201 | str = sdf.format(lastDate.getTime()); 202 | return str; 203 | } 204 | 205 | /** 206 | * 获取上月第一天 207 | * @return 208 | */ 209 | public static String getPreviousMonthFirst() { 210 | String str = ""; 211 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 212 | Calendar lastDate = Calendar.getInstance(); 213 | lastDate.set(Calendar.DATE, 1);// 设为当前月的1 号 214 | lastDate.add(Calendar.MONTH, -1);// 减一个月,变为下月的1 号 215 | // lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天 216 | str = sdf.format(lastDate.getTime()); 217 | return str; 218 | } 219 | 220 | /** 221 | * 获得上月最后一天的日期 222 | * @return 223 | */ 224 | public static String getPreviousMonthEnd() { 225 | String str = ""; 226 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 227 | Calendar lastDate = Calendar.getInstance(); 228 | lastDate.add(Calendar.MONTH, -1);// 减一个月 229 | lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天 230 | lastDate.roll(Calendar.DATE, -1);// 日期回滚一天,也就是本月最后一天 231 | str = sdf.format(lastDate.getTime()); 232 | return str; 233 | } 234 | 235 | /** 236 | * 获取给定的两个日期之间的所有的Date 237 | * @param startDate 开始时间 238 | * @param endDate 结束时间 239 | * @return 日期结果集 240 | * @throws Exception 开始时间大于结束时间的异常 241 | */ 242 | public static List dateSplit(Date startDate, Date endDate) throws Exception { 243 | if (!startDate.before(endDate)) 244 | throw new Exception("开始时间应该在结束时间之后"); 245 | Long spi = endDate.getTime() - startDate.getTime(); 246 | Long step = spi / (24 * 60 * 60 * 1000);// 相隔天数 247 | 248 | List dateList = new ArrayList(); 249 | dateList.add(endDate); 250 | for (int i = 1; i <= step; i++) { 251 | dateList.add(new Date(dateList.get(i - 1).getTime() - (24 * 60 * 60 * 1000)));// 比上一天减一 252 | } 253 | return dateList; 254 | } 255 | } 256 | -------------------------------------------------------------------------------- /ssm-common/src/main/java/com/leeyom/utils/StringUtils.java: -------------------------------------------------------------------------------- 1 | package com.leeyom.utils; 2 | 3 | import sun.misc.BASE64Decoder; 4 | 5 | import java.io.UnsupportedEncodingException; 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | import java.util.Vector; 9 | 10 | /** 11 | * 字符串处理工具类 12 | * @author Leeyom Wang 13 | * @date 2017年10月19日 11:53 14 | */ 15 | public class StringUtils { 16 | /** 17 | * 将String数组转换为String字符串 18 | * @param strArray 要处理的String数组 19 | * @return 字符串 20 | */ 21 | public static String array2String(String[] strArray) { 22 | 23 | StringBuffer strBuffer = new StringBuffer(); 24 | 25 | for (int i = 0; i < strArray.length; i++) { 26 | strBuffer.append(strArray[i]); 27 | } 28 | return strBuffer.toString(); 29 | } 30 | 31 | /** 32 | * 以type为分界符分离str字符,返回分离后的数组 33 | * @param str 待处理字符串 34 | * @param type 分界符 35 | * @return array 处理后的字符串数数组 36 | */ 37 | public static String[] split(String str, String type) { 38 | int begin = 0; 39 | int pos = 0; 40 | String tempstr = ""; 41 | String[] array = null; 42 | Vector vec = null; 43 | int len = str.trim().length(); 44 | str = str + type; 45 | 46 | if (len > 0) { 47 | while (str.length() > 0) { 48 | 49 | if (vec == null) { 50 | vec = new Vector(); 51 | } 52 | pos = str.indexOf(type, begin); 53 | tempstr = str.substring(begin, pos); 54 | str = str.substring(pos + type.length(), str.length()); 55 | vec.add(tempstr); 56 | } 57 | } 58 | if (vec != null) { 59 | array = new String[vec.size()]; 60 | for (int i = 0; i < vec.size(); i++) { 61 | array[i] = (String) vec.get(i); 62 | } 63 | } else { 64 | array = new String[0]; 65 | } 66 | return array; 67 | } 68 | 69 | /** 70 | * 判断字符串是否为null 71 | * @param s 要判断字符串对象 72 | * @return true 表示不为null false 为空 73 | * @throws Exception 74 | */ 75 | public static boolean notNull(String s) { 76 | if (s == null || s.trim().length() <= 0 || "".equals(s) || "null".equals(s)) { 77 | return false; 78 | } else { 79 | return true; 80 | } 81 | } 82 | 83 | /** 84 | * 判断两个字符胡灿是否相等 85 | * @param objstr 字符串 86 | * @param bjstr 字符串 87 | * @return false 表示不相等 true 相等 88 | * @throws Exception 89 | */ 90 | public static boolean equals(String objstr, String bjstr) { 91 | boolean lean = false; 92 | lean = (objstr != null) && objstr.equals(bjstr); 93 | return lean; 94 | } 95 | 96 | /** 97 | * 替换source中的str1为str2 98 | * @param source 待替换的字符串 99 | * @param str1 待替换的字符 100 | * @param str2 替换的字符串 101 | * @return java.lang.String 替换后的字符串 102 | */ 103 | public static String replace(String source, char str1, String str2) { 104 | return replace(source, String.valueOf(str1), str2); 105 | } 106 | 107 | /** 108 | * 替换source中的str1为str2 109 | * @param source 待替换的字符串 110 | * @param str1 待替换的部分字符串 111 | * @param str2 替换的字符串 112 | * @return java.lang.String 替换后的字符串 113 | */ 114 | public static String replace(String source, String str1, String str2) { 115 | if (source == null) { 116 | return ""; 117 | } 118 | String desc = ""; 119 | int posstart = 0; 120 | int posend = source.indexOf(str1, 0); 121 | int len = source.length(); 122 | while (posend >= 0 && posstart < len) { 123 | desc += source.substring(posstart, posend) + str2; 124 | posstart = posend + str1.length(); 125 | posend = source.indexOf(str1, posstart); 126 | } 127 | if (posstart < len) { 128 | desc += source.substring(posstart, len); 129 | } 130 | return desc; 131 | } 132 | 133 | /** 134 | * 将字符串列表转换成字符串数组 135 | * @param list List 字符串列表 136 | * @return String[] 字符串数组 137 | */ 138 | public static String[] list2Array(List list) { 139 | String[] strs = new String[list.size()]; 140 | for (int i = 0; i < strs.length; i++) { 141 | strs[i] = (String) list.get(i); 142 | } 143 | return strs; 144 | } 145 | 146 | /** 147 | * 将字符串数组转换成字符串列表 148 | * @param array String[] array 字符串数组 149 | * @return List 字符串列表集合 150 | */ 151 | public static List array2List(String[] array) { 152 | List list = new ArrayList(); 153 | if (array != null) { 154 | for (int i = 0; i < array.length; i++) { 155 | list.add(array[i]); 156 | } 157 | } 158 | return list; 159 | } 160 | 161 | /** 162 | * 过滤Html的特殊字 163 | * @param in 164 | * @return 165 | */ 166 | public static String htmlEscape(String in) { 167 | StringBuffer out = new StringBuffer(); 168 | for (int i = 0; i < in.length(); i++) { 169 | char c = in.charAt(i); 170 | switch (c) { 171 | case '"': 172 | out.append("""); 173 | break; 174 | case '&': 175 | out.append("&"); 176 | break; 177 | case '<': 178 | out.append("<"); 179 | break; 180 | case '>': 181 | out.append(">"); 182 | break; 183 | default: 184 | out.append(c); 185 | break; 186 | } 187 | } 188 | return out.toString(); 189 | } 190 | 191 | /** 192 | * 将字符串中的大写字母转化为"_"加小写字母 193 | * @param sentence 194 | * @return 195 | */ 196 | public static String capTurn(String sentence) { 197 | char[] retChars = sentence.toCharArray(); 198 | String retString = ""; 199 | for (int i = 0; i < retChars.length; i++) { 200 | char curchar = retChars[i]; 201 | 202 | if (Character.isUpperCase(curchar)) { 203 | retString = retString + "_" + Character.toLowerCase(curchar); 204 | } else { 205 | retString = retString + curchar; 206 | } 207 | } 208 | return retString; 209 | } 210 | 211 | /** 212 | * 把文本编码为Html代码 213 | * @param target 目标字符串 214 | * @return 编码后的字符串 215 | */ 216 | public static String htmEncode(String target) { 217 | StringBuffer stringbuffer = new StringBuffer(); 218 | int j = target.length(); 219 | for (int i = 0; i < j; i++) { 220 | char c = target.charAt(i); 221 | switch (c) { 222 | case 60: 223 | stringbuffer.append("<"); 224 | break; 225 | case 62: 226 | stringbuffer.append(">"); 227 | break; 228 | case 38: 229 | stringbuffer.append("&"); 230 | break; 231 | case 34: 232 | stringbuffer.append("""); 233 | break; 234 | case 169: 235 | stringbuffer.append("©"); 236 | break; 237 | case 174: 238 | stringbuffer.append("®"); 239 | break; 240 | case 165: 241 | stringbuffer.append("¥"); 242 | break; 243 | case 8364: 244 | stringbuffer.append("€"); 245 | break; 246 | case 8482: 247 | stringbuffer.append("™"); 248 | break; 249 | case 13: 250 | if (i < j - 1 && target.charAt(i + 1) == 10) { 251 | stringbuffer.append("
"); 252 | i++; 253 | } 254 | break; 255 | case 32: 256 | if (i < j - 1 && target.charAt(i + 1) == ' ') { 257 | stringbuffer.append("  "); 258 | i++; 259 | break; 260 | } 261 | default: 262 | stringbuffer.append(c); 263 | break; 264 | } 265 | } 266 | return new String(stringbuffer.toString()); 267 | } 268 | 269 | /** 270 | * base64解码 271 | * @param context 272 | * @return 273 | */ 274 | public static String decodeString(String context) { 275 | BASE64Decoder decoder = new BASE64Decoder(); 276 | try { 277 | byte[] fileNameStr = decoder.decodeBuffer(context); 278 | context = new String(fileNameStr, "UTF-8"); 279 | } catch (Exception e) { 280 | e.printStackTrace(); 281 | } 282 | return context; 283 | } 284 | 285 | /** 286 | * base64编码 287 | * @param str 288 | * @return 289 | */ 290 | public static String encodeString(String str) { 291 | String base64Str = null; 292 | try { 293 | base64Str = new sun.misc.BASE64Encoder().encode(str.getBytes("UTF-8")); 294 | } catch (UnsupportedEncodingException e) { 295 | e.printStackTrace(); 296 | } 297 | return base64Str; 298 | } 299 | } 300 | -------------------------------------------------------------------------------- /ssm-dao/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | com.leeyom.ssm 7 | ssm-dao 8 | 1.0-SNAPSHOT 9 | jar 10 | 11 | 12 | 3.3.0 13 | 1.2.3 14 | 4.1.4 15 | 5.1.37 16 | 1.1.2 17 | 18 | UTF-8 19 | 1.8 20 | 1.8 21 | 1.8 22 | 23 | 24 | 25 | 26 | com.leeyom.ssm 27 | ssm-pojo 28 | 1.0-SNAPSHOT 29 | 30 | 31 | 32 | 33 | org.mybatis 34 | mybatis 35 | ${mybatis.version} 36 | 37 | 38 | 39 | 40 | org.mybatis 41 | mybatis-spring 42 | ${mybatis-spring.version} 43 | 44 | 45 | 46 | 47 | mysql 48 | mysql-connector-java 49 | ${mysql-connector.version} 50 | runtime 51 | 52 | 53 | 54 | 55 | com.github.pagehelper 56 | pagehelper 57 | ${pagehelper.version} 58 | 59 | 60 | 61 | 62 | com.alibaba 63 | druid 64 | ${druid.version} 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /ssm-dao/src/main/java/com/leeyom/dao/user/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.leeyom.dao.user; 2 | 3 | import com.leeyom.pojo.User; 4 | 5 | import java.util.List; 6 | 7 | public interface UserMapper { 8 | int deleteByPrimaryKey(Integer uId); 9 | 10 | int insert(User record); 11 | 12 | User selectByPrimaryKey(Integer uId); 13 | 14 | List selectAll(); 15 | 16 | int updateByPrimaryKey(User record); 17 | } -------------------------------------------------------------------------------- /ssm-pojo/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | com.leeyom.ssm 7 | ssm-pojo 8 | 1.0-SNAPSHOT 9 | jar 10 | 11 | 12 | UTF-8 13 | 1.8 14 | 1.8 15 | 1.8 16 | 17 | -------------------------------------------------------------------------------- /ssm-pojo/src/main/java/com/leeyom/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.leeyom.pojo; 2 | 3 | public class User { 4 | private Integer uId; 5 | 6 | private String uName; 7 | 8 | private String uPassword; 9 | 10 | public Integer getuId() { 11 | return uId; 12 | } 13 | 14 | public void setuId(Integer uId) { 15 | this.uId = uId; 16 | } 17 | 18 | public String getuName() { 19 | return uName; 20 | } 21 | 22 | public void setuName(String uName) { 23 | this.uName = uName == null ? null : uName.trim(); 24 | } 25 | 26 | public String getuPassword() { 27 | return uPassword; 28 | } 29 | 30 | public void setuPassword(String uPassword) { 31 | this.uPassword = uPassword == null ? null : uPassword.trim(); 32 | } 33 | } -------------------------------------------------------------------------------- /ssm-service/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | ssm 7 | com.leeyom.ssm 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | ssm-service 12 | jar 13 | 14 | 15 | 16 | UTF-8 17 | 1.8 18 | 1.8 19 | 1.8 20 | 21 | 22 | 23 | 24 | 25 | com.leeyom.ssm 26 | ssm-dao 27 | 1.0-SNAPSHOT 28 | 29 | 30 | -------------------------------------------------------------------------------- /ssm-service/src/main/java/com/leeyom/service/user/UserService.java: -------------------------------------------------------------------------------- 1 | package com.leeyom.service.user; 2 | 3 | import com.leeyom.pojo.User; 4 | 5 | public interface UserService { 6 | public User getUserById(Integer userId); 7 | } 8 | -------------------------------------------------------------------------------- /ssm-service/src/main/java/com/leeyom/service/user/impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.leeyom.service.user.impl; 2 | 3 | import com.leeyom.dao.user.UserMapper; 4 | import com.leeyom.pojo.User; 5 | import com.leeyom.service.user.UserService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | 9 | @Service("userService") 10 | public class UserServiceImpl implements UserService { 11 | 12 | @Autowired 13 | UserMapper userMapper; 14 | 15 | 16 | @Override 17 | public User getUserById(Integer userId) { 18 | return userMapper.selectByPrimaryKey(userId); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ssm-web/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | com.leeyom.ssm 4 | 1.0-SNAPSHOT 5 | 4.0.0 6 | ssm-web 7 | war 8 | ssm-web 9 | http://www.leeyom.top 10 | 11 | 12 | 13 | 4.9 14 | 7.0 15 | 1.2 16 | 2.3.1 17 | 3.1.0 18 | 1.3.1 19 | 2.4 20 | 1.9 21 | 22 | UTF-8 23 | 1.8 24 | 1.8 25 | 1.8 26 | 27 | 28 | 29 | 30 | 31 | junit 32 | junit 33 | ${junit.version} 34 | test 35 | 36 | 37 | 38 | jstl 39 | jstl 40 | ${jstl.version} 41 | 42 | 43 | 44 | javax.servlet 45 | javax.servlet-api 46 | ${servlet-api.version} 47 | provided 48 | 49 | 50 | 51 | javax.servlet.jsp 52 | javax.servlet.jsp-api 53 | ${jsp-api.version} 54 | provided 55 | 56 | 57 | 58 | 59 | javax 60 | javaee-api 61 | ${javaee-api.version} 62 | provided 63 | 64 | 65 | 66 | 67 | commons-fileupload 68 | commons-fileupload 69 | ${commons-fileupload.version} 70 | 71 | 72 | commons-io 73 | commons-io 74 | ${commons-io.version} 75 | 76 | 77 | commons-codec 78 | commons-codec 79 | ${commons-codec.version} 80 | 81 | 82 | 83 | 84 | com.leeyom.ssm 85 | ssm-service 86 | 1.0-SNAPSHOT 87 | 88 | 89 | 90 | 91 | ssm 92 | 93 | 94 | 95 | org.apache.maven.plugins 96 | maven-compiler-plugin 97 | 98 | 99 | 1.8 100 | 1.8 101 | UTF-8 102 | true 103 | 104 | 105 | src\main\webapp\WEB-INF\lib 106 | 107 | 108 | 109 | 110 | 111 | 112 | org.apache.tomcat.maven 113 | tomcat7-maven-plugin 114 | 2.2 115 | 116 | 117 | 118 | /ssm-demo 119 | 120 | 8080 121 | UTF-8 122 | 123 | http://localhost:8080/manager/html 124 | tomcat7 125 | admin 126 | admin 127 | 128 | 129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /ssm-web/src/main/java/com/leeyom/controller/UserController.java: -------------------------------------------------------------------------------- 1 | package com.leeyom.controller; 2 | 3 | import com.leeyom.pojo.User; 4 | import com.leeyom.service.user.UserService; 5 | import com.leeyom.utils.StringUtils; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Controller; 8 | import org.springframework.ui.Model; 9 | import org.springframework.web.bind.annotation.RequestMapping; 10 | import org.springframework.web.bind.annotation.RequestMethod; 11 | 12 | import javax.servlet.http.HttpServletRequest; 13 | 14 | @Controller 15 | public class UserController { 16 | 17 | @Autowired 18 | UserService userService; 19 | 20 | /** 21 | * 测试 spring mvc 22 | * @param request 23 | * @param model 24 | * @return 25 | */ 26 | @RequestMapping(value = "/getUserById", method = {RequestMethod.POST, RequestMethod.GET}) 27 | public String getUserById(HttpServletRequest request, Model model) { 28 | //参数 29 | Integer userId = StringUtils.notNull(request.getParameter("userId")) ? Integer.parseInt(request.getParameter("userId")) : 1; 30 | User user = userService.getUserById(userId); 31 | model.addAttribute("user", user); 32 | return "test"; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ssm-web/src/main/java/com/leeyom/filter/CorsFilter.java: -------------------------------------------------------------------------------- 1 | package com.leeyom.filter; 2 | 3 | import org.apache.commons.lang.StringUtils; 4 | import org.apache.log4j.Logger; 5 | import org.springframework.stereotype.Component; 6 | 7 | import javax.servlet.*; 8 | import javax.servlet.http.HttpServletResponse; 9 | import java.io.IOException; 10 | 11 | /** 12 | * 处理跨域的过滤器 13 | * @author Leeyom Wang 14 | * @date 2017年10月19日 14:47 15 | */ 16 | @Component 17 | public class CorsFilter implements Filter { 18 | 19 | private static final Logger LOGGER = Logger.getLogger(CorsFilter.class); 20 | 21 | private String allowOrigin; 22 | private String allowMethods; 23 | private String allowCredentials; 24 | private String allowHeaders; 25 | private String exposeHeaders; 26 | 27 | @Override 28 | public void init(FilterConfig filterConfig) throws ServletException { 29 | allowOrigin = filterConfig.getInitParameter("allowOrigin"); 30 | allowMethods = filterConfig.getInitParameter("allowMethods"); 31 | allowCredentials = filterConfig.getInitParameter("allowCredentials"); 32 | allowHeaders = filterConfig.getInitParameter("allowHeaders"); 33 | exposeHeaders = filterConfig.getInitParameter("exposeHeaders"); 34 | } 35 | 36 | /** 37 | * 通过CORS技术实现AJAX跨域访问, 只要将CORS响应头写入response对象中即可 38 | * @param req 39 | * @param res 40 | * @param chain 41 | * @throws IOException 42 | * @throws ServletException 43 | */ 44 | @Override 45 | public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 46 | HttpServletResponse response = (HttpServletResponse) res; 47 | if (StringUtils.isNotEmpty(allowOrigin)) { 48 | //允许访问的客户端域名,例如:http://web.xxx.com,若为*,则表示从任意域都能访问,即不做任何限制; 49 | response.setHeader("Access-Control-Allow-Origin", allowOrigin); 50 | } 51 | if (StringUtils.isNotEmpty(allowMethods)) { 52 | //允许访问的请求方式,多个用逗号分割,例如:GET,POST,PUT,DELETE,OPTIONS; 53 | response.setHeader("Access-Control-Allow-Methods", allowMethods); 54 | } 55 | if (StringUtils.isNotEmpty(allowCredentials)) { 56 | //是否允许请求带有验证信息,若要获取客户端域下的cookie时,需要将其设置为true; 57 | response.setHeader("Access-Control-Allow-Credentials", allowCredentials); 58 | } 59 | if (StringUtils.isNotEmpty(allowHeaders)) { 60 | //允许服务端访问的客户端请求头,多个请求头用逗号分割,例如:Content-Type,Access-Token,timestamp 61 | response.setHeader("Access-Control-Allow-Headers", allowHeaders); 62 | } 63 | if (StringUtils.isNotEmpty(exposeHeaders)) { 64 | //允许客户端访问的服务端响应头,多个响应头用逗号分割。 65 | response.setHeader("Access-Control-Expose-Headers", exposeHeaders); 66 | } 67 | chain.doFilter(req, res); 68 | } 69 | 70 | @Override 71 | public void destroy() { 72 | 73 | } 74 | 75 | } 76 | -------------------------------------------------------------------------------- /ssm-web/src/main/resources/jdbc.properties: -------------------------------------------------------------------------------- 1 | jdbc.url=jdbc:mysql://localhost:3306/ssm-demo?useUnicode=true&characterEncoding=utf8 2 | jdbc.username=root 3 | jdbc.password=root -------------------------------------------------------------------------------- /ssm-web/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | #\u5B9A\u4E49LOG\u8F93\u51FA\u7EA7\u522B 2 | log4j.rootLogger=INFO,Console,File 3 | #\u5B9A\u4E49\u65E5\u5FD7\u8F93\u51FA\u76EE\u7684\u5730\u4E3A\u63A7\u5236\u53F0 4 | log4j.appender.Console=org.apache.log4j.ConsoleAppender 5 | log4j.appender.Console.Target=System.out 6 | #\u53EF\u4EE5\u7075\u6D3B\u5730\u6307\u5B9A\u65E5\u5FD7\u8F93\u51FA\u683C\u5F0F\uFF0C\u4E0B\u9762\u4E00\u884C\u662F\u6307\u5B9A\u5177\u4F53\u7684\u683C\u5F0F 7 | log4j.appender.Console.layout=org.apache.log4j.PatternLayout 8 | log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n 9 | #\u6587\u4EF6\u5927\u5C0F\u5230\u8FBE\u6307\u5B9A\u5C3A\u5BF8\u7684\u65F6\u5019\u4EA7\u751F\u4E00\u4E2A\u65B0\u7684\u6587\u4EF6 10 | log4j.appender.File=org.apache.log4j.RollingFileAppender 11 | #\u6307\u5B9A\u8F93\u51FA\u76EE\u5F55 12 | log4j.appender.File.File=${catalina.home}/logs/ssm.log 13 | #\u5B9A\u4E49\u6587\u4EF6\u6700\u5927\u5927\u5C0F 14 | log4j.appender.File.MaxFileSize=10MB 15 | # \u8F93\u51FA\u6240\u4EE5\u65E5\u5FD7\uFF0C\u5982\u679C\u6362\u6210DEBUG\u8868\u793A\u8F93\u51FADEBUG\u4EE5\u4E0A\u7EA7\u522B\u65E5\u5FD7 16 | log4j.appender.File.Threshold=ALL 17 | log4j.appender.File.layout=org.apache.log4j.PatternLayout 18 | log4j.appender.File.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n -------------------------------------------------------------------------------- /ssm-web/src/main/resources/mapper/UserMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | delete from t_user 11 | where u_id = #{uId,jdbcType=INTEGER} 12 | 13 | 14 | insert into t_user (u_id, u_name, u_password 15 | ) 16 | values (#{uId,jdbcType=INTEGER}, #{uName,jdbcType=VARCHAR}, #{uPassword,jdbcType=VARCHAR} 17 | ) 18 | 19 | 20 | update t_user 21 | set u_name = #{uName,jdbcType=VARCHAR}, 22 | u_password = #{uPassword,jdbcType=VARCHAR} 23 | where u_id = #{uId,jdbcType=INTEGER} 24 | 25 | 30 | 34 | -------------------------------------------------------------------------------- /ssm-web/src/main/resources/spring/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /ssm-web/src/main/resources/spring/spring-mvc.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ssm-web/src/main/resources/spring/spring-mybatis.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 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 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /ssm-web/src/main/resources/t_user.sql: -------------------------------------------------------------------------------- 1 | /* 2 | SQLyog 企业版 - MySQL GUI v8.14 3 | MySQL - 5.7.12-log : Database - ssm-demo 4 | ********************************************************************* 5 | */ 6 | 7 | /*!40101 SET NAMES utf8 */; 8 | 9 | /*!40101 SET SQL_MODE=''*/; 10 | 11 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 12 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 13 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 14 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 15 | CREATE DATABASE /*!32312 IF NOT EXISTS*/`ssm-demo` /*!40100 DEFAULT CHARACTER SET utf8 */; 16 | 17 | USE `ssm-demo`; 18 | 19 | /*Table structure for table `t_user` */ 20 | 21 | DROP TABLE IF EXISTS `t_user`; 22 | 23 | CREATE TABLE `t_user` ( 24 | `u_id` int(11) unsigned NOT NULL AUTO_INCREMENT, 25 | `u_name` varchar(50) NOT NULL, 26 | `u_password` varchar(100) NOT NULL, 27 | PRIMARY KEY (`u_id`) 28 | ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 29 | 30 | /*Data for the table `t_user` */ 31 | 32 | insert into `t_user`(`u_id`,`u_name`,`u_password`) values (1,'leeyom','123'); 33 | 34 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 35 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 36 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; 37 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 38 | -------------------------------------------------------------------------------- /ssm-web/src/main/webapp/WEB-INF/test.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Created by IntelliJ IDEA. 3 | User: leeyom 4 | Date: 17/7/31 5 | Time: 22:36 6 | To change this template use File | Settings | File Templates. 7 | --%> 8 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 9 | 10 | 11 | 测试spring mvc 12 | 13 | 14 |

hello world!

${user.uName} 15 | 16 | 17 | -------------------------------------------------------------------------------- /ssm-web/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | ssm-demo 7 | 8 | 9 | 10 | contextConfigLocation 11 | classpath:spring/spring-mybatis.xml 12 | 13 | 14 | 15 | 16 | encodingFilter 17 | org.springframework.web.filter.CharacterEncodingFilter 18 | true 19 | 20 | encoding 21 | UTF-8 22 | 23 | 24 | 25 | encodingFilter 26 | /* 27 | 28 | 29 | 30 | 31 | org.springframework.web.context.ContextLoaderListener 32 | 33 | 34 | 35 | 36 | org.springframework.web.util.IntrospectorCleanupListener 37 | 38 | 39 | 40 | 41 | SpringMVC 42 | org.springframework.web.servlet.DispatcherServlet 43 | 44 | contextConfigLocation 45 | classpath:spring/spring-mvc.xml 46 | 47 | 1 48 | true 49 | 50 | 51 | SpringMVC 52 | / 53 | 54 | 55 | /index.jsp 56 | 57 | -------------------------------------------------------------------------------- /ssm-web/src/main/webapp/index.jsp: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Hello World!

4 | 5 | 6 | -------------------------------------------------------------------------------- /ssm-web/src/test/java/TestMybatis.java: -------------------------------------------------------------------------------- 1 | import com.leeyom.pojo.User; 2 | import com.leeyom.service.user.UserService; 3 | import org.junit.Before; 4 | import org.junit.Test; 5 | import org.springframework.context.ApplicationContext; 6 | import org.springframework.context.support.ClassPathXmlApplicationContext; 7 | 8 | public class TestMybatis { 9 | 10 | private ApplicationContext ac = null; 11 | private UserService userService = null; 12 | 13 | @Before 14 | public void before() { 15 | ac = new ClassPathXmlApplicationContext("classpath:spring/spring-mybatis.xml"); 16 | userService = (UserService) ac.getBean("userService"); 17 | } 18 | 19 | @Test 20 | public void testMybtis() { 21 | User user = userService.getUserById(1); 22 | System.out.println(user.getuName() + "------>" + user.getuPassword()); 23 | } 24 | 25 | } 26 | --------------------------------------------------------------------------------