采用mybatis连接数据库时候出现的问题描述:

数据库连接配置正确,mybatis-config数据库等部分配置均正确,连接数据库是OK的

<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>

此时通过MybatisUtil测试可以获取到sqlsession,并打印出来;

然后配置jopo及对应的xml文件正确,此时发现将jopo对应的xml文件注册到mybatis-config时,添加如下信息后

<mappers>
<mapper resource="com/yusys/entity/StudentMapper.xml"/>
</mappers>

反而获取不到数据库连接,得不到sqlsession,打印出来为null;

最终对比检查发现问题出在jopo对应配置文件中,如下标黄部分

<mapper namespace="com.yusys.entity.StudentMapper">
<select id="selectById" parameterType="java.lang.Integer" resultType="Student">
select * from student where id=#{id}
</select>
</mapper>

该属性resultType应该对应完全限定名,否则找不到对应的类,不能形成映射,故而,在通过代码测试

InputStream is = MybatisUtil.class.getClassLoader()
.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);
session = sf.openSession();

的时候,加载mybatis-config.xml到mappers的注册信息时候不能正确加载,故而导致上面is流错误,从而后续session也就不能获取。

更改如下,在mybatis-config.xml中添加别名与Student对应上,如下:

<typeAliases>
<typeAlias type="com.yusys.entity.Student" alias="Student"/>
<package name="com.yusys.entity"/>
</typeAliases>

此时问题解决。

另一种办法是将属性resultType更改为其完全限定名

同时需要注意的是:

mybatis-config.xml配置文件配置时,要注意节点顺序

顺序同错误提示信息一致:

元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?

,databaseIdProvider?,mappers?)"

例如:将typeAliase写在properties前面打印session同样会是null

<configuration>
<typeAliases>
<typeAlias type="com.yusys.entity.Student" alias="Student"/>
<package name="com.yusys.entity"/>
</typeAliases>
<properties resource="db.properties"></properties>

有时eclipse还会提示错误,configuration下面会出现红色曲线进行提示

尤其要注意的是,在mybatis编写的pojo.xml和mybatis-config.xml的编写过程中一定要细心对应起来,不能多也不能少,否则均会报空,也就是session均会为null,比如别名里面配置一个Emp,但是实际src的POJO包下和pojo.xml中均没有体现,则就会报null,在这里一定要关联考虑,要删删干净,要加加全面,不得马虎。

比如

<typeAliases>
<typeAlias type="com.yusys.entity.Student" alias="Student"/>
<typeAlias type="com.yusys.entity.udent" alias="udent"/>    ============多余添加一个
<package name="com.yusys.entity"/>
</typeAliases>

运行结果会是

开启的+++session:null

Exception in thread "main" java.lang.NullPointerException  ===========空指针异常,因为多余的POJO不存在,无法编译通过
at com.yusys.test.Test.getStuById(Test.java:16)
at com.yusys.test.Test.main(Test.java:31)

在注册表中也不能多,如下:

<mappers>
<mapper resource="com/yusys/dao/StudentMapper.xml"/>

<mapper/>                            这个地方多出的一个空的映射注册表也不行,同样运行时候获取不到session

</mappers>

mybatis连接数据库出错获取不到SQLsession的更多相关文章

  1. mybatis根据property获取column

    mybatis根据property获取column mybatis根据类的属性获取xml文件中对应的column mybatis获取xml文件中property对应的column >>&g ...

  2. Mybatis 学习---${ }与#{ }获取输入参数的区别、Foreach的用法

    一.Mybatis中用#{}和${}获取输入参数的区别 1.“#{}“和“${}”都可以从接口输入中的map对象或者pojo对象中获取输入的参数值.例如 <mapper namespace=&q ...

  3. Mybatis抛出 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@f54509]异常

    今天在做Springmvc和spring 时 mybatis 是抛出异常 Closing non transactional SqlSession [org.apache.ibatis.session ...

  4. SpringBoot+MyBatis连接数据库

    SpringBoot通过MyBatis连接数据库有2种方法: 1.注解 2.XML文件 1.注解 1.构建项目 2.添加依赖: <dependencies> <dependency& ...

  5. mybatis整合spring获取配置文件信息出错

    描述:mybatis整合spring加载jdbc.properties文件,然后使用里面配置的值来 配置数据源,后来发现用户变成了admin- jdbc.properties的配置: 加载配置: 报错 ...

  6. Spring Boot MyBatis 连接数据库

    最近比较忙,没来得及抽时间把MyBatis的集成发出来,其实mybatis官网在2015年11月底就已经发布了对SpringBoot集成的Release版本,Github上有代码:https://gi ...

  7. (转) Spring Boot MyBatis 连接数据库

    最近比较忙,没来得及抽时间把MyBatis的集成发出来,其实mybatis官网在2015年11月底就已经发布了对SpringBoot集成的Release版本,Github上有代码:https://gi ...

  8. mybatis与spring的整合(使用sqlSession进行crud)

    上次介绍了用接口的方法极大的节省了dao层,只需通过 配置文件和接口就可以实现,这次介绍的是通过splsession来实现dao,这种方法比较灵活: 先不说,上配置文件: 1.web.xml < ...

  9. JDBC与Druid简单介绍及Druid与MyBatis连接数据库

    序言 java程序与数据建立连接,首先要从jdbc说起,然后直接上阿里认为宇宙最好的数据库连接池druid,然后再说上层程序对象与数据源映射关联关系的orm-mybatis. JDBC介绍 JDBC( ...

随机推荐

  1. mysql 表这段内容替换

    update `cr_article` set `img`=replace(`img`,'http://192.168.2.10/upload','http://zouke1220.oss-cn-be ...

  2. Java基础 -1.4

    标识符与关键字 对于标识符的组成在Java之中的定义如下:由字母.数字._.$ 组成 其中不能使用Java的保留字(关键字) 其中 $ 一般都有特殊的含义 不建议出现在自己所编写的代码上 关键字 是系 ...

  3. Python中的进制表示方式及转换方法

    在Python中,非十进制数字的表示方式为: 二进制:前面加0b,如0b1001 八进制:前面加0o,如0o3562 十六进制:前面加0x,如0x2af3 不同进制数字可直接进行数学计算,结果返回十进 ...

  4. Android之Builder对话框的一些常用方式

    原文: http://blog.csdn.net/kkfdsa132/article/details/6322835 Android为我们提供几种对话框,主要有:AlertDialog.Progres ...

  5. nacos作为配置中心动态刷新@RefreshScope添加后取值为null的一个问题

    之前springboot项目常量类如下形式: @Component @RefreshScope//nacos配置中心时添加上 public class Constants { @Value(" ...

  6. [ 剑指Offer ] Week2 学习笔记

    打印从1到最大的n位数 题解:由于未知n的大小,需要考虑大数问题.在这样的情况下,逐位地将字符串转换为数字输出,不会有溢出的可能.使用全排列的方式列出所有数字,省去了需要考虑进位的可能. 初始化数组, ...

  7. redhat 7.6 用户和组

    用户 useradd   user1     //新建用户user1 userdel   user1   //删除用户user1 userdel  -r   user1     //删除用户并且删除h ...

  8. 集合set() 二

    集合分类    可变集合set() 可以添加和删除元素,非可哈希的(值set之后的整体),不能用作字典的键,也不能做其它集合的元素. set()  之后变为不可哈希的 不可变集合 frozenset( ...

  9. 更改windows系统的快捷键方法

    众所周知,windows平台有很多快捷键使用非常的别扭. 现在提供windows 平台快捷键替换的绝佳软件:autohotkey 下载链接:http://ahkscript.org/ 中文帮助站点:h ...

  10. HTML相关知识点(3)

    文档流: 浮动:用于布局 给三个浮动的盒子加上一个父元素并设置宽高,以免影响其他的盒子和内容 margin:0 auto;居中 在盒子里插入图片: 1.为父元素设置宽高,给图片设置宽100%,图片会充 ...