SSM实战的一些小收获

1.浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别:
https://blog.csdn.net/ff906317011/article/details/78552426

2.Unknown column ‘xxx’ in ‘field list’

可能存在的问题有
1、javaBean和数据库里的字段名不对应,或者配置不匹配;
2、数据库里的字段名可能存在空格之类的细节错误;
3、字段名可能是关键字

我遇到的问题就是select的字段我写成了请求发过来的@Param的参数,导致了这个问题

3.Mysql添加数据时失败 Cannot add or update a child row: a foreign key constraint fails
原因:设置的外键与外键对应的表的主键值不匹配(换句话说你添加外键值在他所对的表中不存在)。
可以尝试在外键对应的表中添加一个主键值,在进行update

4.spring 中@Autowired注入失败问题:
解决方法是①首先查看@Autowired标记的字段对应的接口的实现类是否标记@Service、@Repository等交给Spring的IOC容器管理;②查看对应的类型是否一致或满足里氏代换原则,如@Autowired标记字段属性对应的接口的实现类是否实现了这个接口。
我就是忘记了@Service这个注解,尴尬

5.@Component, @Repository, @Service的区别
https://blog.csdn.net/fansili/article/details/78740877
@Component属于通用注解,可以自定义组件
@Repository属于持久层,注解类作为DAO(Data Access Object)对象
@Service属于业务逻辑层,注解类处理业务逻辑
@Controller作用于表现层(spring-mvc的注解),注解类进行前端请求的处理,转发,重定向。包括调用Service层的方法

6.MyBatis通过配置文件进行传参(多个)
https://www.cnblogs.com/mingyue1818/p/3714162.html
如果是注解的话,只需要在接口类加上@Param的注解,并且注意@Param注解的value适合ognl表达式#{}里的名称是一样的,不然匹配不到就会报错

7.mybatis中@Param的用法和作用
https://www.cnblogs.com/thomas12112406/p/6217211.html

@Select("select s_id id,s_name name,class_id classid from student where  s_name= #{aaaa} and class_id = #{bbbb}") 
public Student select(@Param("aaaa") String name,@Param("bbbb")int class_id);  
1.@Select(....)注解的作用就是告诉mybatis框架,执行括号内的sql语句

2.s_id id,s_name name,class_id classid  格式是 字段名+属性名,例如s_id是数据库中的字段名,id是类中的属性名,这段代码的作用就是实现数据库字段名和实体类属性的一一映射,不然数据库不知道如何匹配

3.where  s_name= #{aaaa} and class_id = #{bbbb} 表示sql语句要接受2个参数,一个参数名是aaaa,一个参数名是bbbb,如果要正确的传入参数,那么就要给参数命名,因为不用xml配置文件,那么我们就要用别的方式来给参数命名,这个方式就是@Param注解 

4.在方法参数的前面写上@Param("参数名"),表示给参数命名,名称就是括号中的内容

public Student select(@Param("aaaa") String name,@Param("bbbb")int class_id); 
给入参 String name 命名为aaaa,然后sql语句....where  s_name= #{aaaa} 中就可以根据aaaa得到参数值了

你可能感兴趣的:(java,web)