博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
搭建一个简单的Mybatis框架
阅读量:6302 次
发布时间:2019-06-22

本文共 5672 字,大约阅读时间需要 18 分钟。

直接进入正题,如何搭建一个纯Mybatis框架?过程中间可能会遇到各种各样的问题,简单整理在此。

准备工作

搭建Mybatis,需要的两个核心jar包,一个是任意Mybatis版本的包,另一个是数据库驱动包。这里的环境如下:

  • mybatis-3.4.6.jar
  • mysql-connector-java-8.0.13.jar

二者的pom依赖可去查找,然后创建一个简单的java项目,这里以Maven项目为例。

相关配置

1、pom.xml文件

4.0.0
com.szh.Mybatis_test
Mybatis_test
war
0.0.1-SNAPSHOT
mybatis Maven Webapp
http://maven.apache.org
UTF-8
com.szh
mysql
mysql-connector-java
8.0.13
org.mybatis
mybatis
3.4.6
Mybatis_test

2、 Mybatis核心配置文件conf.xml

当然,dataSource的四个属性也可以写在一个单独的配置文件里,然后在conf.xml中使用<properties resource="local_pro.properties"></properties>引用即可。

conf.xml是Mybatis的核心配置文件,放在下面一级目录:

3、Mybatis接口映射文件personMapper.xml

 personMapper.xml文件是Mybatis每个实体类对应的接口映射文件,一般统一放在如下目录:

4、测试主类Test.java

package com.szh;import java.io.InputStream;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.szh.po.PersonPo;public class Test {	public static void main(String[] args) {		//mybatis的配置文件        String resource = "conf.xml";        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)        InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);        System.out.println(Test.class.getClassLoader().getResource(resource).getFile());        //构建sqlSession的工厂        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);        //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)        //Reader reader = Resources.getResourceAsReader(resource);         //构建sqlSession的工厂        //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);        //创建能执行映射文件中sql的sqlSession        SqlSession session = sessionFactory.openSession();        /**         * 映射sql的标识字符串,         * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,         * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL         */        //在命名空间“com.szh.mapper.personMapper”中定义了一个名为“getPerson”的映射语句,        //这样它就允许你使用指定的完全限定名“com.szh.mapper.personMapper.getPerson”来调用映射语句,        //格式:命名空间名(namespace)+映射语句名(id)        String statement = "com.szh.mapper.personMapper.getPerson";//映射sql的标识字符串        //执行查询返回一个唯一user对象的sql        PersonPo p = session.selectOne(statement, 1);        System.out.println(p.getId());        System.out.println(p.getName());        System.out.println(p.getAddress());	}}

以上就是主要配置步骤,接下来run一下工程,看看结果,看看可能出现什么样的问题。

疑难杂症

1、personMapper.xml文件找不到,具体日志如下:

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession.### The error may exist in com.szh.mapper.personMapper.xml### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com.szh.mapper.personMapper.xml	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64)	at com.szh.Test.main(Test.java:20)

 com.szh.mapper.personMapper.xml文件明明存在,目录也正确,却报这个异常,这时我们需要确认conf.xml中是否正确定义了每一个mapper,注意mapper接口文件路径要以正斜杠分隔开,正确的写法如下:

2、数据库时区问题,具体日志如下:

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error querying database.  Cause: 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.### The error may exist in com/szh/mapper/personMapper.xml### The error may involve com.szh.mapper.personMapper.getPerson### The error occurred while executing a query### Cause: 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.	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)	at com.szh.Test.main(Test.java:38)

那么,我们需要给数据库连接url添加以下参数:

3、查询到的某些属性为null,如下:

1马二null

去数据库直接查看id为1的person,地址不为null才对。这种情况有可能是mapper接口文件里select标签的resultType属性直接写了实体类的路径,而此实体类的address属性名与表person的列名不对应。例如,列名为addr,而属性名为address。其实熟悉Mybatis,可以使用resultMap来手动映射列与属性名之间的关系,以及级联等等,这里不多赘述。

转载于:https://www.cnblogs.com/songzehao/p/10854264.html

你可能感兴趣的文章
阿里云ECS每天一件事D1:配置SSH
查看>>
SQL Server 性能调优(性能基线)
查看>>
uva 10801 - Lift Hopping(最短路Dijkstra)
查看>>
[Java Web]servlet/filter/listener/interceptor区别与联系
查看>>
POJ 2312Battle City(BFS-priority_queue 或者是建图spfa)
查看>>
从零开始学MVC3——创建项目
查看>>
CentOS 7 巨大变动之 firewalld 取代 iptables
查看>>
延时任务和定时任务
查看>>
linux下的权限问题
查看>>
教你如何使用Flutter和原生App混合开发
查看>>
Spring Boot 整合redis
查看>>
CSS hover改变背景图片过渡动画生硬
查看>>
JDBC(三)数据库连接和数据增删改查
查看>>
淘宝应对"双11"的技术架构分析
查看>>
ssh
查看>>
订单的子单表格设置颜色
查看>>
Office365 Exchange Hybrid 番外篇 ADFS后端SQL群集(一)
查看>>
9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
查看>>
lvs fullnat部署手册(三)rs内核加载toa篇
查看>>
C++策略模式
查看>>