前言:不结合spring,只有 mybatis+maven。数据库使用 oracle。不尝试永远不知道会发生什么事,其中遇到两个小问题,也记录下来了。转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9429807.html

一、创建用户表,用于这次的demo

  1. -- Create table
  2. create table t_user
  3. (
  4. id number not null,
  5. name varchar2(1000),
  6. age number
  7. )
  8. ;
  9. -- Add comments to the table
  10. comment on table t_user
  11. is '用户表';
  12. -- Add comments to the columns
  13. comment on column t_user.id
  14. is '主键';
  15. comment on column t_user.name
  16. is '用户名';
  17. comment on column t_user.age
  18. is '年龄';
  19. -- Create/Recreate primary, unique and foreign key constraints
  20. alter table t_user
  21. add constraint t_user_id primary key (ID);

  创建完表结构,就可以新增数据了

  1. insert into T_USER (ID, NAME, AGE)
  2. values (1, 'yule', 18);
  3. insert into T_USER (ID, NAME, AGE)
  4. values (2, 'xiaohua', 24);
  5. insert into T_USER (ID, NAME, AGE)
  6. values (3, '小明', 30);
  7. insert into T_USER (ID, NAME, AGE)
  8. values (4, '小小', 24);

二、pom.xml 中引入 MyBatis

  1. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
  2. <dependency>
  3. <groupId>org.mybatis</groupId>
  4. <artifactId>mybatis</artifactId>
  5. <version>3.4.5</version>
  6. </dependency>

三、创建实体

  1. package com.yule.user.entity;
  2.  
  3. /**
  4. * 用户实体
  5. * Created by yule on 2018/8/6 21:51.
  6. */
  7. public class User {
  8. private String id;
  9. private String name;
  10. private String age;
  11.  
  12. public String getId() {
  13. return id;
  14. }
  15.  
  16. public void setId(String id) {
  17. this.id = id;
  18. }
  19.  
  20. public String getName() {
  21. return name;
  22. }
  23.  
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27.  
  28. public String getAge() {
  29. return age;
  30. }
  31.  
  32. public void setAge(String age) {
  33. this.age = age;
  34. }
  35. }

四、创建映射器和 sql

  dao 接口

  1. package com.yule.user.dao;
  2.  
  3. import com.yule.user.entity.User;
  4.  
  5. import java.util.List;
  6.  
  7. /**
  8. * 用户 Dao 层
  9. * Created by yule on 2018/8/6 22:06.
  10. */
  11. public interface UserDao {
  12. List<User> queryUserList();
  13. }

  sql

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
  4. "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
  5. <mapper namespace="com.yule.user.dao.UserDao">
  6.  
  7. <select id="queryUserList" resultType="com.yule.user.entity.User" >
  8. select t.id, t.name, t.age from t.user t
  9. </select>
  10.  
  11. </mapper>

五、配置 MyBatis

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6.  
  7. <!--配置环境-->
  8. <environments default="development">
  9. <environment id="development">
  10. <transactionManager type="JDBC"/>
  11. <dataSource type="POOLED">
  12. <property name="driver" value="oracle.jdbc.OracleDriver"/>
  13. <property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"/>
  14. <property name="username" value="testdev"/>
  15. <property name="password" value="test1234"/>
  16. </dataSource>
  17. </environment>
  18. </environments>
  19.  
  20. <!-- 引入映射器 -->
  21. <mappers>
  22. <!--<mapper class="com.yule.user.dao.UserDao"/>-->
  23. <mapper resource="com/yule/user/dao/UserDao.xml"/>
  24. </mappers>
  25.  
  26. </configuration>

六、写个单测来看看

  1. package com.yule.user.dao;
  2.  
  3. import com.yule.user.entity.User;
  4. import org.apache.ibatis.io.Resources;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8. import org.junit.Test;
  9.  
  10. import java.io.IOException;
  11. import java.io.InputStream;
  12. import java.util.List;
  13.  
  14. import static org.junit.Assert.*;
  15.  
  16. public class UserDaoTest {
  17.  
  18. private static SqlSessionFactory sqlSessionFactory;
  19.  
  20. @Test
  21. public void test() throws IOException {
  22.  
  23. SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
  24.  
  25. SqlSession sqlSession = sqlSessionFactory.openSession();
  26.  
  27. UserDao userDao = sqlSession.getMapper(UserDao.class);
  28. List<User> userList = userDao.queryUserList();
  29.  
  30. for (User user : userList) {
  31. System.out.println(user.getName());
  32. }
  33.  
  34. sqlSession.close();
  35. }
  36.  
  37. private static SqlSessionFactory getSqlSessionFactory() {
  38. //单例
  39. if (sqlSessionFactory == null) {
  40. InputStream inputStream;
  41. try {
  42. inputStream = Resources.getResourceAsStream("configuration.xml");
  43. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  44. } catch (IOException e) {
  45. e.printStackTrace();
  46. throw new RuntimeException(e.getCause());
  47. }
  48. }
  49. return sqlSessionFactory;
  50. }
  51.  
  52. }

七、运行结果

八、错误1:pom 中需要加如下代码

  运行单测报错

  1. D:\Java\jdk1.8.0_144\bin\java -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2017.1.5\lib\idea_rt.jar=51056:D:\Program Files\JetBrains\IntelliJ IDEA 2017.1.5\bin" -Dfile.encoding=UTF-8 -classpath "D:\Program Files\JetBrains\IntelliJ IDEA 2017.1.5\lib\idea_rt.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2017.1.5\plugins\junit\lib\junit-rt.jar;D:\Java\jdk1.8.0_144\jre\lib\charsets.jar;D:\Java\jdk1.8.0_144\jre\lib\deploy.jar;D:\Java\jdk1.8.0_144\jre\lib\ext\access-bridge-64.jar;D:\Java\jdk1.8.0_144\jre\lib\ext\cldrdata.jar;D:\Java\jdk1.8.0_144\jre\lib\ext\dnsns.jar;D:\Java\jdk1.8.0_144\jre\lib\ext\jaccess.jar;D:\Java\jdk1.8.0_144\jre\lib\ext\jfxrt.jar;D:\Java\jdk1.8.0_144\jre\lib\ext\localedata.jar;D:\Java\jdk1.8.0_144\jre\lib\ext\nashorn.jar;D:\Java\jdk1.8.0_144\jre\lib\ext\sunec.jar;D:\Java\jdk1.8.0_144\jre\lib\ext\sunjce_provider.jar;D:\Java\jdk1.8.0_144\jre\lib\ext\sunmscapi.jar;D:\Java\jdk1.8.0_144\jre\lib\ext\sunpkcs11.jar;D:\Java\jdk1.8.0_144\jre\lib\ext\zipfs.jar;D:\Java\jdk1.8.0_144\jre\lib\javaws.jar;D:\Java\jdk1.8.0_144\jre\lib\jce.jar;D:\Java\jdk1.8.0_144\jre\lib\jfr.jar;D:\Java\jdk1.8.0_144\jre\lib\jfxswt.jar;D:\Java\jdk1.8.0_144\jre\lib\jsse.jar;D:\Java\jdk1.8.0_144\jre\lib\management-agent.jar;D:\Java\jdk1.8.0_144\jre\lib\plugin.jar;D:\Java\jdk1.8.0_144\jre\lib\resources.jar;D:\Java\jdk1.8.0_144\jre\lib\rt.jar;F:\IDEAworkspace\sdemo\target\test-classes;F:\IDEAworkspace\sdemo\target\classes;F:\mavenRepository\junit\junit\4.12\junit-4.12.jar;F:\mavenRepository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;F:\mavenRepository\org\springframework\spring-test\4.3.14.RELEASE\spring-test-4.3.14.RELEASE.jar;F:\mavenRepository\org\springframework\spring-context\4.3.14.RELEASE\spring-context-4.3.14.RELEASE.jar;F:\mavenRepository\org\springframework\spring-aop\4.3.14.RELEASE\spring-aop-4.3.14.RELEASE.jar;F:\mavenRepository\org\springframework\spring-expression\4.3.14.RELEASE\spring-expression-4.3.14.RELEASE.jar;F:\mavenRepository\org\springframework\spring-beans\4.3.14.RELEASE\spring-beans-4.3.14.RELEASE.jar;F:\mavenRepository\org\springframework\spring-core\4.3.14.RELEASE\spring-core-4.3.14.RELEASE.jar;F:\mavenRepository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;F:\mavenRepository\org\springframework\spring-web\4.3.14.RELEASE\spring-web-4.3.14.RELEASE.jar;F:\mavenRepository\org\springframework\spring-webmvc\4.3.14.RELEASE\spring-webmvc-4.3.14.RELEASE.jar;F:\mavenRepository\org\springframework\spring-jdbc\4.3.14.RELEASE\spring-jdbc-4.3.14.RELEASE.jar;F:\mavenRepository\org\springframework\spring-tx\4.3.14.RELEASE\spring-tx-4.3.14.RELEASE.jar;F:\mavenRepository\javax\servlet\javax.servlet-api\3.1.0\javax.servlet-api-3.1.0.jar;F:\mavenRepository\javax\servlet\jsp\jsp-api\2.2\jsp-api-2.2.jar;F:\mavenRepository\javax\servlet\jstl\1.2\jstl-1.2.jar;F:\mavenRepository\commons-fileupload\commons-fileupload\1.2.1\commons-fileupload-1.2.1.jar;F:\mavenRepository\commons-io\commons-io\2.4\commons-io-2.4.jar;F:\mavenRepository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;F:\mavenRepository\org\slf4j\slf4j-log4j12\1.7.25\slf4j-log4j12-1.7.25.jar;F:\mavenRepository\log4j\log4j\1.2.17\log4j-1.2.17.jar;F:\mavenRepository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;F:\mavenRepository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;F:\mavenRepository\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;F:\mavenRepository\com\oracle\ojdbc6\11.2.0.1.0\ojdbc6-11.2.0.1.0.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 com.yule.user.dao.UserDaoTest,test
  2. SLF4J: Class path contains multiple SLF4J bindings.
  3. SLF4J: Found binding in [jar:file:/F:/mavenRepository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
  4. SLF4J: Found binding in [jar:file:/F:/mavenRepository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
  5. SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
  6. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
  7. log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
  8. log4j:WARN Please initialize the log4j system properly.
  9. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
  10.  
  11. org.apache.ibatis.exceptions.PersistenceException:
  12. ### Error building SqlSession.
  13. ### The error may exist in com/yule/user/dao/UserDao.xml
  14. ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/yule/user/dao/UserDao.xml
  15.  
  16. at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
  17. at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)
  18. at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64)
  19. at com.yule.user.dao.UserDaoTest.getSqlSessionFactory(UserDaoTest.java:42)
  20. at com.yule.user.dao.UserDaoTest.test(UserDaoTest.java:23)
  21. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  22. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  23. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  24. at java.lang.reflect.Method.invoke(Method.java:498)
  25. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
  26. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
  27. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
  28. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
  29. at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
  30. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
  31. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
  32. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
  33. at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
  34. at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
  35. at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
  36. at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
  37. at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
  38. at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
  39. at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
  40. at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
  41. at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
  42. at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
  43. Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/yule/user/dao/UserDao.xml
  44. at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:121)
  45. at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:99)
  46. at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:78)
  47. ... 25 more
  48. Caused by: java.io.IOException: Could not find resource com/yule/user/dao/UserDao.xml
  49. at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:114)
  50. at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:100)
  51. at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:371)
  52. at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:119)
  53. ... 27 more
  54.  
  55. Process finished with exit code -1

  解决方案:为了编译之后,能读取到 xml 文件,所以在 pom.xml 中 <build></build>加如下代码。

  1. <resources>
  2. <resource>
  3. <directory>src/main/java</directory>
  4. <includes>
  5. <include>**/*.xml</include>
  6. </includes>
  7. <filtering>true</filtering>
  8. </resource>
  9. </resources>

九、错误2:添加 pom 的 oracle 依赖

  运行单测报错:报找不到驱动;java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

  解决方案:https://www.cnblogs.com/yuxiaole/p/9479536.html

转载请注明出处: https://www.cnblogs.com/yuxiaole/p/9429807.html

  

深入理解MyBatis的原理(一): 独立的入门demo的更多相关文章

  1. 深入理解MyBatis的原理:整个体系

    前言:工作中虽然用到了 MyBatis,可完全不知道为什么,再不学习就晚了,这里将记录我的学习笔记,整个 MyBatis 的体系. 一.简介 1.传统的JDBC JDBC 是一种典型的桥接模式. 使用 ...

  2. 深入理解MyBatis的原理(四):映射器的用法

    前言:继续深入学习 mybatis 的用法及原理,还是先会用再学习原理. 映射器的主要元素有:select.insert.update.delete.parameterMap(即将被删除,不建议使用) ...

  3. 深入理解MyBatis的原理(三):配置文件用法(续)

    前言:前文讲解了 MyBatis 的配置文件一部分用法,本文将继续讲解 MyBatis 的配置文件的用法. 目录 1.typeHandler 类型处理器 2.ObjectFactory 3.插件 4. ...

  4. 深入理解MyBatis的原理(三):配置文件(上)

    前言:前文提到一个入门的demo,从这里开始,会了解深入 MyBatis 的配置,本文讲解 MyBatis 的配置文件的用法. 目录 1.properties 元素 2.设置(settings) 3. ...

  5. 《深入理解mybatis原理》 Mybatis初始化机制具体解释

    对于不论什么框架而言.在使用前都要进行一系列的初始化,MyBatis也不例外. 本章将通过下面几点具体介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XM ...

  6. 深入理解Mybatis技术与原理

    目录 第1章 Mybatis简介 1.1 传统的JDBC编程 1.2 ORM模型 1.4 MyBatis 1.5 什么时候用MyBatis 第2章 MyBatis入门 2.2 MyBatis构成 2. ...

  7. 深入理解mybatis原理, Mybatis初始化SqlSessionFactory机制详解(转)

    文章转自http://blog.csdn.net/l454822901/article/details/51829785 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章 ...

  8. 《深入理解mybatis原理2》 Mybatis初始化机制详解

    <深入理解mybatis原理> Mybatis初始化机制详解 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程 ...

  9. 《深入理解mybatis原理》 MyBatis事务管理机制

    MyBatis作为Java语言的数据库框架,对数据库的事务管理是其很重要的一个方面.本文将讲述MyBatis的事务管理的实现机制. 首先介绍MyBatis的事务Transaction的接口设计以及其不 ...

随机推荐

  1. 虚拟安装centos后无法上网、DNS无法解析问题解决

    1.保证拟机ip和VMnet8的ip在同一网段内 2.虚拟机网关和VMnet8相同

  2. Navicat 12破解工具 +安装包

    下载地址: https://www.lanzous.com/b657322/ 密码:1j9x zip解压密码:gubin 下载完成 是这样的  先安装第一个  安装完成后 不要打开 ,把第二个复制到安 ...

  3. Django(完整的登录示例、render字符串替换和redirect跳转)

    day61 1. 登录的完整示例                       复习:         form表单往后端提交数据需要注意哪三点:  五一回来默写    <-- 谁写错成from谁 ...

  4. Retrofit源码解析(下)

    接着上一章继续分析上一章主要简单说了一下基本使用和注解,这一章,我们主要看源码,废话不多说了,直接上.先上一张图 从网络上拿来的 前面一章说了一下Retrofit的简单使用https://www.cn ...

  5. position:absolute元素 怎样居中

    <div style = 'height:20px;position:absolute;z-index:9999;top:0;left:0;right:0;margin:auto;'> & ...

  6. webpack快速入门——配置JS压缩,打包

    1 .首先在webpack.config.js中引入 const uglify = require('uglifyjs-webpack-plugin'); 2.然后在plugins配置里 plugin ...

  7. git小白使用教程(一)

    本文所涉及命令基本可以涵盖日常开发场景, 对于开发者平时很少使用的命令不再列举,这样不至于让刚刚使用git的小伙伴们看的脑袋大...如有特殊使用可以联系我单独回复. 首先通过一张图了解git的工作流程 ...

  8. git连接通过ssh连接github

    解决 git连接通过ssh连接github 1. 首先产生一个rsa的私钥和公钥 ssh-keygen -t rsa -C "15950093214@163.com"  //你的g ...

  9. 【GDOI2018模拟8】 数学竞赛 三角函数性质+记忆化搜索

    数据范围:p,q≤20. 只能说我整个人傻逼了..... 我们考虑三角函数的部分性质: $sin(x)=\sqrt{ 1-cos^2(x)}$ $cos(x)=\sqrt{1-sin^2(x)}$ $ ...

  10. 优化 JS 条件语句的 5 个技巧

    优化 JS 条件语句的 5 个技巧 原创: 前端大全 前端大全 昨天 (给前端大全加星标,提升前端技能) 编译:伯乐在线/Mr.Dcheng http://blog.jobbole.com/11467 ...