SSM注意事项以及异常信息

String 注意事项

异常状态

1、DI注入

Address 类型 引用时注意 引用的包名 不是 import com.sun.xml.internal.ws.wsdl.writer.document.http.Address;

​ 而是 java.util 包中的

复杂注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="address" class="com.xjx.pojo.Address">
        <property name="address" value="萍乡"></property>
    </bean>

    <bean id="student" class="com.xjx.pojo.Student">
<!--        第一种,普通值注入,value-->
        <property name="name" value="萧然"/>
<!--        第二种,bean注入,ref-->
        <property name="address" ref="address" />
<!--        第三种,数组-->
        <property name="books">
            <array>
                <value>红楼梦</value>
                <value>西游记</value>
                <value>水浒传</value>
                <value>三国演义</value>
            </array>
        </property>
<!--        第四种,list-->
        <property name="hobbys">
            <list>
                <value>听歌</value>
                <value>敲代码</value>
                <value>看动漫</value>
                <value>日本語の勉強</value>
            </list>
        </property>
<!--        第五种,Map-->
        <property name="card">
            <map>
                <entry key="身份证" value="362202200003456154"></entry>
                <entry key="手机号" value="1565541068"></entry>
            </map>
        </property>
<!--        第六种,Set-->
        <property name="games">
            <set>
                <value>LOL</value>
                <value>COC</value>
                <value>BOB</value>
            </set>
        </property>
<!--        第七种,null-->
        <property name="wife">
            <null/>
        </property>
<!--        第八种,Proerties-->
        <property name="info">
            <props>
                <prop key="学号">20190305</prop>
                <prop key="姓名">萧然</prop>
                <prop key="性别"></prop>
                <prop key="username">admin</prop>
                <prop key="password">sa123</prop>
            </props>
        </property>
    </bean>


</beans>

2.使用注解自动装配

异常信息:

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 17 in XML document from class path resource [beans.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 17; columnNumber: 33; cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 ‘context:annotation-config’ 的声明。

这里报错指向的是加载xml文件哪一行

在这里插入图片描述

当要实现注解扫描的时候

出现这种问题是xsi:schemaLocation没有让你导入的命名空间找到对应的URI地址

3.纯注解,配置AOP

xml文件一定要有

<!--配置Spring的扫描目录,同时也会注册@Autowired @Resource 等注解-->
<context:component-scan base-package="com.xjx"/>
<!--   // 开启切面自动代理-->
<aop:aspectj-autoproxy/>

AOP 切面

package com.xjx.Aoontation;
//全注解

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component//向Spring容器中注册MyAopAspectAnnotation
@Aspect//切面类的注解
public class MyAopAspectAnnotation {
    public MyAopAspectAnnotation(){
        System.out.println("MyAopAspectAnnotation静态初始化");
    }
    /**
     * 定义切点 用于取代:<aop:pointcut id="myPointcut" expression="execution(*
     com.gx.dao..*.*(..))"/>
     * 要求:方法必须是private,没有值,名称自定义,没有参数
     */
    @Pointcut("execution(* com.xjx.service.UserServiceImpl.*(..))")
    private void myPointcut() {

    }
    @Before(value = "myPointcut()")
    private void befor(){
        System.out.println("=======方法执行前=======");
    }
    @After(value = "myPointcut()")
    private void after(){
        System.out.println("=======方法执行后=======");
    }

}

测试类接口

package com.xjx.service;

public interface UserService {
    public void add();
    public void delete();
    public void update();
    public void select();
}

测试类接口实现

package com.xjx.service;

public class UserServiceImpl implements UserService{
    @Override
    public void add() {
        System.out.println("新增了一个用户");
    }

    @Override
    public void delete() {
        System.out.println("删除了一个用户");
    }

    @Override
    public void update() {
        System.out.println("修改了一个用户");
    }

    @Override
    public void select() {
        System.out.println("查询了一个用户");
    }
}

xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

 <context:component-scan base-package="com.xjx"/>


   <!--注册bean-->
    <bean id="userService" class="com.xjx.service.UserServiceImpl"/>
    <bean id="log" class="com.xjx.log.Log"/>
    <bean id="afterLog" class="com.xjx.log.AfterLog"/>
<!--        方式一:使用原生Spring API接口-->
<!--    配置aop:需要导入aop的约束-->
<!--    <aop:config>-->
<!--&lt;!&ndash;        切入点:expression:表达式,execution(要执行的位置 * * * * *)&ndash;&gt;-->
<!--        <aop:pointcut id="pointcut" expression="execution(* com.xjx.service.UserServiceImpl.*(..))"/>-->

<!--&lt;!&ndash;        执行环绕增强&ndash;&gt;-->
<!--        <aop:advisor advice-ref="log" pointcut-ref="pointcut"/>-->
<!--        <aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/>-->
<!--    </aop:config>-->
    
<!--    方式二:自定义类-->
<!--    <bean id="diy" class="com.xjx.diy.DiyPointCut"/>-->
<!--    -->
<!--    <aop:config>-->
<!--&lt;!&ndash;        自定义切面,ref 要引用的类&ndash;&gt;-->
<!--        <aop:aspect ref="diy">-->
<!--&lt;!&ndash;            切入点&ndash;&gt;-->
<!--            <aop:pointcut id="point" expression="execution(* com.xjx.service.UserServiceImpl.*(..))"/>-->
<!--&lt;!&ndash;            通知     切入自定义类               要切入的切入点&ndash;&gt;-->
<!--&lt;!&ndash;            before 前置  after 后置&ndash;&gt;-->
<!--            <aop:before method="before" pointcut-ref="point"/>-->
<!--            <aop:after method="after" pointcut-ref="point"/>-->
<!--        </aop:aspect>-->
<!--    </aop:config>-->

<!--    方式三         也可以直接用注解注入bean-->
<!--    <bean id="annotationPointCut" class="com.xjx.Aoontation.AoontationPointCut"/>-->
<!--   // 开启切面自动代理-->
    <aop:aspectj-autoproxy/>
</beans>

SpringMvc 注意事项

1、新建项目

1.1、添加web支持

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYLv9XA7-1649294109501)(images\Snipaste_2021-12-12_10-12-41.png)]

1.2、统一 UTF-8编译环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3AiGx6hj-1649294109503)(images\Snipaste_2021-12-12_10-15-09.png)]

1.3、配置Tomcat
-Dfile.encoding=UTF-8

​	[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bKklLgxl-1649294109504)(images\Snipaste_2021-12-12_10-22-13.png)]

​ 修改Tomcat运行目录(可以把后面自动生成的删掉)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d0KPF3Uk-1649294109504)(images\Snipaste_2021-12-12_10-05-44.png)]

完成之后运行看一下能不能找到初始页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DdRgbqB3-1649294109505)(images\Snipaste_2021-12-12_10-20-52.png)]

1.4、导入相关java包 (这个时候还没了解Maven)

lib放在WEB-INF下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V75mcIrf-1649294109505)(images\Snipaste_2021-12-12_10-28-18.png)]

创建xml文件放在src文件下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ExsRGDmh-1649294109506)(images\Snipaste_2021-12-12_10-34-33.png)]

2、启动异常

异常信息:12-Dec-2021 15:02:33.152 严重 [main] org.apache.catalina.util.LifecycleBase.handleSubClassException 初始化组件[Connector[HTTP/1.1-8080]]失败。

原因:进程8080被占用

查找线程 占用 8080 端口

netstat -ano

任务管理器 —》详细信息 找到相应PID 结束进程 搞定

或者

taskkill -f -pid 15476 (后面是自己要停的id)
成功: 已终止 PID 为 15476 的进程。

搞定

异常信息: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use: JVM_Bind

这个是1099端口被占用

解决方法,同上

3、修改默认启动页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GRNWrODP-1649294109506)(images\Snipaste_2021-12-12_16-05-57.png)]

4、使用HttpServletRequest中的两个包需要从Tomact环境中引用(servlet-api.jar和jsp-api.jar)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZePejzos-1649294109507)(images\Snipaste_2021-12-12_19-23-41.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z0T1yB1w-1649294109507)(images\Snipaste_2021-12-12_19-12-44.png)]

5、跳转路径

页面的跳转路径要和@RequestMapping注解的value值一致
这一块@Controller层还有一个@RequestMapping(“/returnType”)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LupITx8r-1649294109508)(images\Snipaste_2021-12-12_19-45-48.png)]

6、测试页面返回Json数据

引入:JQ

​ javkson-annotations-2.11.1.jar
​ javkson-core-2.11.1.jar
​ javkson-databind-2.11.1.jar

​ SpringMVC-servlet.xml

添加:mvc依赖

<!--引入mvc后需要添加    mvc注解驱动-->
    <mvc:annotation-driven/>


<!--    静态资源映射-->
    <mvc:resources mapping="/js/**" location="/js/"/>

启动 异常 jq找不到资源 页面报500错误

异常信息:12-Dec-2021 20:28:36.865 严重 [http-nio-8080-exec-6] org.springframework.web.servlet.FrameworkServlet.initServletBean Context initialization failed org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 22 in XML document from class path resource [springMVC-servlet.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 22; columnNumber: 29; cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明。

xml文件错误,复制的时候弄错了,离谱的是可以点进去

在这里插入图片描述

搞定

7、时间处理

注意type为datetime-local时

时间是没有秒的 格式如果为@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)

请求报400异常

数据格式对不上

birthday:<input name="birthday" type="datetime-local"> <br>

异常信息:14-Dec-2021 16:45:38.132 警告 [http-nio-8080-exec-4] org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.logException Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type ‘java.lang.String’ to required type ‘java.util.Date’; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.format.annotation.DateTimeFormat java.util.Date] for value ‘2021-12-14T16:42’; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2021-12-14T16:42]]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z73AkT93-1649294109509)(images\Snipaste_2021-12-14_16-45-34.png)]

MyBatis 注意事项

1、异常信息:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

在这里插入图片描述
在这里插入图片描述
映射文件中SQL语句的id要和mapper接口中的方法名不一致

2、版本问题

配置连接数据库的数据源配置

3.0+版本:<property name="driver" value="com.mysql.jdbc.Driver"/>

8.0+版本:<property name="driver" value="com.mysql.cj.jdbc.Driver"/>


3、异常信息:java.sql.SQLException: The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the ‘serverTimezone’ configuration property) to use a more specifc time zone value if you want to utilize time zone support.

解决办法:MySQl数据库8.0之后链接数据库要加上时区以及字符信息

4.数据库参数通过properties引入注意事项

在这里插入图片描述

5.小结

MyBatis Meaven工程创建 =》创建MyBatis核心配置文件=》jdbc.properties外置引入===》创建实体类===》创建mapper接口方法===》创建MyBatis_Mapper.xml映射文件===》测试是否成功增删改查

Meaven工程创建 pom.xml文件

主要引入MyBatis核心以及MySql驱动

<!-- Mybatis核心 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!-- junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- MySQL驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

创建MyBatis核心配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!--
    MyBatis核心配置文件中标签顺序
    he content of element type "configuration" must match "
    (properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,
    objectWrapperFactory?,reflectorFactory?,plugins?,environments?,
    databaseIdProvider?,mappers?
-->


    <!--引入properties文件-->
    <properties resource="jdbc.properties"></properties>

    <!--    设置类型别名-->
    <typeAliases>
        <!--
        typeAlias:设置某个类型的别名
        属性:
            type:设置需要设置类型的别名
            alias:设置某个类型的别名,若不设置别名,那么该类型拥有默认的别名,即类名且不区分大小写
-->
        <!--        <typeAlias type="com.xjx.mybatis.pojo.User" alias="User"/>-->
        <!--        以包为单位,将包下所有的类型设置默认的类型别名,即类名且不区分大小写-->
        <package name="com.xjx.mybatis.pojo"/>
    </typeAliases>

    <!--设置连接数据库的环境-->
    <!--
    environments:配置多个链接数据库的环境
    属性:
        default:设置默认使用环境的id
-->
    <environments default="development">
        <!--        environment:配置某个具体的环境
            属性:
                id:表示链接数据库的环境的唯一标识  不能重复
            -->
        <environment id="development">
            <!--            transactionManager:设置事务管理方式
                属性:
                type="JDBC|MANAGED"
                JDBC:表示当前环境中,执行SQL时使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动来处理
                MANAGED:被管理,例如Spring
 -->
            <transactionManager type="JDBC"/>
            <!--
            dataSource:配置数据源
            属性:
                type:设置数据源类型
                type=“POOLED|UNPOOLED|JNDI”
                POOLED:表示使用数据库连接池来缓存数据库链接
                UNPOOLED:表示不使用数据库连接池
                JNDI:表示使用上下文中的数据源
-->
            <dataSource type="POOLED">
                <!--                设置链接数据库的驱动-->
                <property name="driver" value="${jdbc.driver}"/>
                <!--                设置;链接数据库的链接地址-->
                <property name="url" value="${jdbc.url}"/>
                <!--                设置链接数据库的用户名-->
                <property name="username" value="${jdbc.username}"/>
                <!--                设置链接数据库的密码-->
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--
    resources文件下创建包     用/分开    用.分开只是文件夹全名
-->
    <!--引入映射文件-->
    <mappers>
        <!--        <mapper resource="mappers/UserMapper.xml"/>-->
        <!--
        以包为单位引入映射文件
        要求:
        1、mapper接口所在的包要和映射文件所在的包一致
        2、mapper接口要和映射文件的名字一致
-->
        <package name="com.xjx.mybatis.mapper"/>
    </mappers>
</configuration>

将数据库地址配置环境外置引入

jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
#  jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai&amp;useSSL=false
jdbc.username=root
jdbc.password=root

MyBatis_Mapper.xml映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--必须和接口全类名一致 (命名空间)-->
<mapper namespace="com.xjx.mybatis.mapper.ParameterMapper">

    <!--    List<User> getAllUser();-->
    <!--
        查询功能的标签必须设置resultType或resultMap
        resultType:设置默认的映射关系    字段名和属性名一致
        resultMap:设置自定义的映射关系    一对多,多对一
    -->

    <select id="getAllUser" resultType="User">
        select * from t_user
    </select>
</mapper>

封装SqlSessionUtils工具类

public class SqlSessionUtils {
    public static SqlSession getSqlSession(){
        SqlSession sqlSession=null;
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            sqlSession = sqlSessionFactory.openSession(true);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSession;
    }
}

log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
%m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>

    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

6.无效的绑定语句

异常信息:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xjx.mybatis.mapper.ParameterMapper.checkLogin

报错原因:MyBatis映射文件SQL语句ID和mapper接口方法没有一致

在这里插入图片描述

7.SQL参数绑定异常

异常信息:Cause: org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters are [arg1, arg0, param1, param2]

多参数 arg+顺序数 0开始

8.mapper接口的方法的参数是实体类类型的参数 新增中文乱码问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ukOWAV1q-1649298160850)(images\Snipaste_2022-02-28_15-00-18.png)]

为什么这种方式新增需要修改IDEA字符编码,非传参新增不需要修改也不会导致中文乱码

9.SQL语法错误

异常信息:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from t_user where id = 5' at line 1

10.TooManyResultsException

解决:1、SQL希望返回一行数据,但实际select得到的,超过一行数据。

​ 2、先查清楚SQL和WHERE条件,确定是返回一行的情况,再测试方法。

​ 3、或者直接用List集合接收

11.Mybatis核心文件或者映射文件没有写全

异常信息:Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: The setting is not known. Make sure you spelled it correctly (case sensitive). ![在这里插入图片描述](https://img-blog.csdnimg.cn/dd6c073a858f46e6a542b127a45f9f9c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JCn5rCP6JCn54S2,size_20,color_FFFFFF,t_70,g_se,x_16) ### 12.实体类异常 异常信息:Caused by: org.apache.ibatis.reflection.ReflectionException: Cannot set value of property 'dept.did' because 'dept.did' is null and cannot be instantiated on instance of com.xjx.mybatis.pojo.Dept. Cause:org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.xjx.mybatis.pojo.Dept with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.xjx.mybatis.pojo.Dept.()

在这里插入图片描述
修改之后依旧报错

异常信息:Cause: org.apache.ibatis.reflection.ReflectionException: Cannot set value of property 'dept.did' because 'dept.did' is null and cannot be instantiated on instance of com.xjx.mybatis.pojo.Dept. Cause:org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.xjx.mybatis.pojo.Dept with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.xjx.mybatis.pojo.Dept.()

Error instantiating class com.xjx.mybatis.pojo.Emp with invalid types (Integer,String,Integer,String,String,Dept) or values (1,小明,15,男,111@qq.com,1). Cause: java.lang.IllegalArgumentException: argument type mismatch

解决办法:实体类中只有有参构造器,需创建一个无参构造器。

13.IllegalArgumentException异常

异常信息:Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.xjx.mybatis.mapper.EmpMapper.getEmpAndDeptByStepTwo

原因select属性没有写全类名

<association property="dept"
                     select="getEmpAndDeptByStepTwo"
                     column="did"></association>

在这里插入图片描述
在这里插入图片描述

14.开启延迟加载

异常信息:Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: The setting lazyLoadingEnabled is not known. Make sure you spelled it correctly (case sensitive).

在这里插入图片描述

复制参数名时多了个空格

在这里插入图片描述

在这里插入图片描述

节省资源

1现在我需要先查询用户信息,再查询相关部门信息

​ 不开启延迟加载:先全部查询出来,再给出结果

​ 开启延迟加载:先查询用户信息,给结果,再查询相关部门信息,给结果

2直接通过条件查询部门信息

​ 不开启延迟加载:先全部查询出来,再给出结果

​ 开启延迟加载:先查询用户信息,再查询相关部门信息,给结果

全局开启延迟加载后,如果有部分步式查询想要立即加载怎么解决?

​ fetchType属性可以控制下一步查询立即加载 注意:只有在开启了延迟加载时,才会生效,

select: 设置分布查询的sql的唯一标识(namespace.SQLId或mapper接口的全类名。方法名)
column: 设置分步查询的条件
fetchType:  eager立即加载  lazy延迟加载
<association property="dept"
             select="com.xjx.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo"
             column="did"
             fetchType="eager"></association>

多对一:对象		多个人对应一个部门	创建部门对象在员工信息实例中	private Dept dept;		<association property="dept" javaType="Dept">

一对多:集合		一个部门对应多个人	创建数组员工信息在部门实例中	public List<Emp> emp;	<collection property="emps" ofType="Emp">

15.resultMap重复

异常信息:Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'com/xjx/mybatis/mapper/DeptMapper.xml'. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.xjx.mybatis.mapper.DeptMapper.deptAndEmpResultMap

在这里插入图片描述

16.逆向工程

正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程 的。

逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类 Mapper接口 Mapper映射文件
在这里插入图片描述
异常信息:Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.0:generate (default-cli) on project MyBatis_MBG: Exception getting JDBC Driver
链接不了数据库,获取JDBC驱动时异常
在这里插入图片描述

17、逆向工程测试

异常信息:Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

修改:jdbc.driver=com.mysql.cj.jdbc.Driver

异常信息:Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: com.mysql.cj.jdbc.Driver

修改后报了另外一个异常,检查一下驱动版本

MySql驱动版本为5.1.8

说明上面的越改问题越大:给它改回去

jdbc.driver=com.mysql.jdbc.Driver

检查链接地址:jdbc.url=jdbc:mysql://localhost:13306/mybatis?useUnicode=true&characterEncoding=UTF-8

这个地址用的是6.+的驱动链接地址

修改:jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8

异常信息:Cause: java.sql.SQLException: Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.

还是异常

接着改:jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8

行了

注意:

generatorConfig.xml 文件配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!--
    targetRuntime: 执行生成的逆向工程的版本
    MyBatis3Simple: 生成基本的CRUD(清新简洁版)
    MyBatis3: 生成带条件的CRUD(奢华尊享版)
    -->
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!-- 数据库的连接信息 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=UTF-8"
                        userId="root"
                        password="root">
        </jdbcConnection>
        <!-- javaBean的生成策略-->
        <javaModelGenerator targetPackage="com.xjx.mybatis.bean"
                            targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- SQL映射文件的生成策略 -->
        <sqlMapGenerator targetPackage="com.xjx.mybatis.mapper"
                         targetProject=".\src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- Mapper接口的生成策略 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.xjx.mybatis.mapper" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        <!-- 逆向分析的表 -->
        <!-- tableName设置为*号,可以对应所有表,此时不写domainObjectName -->
        <!-- domainObjectName属性指定生成出来的实体类的类名 -->
        <table tableName="t_emp" domainObjectName="Emp"/>
        <table tableName="t_dept" domainObjectName="Dept"/>
    </context>
</generatorConfiguration>
jdbc.properties 配置
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.xjx.mybatis</groupId>
    <artifactId>MyBatis_MBG</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <!-- 依赖MyBatis核心包 -->
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>

        <!-- junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- MySQL驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.3</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

    </dependencies>

    <!-- 控制Maven在构建过程中相关配置 -->
    <build>
        <!-- 构建过程中用到的插件 -->
        <plugins>
            <!-- 具体插件,逆向工程的操作是以构建过程中插件形式出现的 -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.0</version>
                <!-- 插件的依赖 -->
                <dependencies>
                    <!-- 逆向工程的核心依赖 -->
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.3.2</version>
                    </dependency>
                    <!-- 数据库连接池 -->
                    <dependency>
                        <groupId>com.mchange</groupId>
                        <artifactId>c3p0</artifactId>
                        <version>0.9.2</version>
                    </dependency>
                    <!-- MySQL驱动 -->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.8</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

</project>
中文异常

在这里插入图片描述
修改完没反应的话删一下缓存文件

请求异常

415异常

1、请求头指定数据类型错误

headers.put("Content-Type", "application/json; charset=utf-8");

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wx4CSCdp-1649299942308)(\images\Snipaste_2021-12-14_10-27-47.png)]。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值