SpringCloud初步配置之起步

spring cloud是一个微服务治理框架,主要解决的是以前单应用过于臃肿的一些难点,在这里记录下初次使用springcloud的一些过程

创建一个springboot应用

在这里使用的是IDEA的spring Initializr创建的,创建好了之后将application.properties改成application.yml,其项目结构图如下:

在这里需要注意的是由于在这里的Test文件中含有一个@RunWith注解,所以需要在pom.xml中引入springboot的test包,否则项目可能启动不起来

引入spring cloud包

阅读更多

shiros自定义异常的跳转

在shiro中经常需要对特定的异常及进行特殊的处理。一般来讲在shiro中配置的话是通过如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/login.jsp" />
<property name="unauthorizedUrl" value="/unauthorized.jsp" />
<!--<property name="filters">-->
<!--<map>-->
<!--<entry key="roles" value-ref="roles" />-->
<!--<entry key="perms" value-ref="perms" />-->
<!--</map>-->
<!--</property>-->
<!-- 过滤链定义 -->
<property name="filterChainDefinitions">
<value>
<!--/role/** authc-->
<!--/login/main authc-->
<!--api/logincheck authc-->
<!--message/detail role[EMPLOYEE]-->
</value>
</property>
</bean>

但是在这里配置的话会有一个问题,就是通过注解@RequireRoles()这个来配置的权限会导致这里的配置一直无法生效,也就是当无权限的人访问需要特定权限的URL的时候就会直接在页面上显示500,而不是返回我这个指定的URL,后来查询得知有如下几个需要注意的:

  1. 使用配置的方式配置权限的话该xml可以生效
  2. 使用注解配置权限的话但是使用xml方式配置错误跳转页面不会跳转至指定URL

所以在项目中使用注解配置权限的话需要在xml配置文件中配置一个异常和其处理的相关url,如下:

阅读更多

Mybatis中sql排序以及#和$的区别(二)

mybatis的orderby

在使用mybatis的时候,一般来讲是使用#{}这种方式来设置sql的参数,因为mybatis在解析sql的时候的时候对于使用#{}的参数首先会解析成?,然后再加入参数。具体可以看mybatis的解析日志:

1
2
DEBUG [main] - ==>  Preparing: select * from clazzentity where clazz_name = ? 
DEBUG [main] - ==> Parameters: 一年级(String)

但是在mybatis中如果需要使用groupby和orderby的话就需要注意不可以使用#了,因为使用#的话会导致解析出来的参数自动的带了一个引号,而使用$的话就会直接把参数带进去,所以在进行groupby的时候是需要使用$来进行参数的替换的。但是在使用${}这个的时候需要注意下。

mybatis的多参数和单参数

阅读更多

mybatis和mysql得相关记录

首先对于Mybatis来说,如果是直接复制mysql里面的语句粘贴到mybatis的mapper文件里面去的话很容易导致user读取出错,假设在mysql中select * from user XX,若直接把这条sql语句复制到mapper文件中的话会导致user会成为mapper文件中的关键字

mybatis中多条语句插入和主键返回

在Mybatis的使用中,有时候会出现需要一对多的场景,尤其是在插入的过程中,即假设存在A,B两表。A表对B表是一对多的关系,在插入数据的过程中需要先插入A表,通过A表返回的主键然后再进行B表的查询,这个时候一般有两种操作。

方法一:首先获取A表的主键,然后通过for循环进行B表的插入
方法二:使用mybatis的foreach进行多条语句的插入

在这里的话主要是记录下第二种方法,即通过mybatis的foreach来实现多条语句的插入:

建立数据库表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> select * from clazz;
+----------+------------+
| CLAZZ_ID | CLAZZ_NAME |
+----------+------------+
| 1 | 一年级 |
+----------+------------+
1 row in set (0.00 sec)


mysql> select * from student;
+----------+--------+----------+
| CLAZZ_ID | STU_ID | STU_NAME |
+----------+--------+----------+
| 1 | 101 | a |
| 1 | 102 | b |
+----------+--------+----------+
2 rows in set (0.00 sec)
阅读更多

Spring通过序列化返回json数据

一般来讲在Spring中可以直接加@ResponeBody来直接返回Json格式的数据,但是这样又有点别扭,因为Stirng同时也可以返回视图名称,但是加了@ResponseBody之后便可以返回Json了,为了解决这个问题还有一种解决办法就是指定一个Result来实现序列化接口然后直接返回这个对象,最后在spring-mvc.xml这个配置文件中配置解析器就可以了。

添加依赖:

1
2
3
4
5
6
7
8
9
10
11
12
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>

配置spring-mvc.xml依赖:

1
2
3
4
5
6
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
阅读更多

在Mybatis中使用bind进行枚举和模糊查询

首先在网上查询了下关于bind得用法,网上大多数都是bind和模糊查询绑定在一起,但是在这里的话其实bind和枚举一起结合起来使用会有很大的便利,比如一个班级的名称和班级的ID,需要根据班级的ID查询出班级的姓名的话,一般在mybatis中的sql语句是select * from table where class_id =#{class_id} 但是这样就有一个问题,假设学校现在系统升级,每一个班级的ID都变了,这时候需要到处修改mybatis的参数,将其修改成为正确的ID,那么这是一个浩大的工程,同时如果以后再需要改的话,会比较麻烦。处理这个问题,这个时候有如下方法:

  1. 枚举和typehandle组合解决问题;
  2. 枚举和bind一起组合解决;
  3. 暂时没想到

##枚举和bind组合解决:
新建一个实体类:

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
public class clazzEntity {
private String clazz_name;
private int clazz_id;

public clazzEntity(String clazz_name, int clazz_id) {
this.clazz_name = clazz_name;
this.clazz_id = clazz_id;
}

public String getClazz_name() {
return clazz_name;
}

public void setClazz_name(String clazz_name) {
this.clazz_name = clazz_name;
}

public int getClazz_id() {
return clazz_id;
}

public void setClazz_id(int clazz_id) {
this.clazz_id = clazz_id;
}
}

新建一个枚举类:

阅读更多

在Mybatis中使用association进行一对一查询

在今天主要是测试了下在mybatis中使用两种方式来进行一对一查询。在mybatis中进行普通查询的话肯定是一个JavaBean对应一个Sql语句,但是当需要进行两表或者多表之间一对一的查询的时候就需要使用mybatis中的association进行一对一查询,而association的设置一般有两种方式:

##基础类:
员工类:

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
public class People implements Serializable {
private int people_id;
private String people_card;
private Role role;

public int getPeople_id() {
return people_id;
}

public void setPeople_id(int people_id) {
this.people_id = people_id;
}

public String getPeople_card() {
return people_card;
}

public void setPeople_card(String people_card) {
this.people_card = people_card;
}

public Role getRole() {
return role;
}

public void setRole(Role role) {
this.role = role;
}
}

权限类:

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
public class Role  implements Serializable {
private int myrole_id;
private String role_name;
private RoleDetail roleDetail;

public RoleDetail getRoleDetail() {
return roleDetail;
}

public void setRoleDetail(RoleDetail roleDetail) {
this.roleDetail = roleDetail;
}

public int getMyrole_id() {
return myrole_id;
}

public void setMyrole_id(int myrole_id) {
this.myrole_id = myrole_id;
}

public String getRole_name() {
return role_name;
}

public void setRole_name(String role_name) {
this.role_name = role_name;
}
}
阅读更多

记踩过的SpringMvc的一些坑

时隔一年多,再次在新公司期间接触了SpringMvc,由于之前一段时间再用Python和SpringBoot做项目,所以一时间导致SpringMvc配置中出现了好多坑,遂逐一记录:

关于Dao层找不到的异常

在配置的过程中这个异常出现的次数是最多的,也是最烦人的,一般是由于在Controller层中找不到Service层,然后Service层的Impl在自动装配dao的时候找不到dao,所以异常就会沿着service到达contrller层,但是总结起来,在今天的配置中遇到的情况主要又以下几种:

web.xml中的配置出现了错误:

在Spring5中默认xml文件是在WEB-INF中的,于是也就想着少配置一点是一点的原则,所以在web.xml中只是配置了分发器。但是今天却在其中发现了一些可能会导致Dao层找不到的原因,如下所示是我之前在web.xml中配置的一个详情:

阅读更多