mybatis连接数据库出错获取不到SQLsession

采用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>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
MyBatis 是一种开源的持久层框架,它可以帮助 Java 程序员将 SQL 语句与数据对象进行解耦,从而使程序的开发更加简单、快捷、可维护。下面是 MyBatis 连接数据库的基本步骤: 1. 引入 MyBatis 的依赖包,可以通过 Maven 或手动下载 jar 包的方式引入。 2. 在项目中创建 MyBatis 的配置文件 mybatis-config.xml,该文件包含了 MyBatis 的全局配置信息,例如数据库连接池、类型别名等。 3. 在配置文件中配置数据库连接信息,包括数据库驱动、连接 URL、用户名和密码等。 4. 创建映射文件,该文件用于将 SQL 语句与 Java 对象进行映射,其中包括查询语句、参数映射、结果映射等。 5. 在 Java 代码中通过 SqlSessionFactoryBuilder 创建 SqlSessionFactory 对象,SqlSessionFactory 是 MyBatis 的核心类,它可以创建 SqlSession 对象。 6. 通过 SqlSession 对象进行数据库操作,例如查询、插入、更新等。 7. 最后记得关闭 SqlSession 对象和数据库连接资源。 下面是一个简单的示例代码: ```java // 1. 引入依赖包 // 2. 配置 mybatis-config.xml 文件 // 3. 配置数据库连接信息 <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> // 4. 创建映射文件 <mappers> <mapper resource="com/example/mapper/ExampleMapper.xml"/> </mappers> </configuration> // 5. 创建 SqlSessionFactory 对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 6. 通过 SqlSession 进行数据库操作 try (SqlSession session = sqlSessionFactory.openSession()) { ExampleMapper mapper = session.getMapper(ExampleMapper.class); Example example = mapper.selectById(1); System.out.println(example); } // 7. 关闭资源 ``` 以上是 MyBatis 连接数据库的基本步骤,需要注意的是,MyBatis 连接数据库的方式不仅仅限于上述操作,还可以通过 Spring 等框架进行集成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值