MyBatis初级入门及常见问题

入门案例

  1. 创建maven工程
    项目目录结构:
    在这里插入图片描述
    1. 首先在maven的pom.xml导入Mybatis和MySQL的依赖坐标:
		<dependencies><!--Junit测试依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--Mybatis依赖, 我使用3.4.5版本--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--MySQL连接数据库的依赖, 使用版本5.1.6,: 版本必须与数据库对应, 否则因为数据库或者jar版本不匹配报数据库连接异常--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><!--日志依赖, 用于观察Mybatis发送的SQL语句--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>
  1. 编写User实体类(位于com.regotto.domain包下面)
	public class User implements Serializable {//存在如下属性private int id;private String username;private Date birthday;private String sex;private String address;//get, set, toString方法就省略了}
  1. 编写持久层接口(位于com.regotto.dao包下面)
		package com.regotto.dao;import com.regotto.domain.User;import org.apache.ibatis.annotations.Select;import java.util.List;/*** Dao接口* @author regotto*/public interface UserDao {/**查询所有用户* @return list*///@Select("select * from user"), 注解开发List<User> findAll();}
  1. 编写持久层映射文件(UserDao.xml, 必须位于resource路径下的com.regotto.dao中, 否则后面会因为路径问题, 报映射文件找不到的异常)
    注: 基于注解开发的时候, 不需要配置持久层映射文件, 必须记住一定Mybatis不允许对一个Dao层接口既使用xml开发, 又使用注解开发, 当使用注解开发的时候要把Dao层映射文件删除, 否则报载入映射文件异常!!!
		<?xml version="1.0" encoding="UTF-8"?><!--设置dtd约束, 这样后面才会有Mybatis的提示--><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.regotto.dao.UserDao"><!--select: 执行select语句的标签id: 对Dao层UserDao接口的哪一个方法执行select操作(如下id表示findAll, 表示对findAll方法执行SQL语句)resultType: 返回值类型, 查询用户, 返回值类型User(此处需要写包的全路径)--><select id="findAll" resultType="com.regotto.domain.User">select * from user</select></mapper>

对同一个Dao接口, 注解与配置文件同时存在, 将出现如下错误
在这里插入图片描述

  1. 编写Mybatis配置文件(SqlMapConfig.xml, 该文件位于resource文件夹下)
    无论是xml开发, 还是注解开发, 必须要写Mybatis的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!--导入配置文件dtd-->
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--配置数据库环境为mysql--><environments default="mysql"><!--配置mysql环境, id需要与前面default一样, 否则报环境配置错误--><environment id="mysql"><!--配置事务类型, 默认使用Mysql自己的JDBC事务--><transactionManager type="JDBC"></transactionManager><!--配置连接池(数据源DataSource), 使用的是Mybatis自己的连接池--><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="qad12345"/></dataSource></environment></environments><!--指定映射文件的位置, 每一个Dao都有一个独立的映射文件--><mappers><!--在resource目录下包中持久层映射文件, 在使用注解的时候不能使用XXXDao.xml配置文件, mybatis的约束不能对同一个Dao既使用注解, 又使用配置文件, 此时要做的就是将XXXDao配置文件移出com.regotto.dao中mapper: 配置Dao开发方式resource: Dao层映射文件位置class: Dao接口在包中位置--><!--使用Dao层映射文件(UserDao.xml)开发--><mapper resource="com/regotto/dao/UserDao.xml"/><!-- 使用注解的方式--><!--<mapper class="com.regotto.dao.UserDao"/>--></mappers></configuration>
  1. Log4j配置文件(位于resource文件夹下)
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
  1. 编写测试类
package com.regotto;import static org.junit.Assert.assertTrue;import com.regotto.dao.UserDao;
import com.regotto.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** Unit test for MybatisTest App.*/
public class MybatisTest {public static void main(String[] args) throws Exception {//1.读取配置文件InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");//2.创建SQLSessionFactory工厂SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//3.创建session对象SqlSession sqlSession = sqlSessionFactory.openSession();//4.使用SqlSession对象创建Dao接口的代理对象UserDao userDao = sqlSession.getMapper(UserDao.class);//代理对象直接调用对应的方法List<User> users = userDao.findAll();for (User u : users) {System.out.println(u);}//释放资源sqlSession.close();inputStream.close();}
}

运行结果如下:
在这里插入图片描述
7. 总结:

前面使用两种方式解释入门案例:1. 使用Dao层映射配置文件2. 使用注解开发, 出现注解的地方都进行了注释总流程如下:1. 创建maven工程, 导入对应jar包依赖2. 创建实例类, Dao层接口3. 创建Dao层接口的映射配置文件4. 创建Mybatis的配置文件(配置数据库环境, 连接池, 加载Dao层接口映射配置文件)5. 创建测试类:1. 使用Resources加载Mybatis的配置文件2. 使用SqlSessionFactoryBuilder.build创建session工厂3. 使用session工厂创建session对象4. 使用session对象创建Dao接口的代理对象5. 使用代理对象直接调用接口方法(执行SQL)6. 释放资源, 关闭session会话, 关闭Resources的输入流遇到的问题:1. 配置文件路径一定要放对, 当出现配置文件未找到要么是配置文件名称错误, 要么就是配置文件位置错误2. 在resource目录下包中持久层映射文件, 在使用注解的时候不能使用XXXDao.xml配置文件, mybatis的约束不能对同一个Dao既使用注解, 又使用配置文件, 此时要做的就是将XXXDao配置文件移出com.regotto.dao中我就因为这个问题弄了好久, 最后才发现这个问题, 根据其他网友解释, 这样做的原因是为了统一化开发, 防止Dao层开发混乱

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3...

Introducing Information Architecture 信息架构简介 Chapter 1 Defining Information Architecture 信息架构的意义&#xff08;我们盖房子&#xff0c;之后&#xff0c;房子影响我们&#xff09; A DefinitionTablets, Scrolls, Books, and Libraries 石板、卷轴、书籍&#…

Mybatis执行流程分析_自定义简易Mybatis框架

自定义简易Mybatis框架 Mybatis执行流程分析 Mybatis代码编写流程: Mybatis配置文件加载过程: 需求分析及技术概述 根据上述的功能结构图, 得出如下需求: 1. 需要具有配置文件加载模块. 2. 支持使用构建者进行SessionFactory构建. 3. 支持使用工厂模式构建Session对象. 4.…

给大家推荐一个优质Linux内核技术公众号-Linux阅码场

作为一个Linux 技术公众号的作者&#xff0c;我觉得有义务推荐优秀的公众号&#xff0c;推广内容&#xff0c;希望对大家的学习有所帮助~Linux阅码场是一个专注Linux内核和系统编程与调试调优技术的公众号&#xff0c;它的文章云集了国内众多知名企业一线工程师的心得。无论你工…

图数据库_ONgDB图数据库与Spark的集成

快速探索图数据与图计算图计算是研究客观世界当中的任何事物和事物之间的关系&#xff0c;对其进行完整的刻划、计算和分析的一门技术。图计算依赖底于底层图数据模型&#xff0c;在图数据模型基础上计算分析Spark是一个非常流行且成熟稳定的计算引擎。下面文章从ONgDB与Spark的…

2019 高考填报志愿建议

2019 高考填报志愿建议1、城市很关键&#xff0c;在大城市上学和小地方上学会有很大的不同&#xff0c;现在很多毕业生毕业后会往北上广深跑&#xff0c;很多原因是因为这里的就业机会多&#xff0c;薪资比内地好太多了&#xff0c;如果你大学就能在这样的地方上学&#xff0c;…

韦东山:闲鱼与盗版更配,起诉到底绝不和解!

之前很多人问&#xff0c;我和韦老师是什么关系&#xff0c;我们是本家人&#xff0c;至于更深的关系&#xff0c;我也不知道&#xff0c;这次事件受老师委托&#xff0c;帮忙发文支持&#xff0c;看到的朋友&#xff0c;也希望给予转发支持&#xff0c;感激不尽~大学的时候&am…

Windows下搭建FTP服务器

一、什么是ftp? FTP 是File Transfer Protocol&#xff08;文件传输协议&#xff09;的英文简称&#xff0c;而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时&#xff0c;它也是一个应用程序&#xff08;Application&#xff09;。基于不同的操作系统有不…

Redis常见数据类型_Redis通用指令

Redis常见数据类型 redis本身就是一个Map结构, 所有数据都采用key:value的形式, redis中的数据类型指的是value的类型, key部分永远是字符串 string(类似Java String) string基本操作: set key value //存储数据 get key value //获取数据 del key value //删除数据 mset …

我关注的学习公众号

在这个激烈竞争的社会&#xff0c;职场上还有“一招鲜”么&#xff1f;面对35岁的“魔咒”&#xff0c;提升自我的路很多&#xff0c;学习是其中最为捷径的一条。只有不断学习新知识&#xff0c;才能保持进步。今天为大家整理了8个公众号&#xff0c;分别为各个领域的佼佼者&am…

如何让开关打开_安卓手机如何打开USB调试模式

点击上方“手机互联” 关注我吧&#xff01;什么是USB调试模式&#xff1f;USB调试模式是 安卓手机提供的一个用于开发工作的功能。使用该功能可在设备和安卓手机之间复制数据、在移动设备上安装应用程序、读取日志数据等等。默认情况下&#xff0c;USB 调试模式是关闭的&#…

Redis持久化_Redis事务_Redis删除策略

Redis持久化 Redis包含3中持久化方案: RDB, AOF, RDB与AOF混合使用 RDB RDB: 将内存中数据生成快照形式, 将其保存到.rdb文件中, 关注点是数据 使用命令执行RDB过程 在保存.rdb文件之前还需要修改redis.conf配置文件, 修改项如下: dbfilename dump.rdb //配置.rdb文件名, …

第一次线下活动总结

公众号建立有了一段时间了&#xff0c;今天是我们筹划的第一次线下聚会活动&#xff0c;活动发起人是公众号的一个读者&#xff0c;是我们的前辈&#xff0c;也是这次活动的赞助商&#xff0c;非常感谢&#xff0c;支付了聚餐了费用&#xff0c;这次第一届活动&#xff0c;当然…

初学者选黑卡还是微单_零基础,一篇读懂单反和微单

许多小白在选购相机时&#xff0c;常常会纠结选微单还是选单反。那么这次就来一篇通俗讲解&#xff1a;单反和微单有什么区别&#xff1f;谁更好&#xff1f;应该怎么选择&#xff1f;一、单反和微单有什么区别&#xff1f;在了解单反和微单的区别之前&#xff0c;我们先要了解…

Redis核心配置_Redis高级数据类型使用

Redis核心配置 服务端配置 daemonize yes|no //服务器是否已守护进程方式运行 bind 127.0.0.1 //绑定主机 port 6379 //设置端口 databases 16 //设置数据库数量 loglevel debug|verbose|notice|warning //设置日志级别 logfile 端口号.log //设置日志文件名 maxclients 1 //…

xcode8注释快捷键失效问题

1. 首先按上图的指示&#xff0c;查看Add Documentation后面的快捷键是不是optioncommand/。 2. 如果发现不是默认的快捷键&#xff0c;可按快捷键command&#xff0c;打开Xcode偏好设置窗口&#xff0c;选中Key Bindings&#xff0c;搜索Add Documentation&#xff0c;便可修…

vant组件搜索并选择_Vant Weapp - 有赞出品的免费开源微信小程序组件库

轻量可靠的小程序UI组件库&#xff0c;主流移动组件库 Vant 的微信小程序版本。Vant Weapp 和 Vant 的区别之前推荐过的移动端web组件库 Vant 是 Vue.js 版本的&#xff0c;其对内承载了有赞所有核心业务&#xff0c;对外有十多万开发者在使用&#xff0c;一直是业界主流的移动…

走了,又回来了

今天换了个大的办公室&#xff0c;从100平增加到了300平&#xff0c;从宝安到南山&#xff0c;从旧环境到新环境&#xff0c;不是新的开始&#xff0c;是新的环境和心情。突然有点感慨&#xff0c;那时候从科技园出发&#xff0c;跟HP从深圳坐高铁去广州&#xff0c;在广州小蛮…

Flink-Java版单词计数(批处理流处理)

创建工程 pom.xml文件依赖如下: <dependencies><dependency><groupId>org.apache.flink</groupId><artifactId>flink-java</artifactId><version>1.10.1</version></dependency><!--依赖的一些组件需要 Scala 环境…

怎么做批注_BIM平台是什么?有何用?怎么用?

原标题&#xff1a;BIM平台是什么&#xff1f;有何用&#xff1f;怎么用&#xff1f;随着BIM技术的深入应用&#xff0c;我们也不再拘泥于单单BIM软件的使用&#xff0c;在BIM技术的广泛应用之下&#xff0c;BIM平台也逐渐成为了BIM技术的最佳体现&#xff0c;也成为了众多工程…

Flink并行度优先级_集群操作常用指令_运行组件_任务提交流程_数据流图变化过程

Flink并行度优先级(从高到低) sum(1).setParallelism(1) env.setParallelism(1) ApacheFlinkDashboard任务添加并行度配置 flink-conf.yaml并行度配置 注: 处理输入输出时, 并行度默认为 1Flink集群常用指令 提交任务 run: 代表执行; c: 指定入口类; p: 并行度; host, post:…