深入浅出Mybatis系列(一)---Mybatis入门[转]

  最近两年 springmvc + mybatis 的在这种搭配还是蛮火的,楼主我呢,也从来没真正去接触过mybatis, 趁近日得闲, 就去学习一下mybatis吧。 本次拟根据自己的学习进度,做一次关于mybatis 的一系列教程, 记录自己的学习历程, 同时也给还没接触过mybatis的朋友探一次道。本系列教程拟 由浅(使用)入深(分析mybatis源码实现),故可能需要好长几天才能更新完。好啦,下面就开始本次的mybatis 学习之旅啦, 本次为第一篇教程, 就先简单地写个demo, 一起来认识一下mybatis吧。  

  为了方便,我使用了maven, 至于maven怎么使用, 我就不做介绍了。没用过maven的, 也不影响阅读。

一、Mybatis环境搭建及简单实例

1. 新建web项目, 添加依赖包:mybatis包、数据库驱动包(我使用的是mysql)、日志包(我使用的是log4j), 由于我的是maven项目, 那么添加依赖包就简单了,直接在pom.xml添加依赖即可。

pom.xml:

<dependencies><!-- 添加junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!-- 添加log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency><!-- 添加mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.6</version></dependency><!-- 添加mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.12</version></dependency></dependencies>

2. 配置log4j, 配置mybatis

  在classpath建立一个用于配置log4j的配置文件log4j.properties, 再建立一个用于配置Mybatis的配置文件configuration.xml(文件可随便命名)。log4j的配置,我就不多说,这儿主要说一下configuration.xml:

configuration.xml:

 

1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE configuration3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"4   "http://mybatis.org/dtd/mybatis-3-config.dtd">5 <configuration>6 7   <!-- 指定properties配置文件, 我这里面配置的是数据库相关 -->8   <properties resource="dbConfig.properties"></properties>9   
10   <!-- 指定Mybatis使用log4j -->
11   <settings>
12      <setting name="logImpl" value="LOG4J"/>
13   </settings>
14       
15   <environments default="development">
16     <environment id="development">
17       <transactionManager type="JDBC"/>
18       <dataSource type="POOLED">
19           <!--
20           如果上面没有指定数据库配置的properties文件,那么此处可以这样直接配置 
21         <property name="driver" value="com.mysql.jdbc.Driver"/>
22         <property name="url" value="jdbc:mysql://localhost:3306/test1"/>
23         <property name="username" value="root"/>
24         <property name="password" value="root"/>
25          -->
26          
27          <!-- 上面指定了数据库配置文件, 配置文件里面也是对应的这四个属性 -->
28          <property name="driver" value="${driver}"/>
29          <property name="url" value="${url}"/>
30          <property name="username" value="${username}"/>
31          <property name="password" value="${password}"/>
32          
33       </dataSource>
34     </environment>
35   </environments>
36   
37   <!-- 映射文件,mybatis精髓, 后面才会细讲 -->
38   <mappers>
39     <mapper resource="com/dy/dao/userDao-mapping.xml"/>
40   </mappers>
41   
42 </configuration>

3. 开始写Demo

  首先,在mysql数据库test1建立一张表user:

 

  

  然后,开始编写java代码。

  看看我的项目结构:

  

 

先编写一个实体类User: User类用于与User表相对应。

User:

1 package com.dy.entity;2 3 public class User {4 5     private int id;6     private String name;7     private String password;8     private int age;9     private int deleteFlag;
10     
11     public int getId() {
12         return id;
13     }
14     public void setId(int id) {
15         this.id = id;
16     }
17     public String getName() {
18         return name;
19     }
20     public void setName(String name) {
21         this.name = name;
22     }
23     public String getPassword() {
24         return password;
25     }
26     public void setPassword(String password) {
27         this.password = password;
28     }
29     public int getAge() {
30         return age;
31     }
32     public void setAge(int age) {
33         this.age = age;
34     }
35     public int getDeleteFlag() {
36         return deleteFlag;
37     }
38     public void setDeleteFlag(int deleteFlag) {
39         this.deleteFlag = deleteFlag;
40     }
41     
42 }

再编写一个UserDao 接口:

UserDao:

 

1 package com.dy.dao;2 3 import java.util.List;4 5 import com.dy.entity.User;6 7 public interface UserDao {8 9     public void insert(User user);
10     
11     public User findUserById (int userId);
12     
13     public List<User> findAllUsers();
14     
15 }

再编写一个userDao-mapping.xml (可随便命名):

userDao-mapping.xml:

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.dy.dao.UserDao">6 7    <select id="findUserById" resultType="com.dy.entity.User" > 8       select * from user where id = #{id}9    </select>
10 
11 </mapper>

userDao-mapping.xml相当于是UserDao的实现, 同时也将User实体类与数据表User成功关联起来。

4. 下面编写junit测试代码UserDaoTest:

 UserDaoTest:

 

1 public class UserDaoTest {2 3     @Test4     public void findUserById() {5         SqlSession sqlSession = getSessionFactory().openSession();  6         UserDao userMapper = sqlSession.getMapper(UserDao.class);  7         User user = userMapper.findUserById(2);  8         Assert.assertNotNull("没找到数据", user);9     }
10     
11     //Mybatis 通过SqlSessionFactory获取SqlSession, 然后才能通过SqlSession与数据库进行交互
12     private static SqlSessionFactory getSessionFactory() {  
13         SqlSessionFactory sessionFactory = null;  
14         String resource = "configuration.xml";  
15         try {  
16             sessionFactory = new SqlSessionFactoryBuilder().build(Resources  
17                     .getResourceAsReader(resource));
18         } catch (IOException e) {  
19             e.printStackTrace();  
20         }  
21         return sessionFactory;  
22     }  
23     
24 }

好啦,这样一个简单的mybatis 的demo就能成功运行啦。通过这个demo, 应该你就也能初步看出mybatis的运行机制,如果不清楚,也没关系。从下一篇文章开始,才开始正式讲解mybatis。

转载于:https://www.cnblogs.com/0x2D-0x22/p/4147436.html

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

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

相关文章

C# 图像模板匹配并标注

01—需求这个是粉丝在我的技术群提的一个需求1、 模板匹配 &#xff1a;功能&#xff1a;&#xff08;1&#xff09;在一张大图像中&#xff0c;选取一小块区域作为模板&#xff08;2&#xff09;可在大图像中匹配到模板图像和位置。模板匹配是图像处理中最基本、最常用的匹配方…

深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]

上篇《深入浅出Mybatis系列&#xff08;七&#xff09;---mapper映射文件配置之insert、update、delete》介绍了insert、update、delete的用法&#xff0c;本篇将介绍select、resultMap的用法。select无疑是我们最常用&#xff0c;也是最复杂的&#xff0c;mybatis通过resultMa…

北大保送、硕博连读!《西游记》红孩儿扮演者现成中科院博士!

全世界只有3.14 % 的人关注了爆炸吧知识本文转自&#xff1a;募格学术86版《西游记》可以说是很多人的记忆&#xff0c;男女老幼几乎都看过这个版本&#xff0c;虽然已经过去三十多年&#xff0c;但如今依旧是经典无法超越之作。看过86版《西游记》的小伙伴应该都还记得里面牛魔…

Android插件化开发之运行未安装apk的activity

1、介绍 我们知道PathClassLoader是一个应用的默认加载器(而且他只能加载data/app/xxx.apk的文件)&#xff0c;但是我们加载插件一般使用DexClassLoader加载器&#xff0c;所以这里就有问题了&#xff0c;其实如果对于开始的时候&#xff0c;每个人都会认为很简单&#xff0c;…

理解UI线程——SWT, Android, 和Swing的UI机理

2019独角兽企业重金招聘Python工程师标准>>> 在做GUI的时候, 无论是SWT, AWT, Swing 还是Android, 都需要面对UI线程的问题, UI线程往往会被单独的提出来单独对待, 试着问自己, 当GUI启动的时候, 后台会运行几个线程? 比如 1. SWT 从Main函数启动 2. Swing 从Ma…

C#多线程开发-并发集合中的ConcurrentQueue

前言大家好&#xff0c;我是阿辉。上一篇博文简单介绍了C#中支持并发的数据字典&#xff0c;简单举例说明比较了常规集合与ConcurrentDictionary的读写速度。下来简单介绍其中一个线程安全队列ConcurrentQueue;ConcurrentQueue队列我们不陌生&#xff0c;在数据结构这门课中就有…

一个人动情之后的表现......

1 卖家能有什么坏心思呢&#xff08;via.城与橙与澄&#xff0c;侵删&#xff09;▼2 严重怀疑传了答案▼3 别说我还真没留意到&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 领导说“辛苦了”&#xff0c;你要怎么回答▼5 哦吼&#xff08;素材来源网络&#…

线性代数第五版吉尔伯特课后答_线性代数同济第五版第六章课后习题答案!

搜集 | 整理 | 测试 | 小愉免责声明&#xff1a;以下资源或软件均来自互联网&#xff0c;仅供学习和交流使用&#xff0c;如有侵权请联系删除&#xff0c;请勿用于商业和非法途径等&#xff0c;如有法律纠纷与本人无关&#xff01;本文未经允许&#xff0c;不得转载&#xff0…

sql长整型_SQL 性能优化梳理

先简单梳理下Mysql的基本概念&#xff0c;然后分创建时和查询时这两个阶段的优化展开。1 基本概念简述1.1 逻辑架构第一层&#xff1a;客户端通过连接服务&#xff0c;将要执行的sql指令传输过来第二层&#xff1a;服务器解析并优化sql&#xff0c;生成最终的执行计划并执行第三…

网络的东西南北

前一陣子連續出差, 加上許多的內部會議, 搞的差點想去撞牆把自己搞昏之後就可以休息一下. 但是家中還有嗷嗷待哺的嬰兒需要爸爸幫他洗屁屁, 所以只有咬牙繼續撐下去. 不過這兩個月來, 不過在公司內部還是外部, 我都收到一樣類似的老問題那就是&#xff1a;&#xff08;認識我的…

K8s 中使用 cert-manager 申请免费 Https 证书

K8s 中使用 cert-manager 申请免费 Https 证书Intro最近在尝试将自己的应用从自己用 kind 部署的一个 k8s 集群迁移到 Azure 的 AKS 上&#xff0c;其中一个问题就是 https 证书&#xff0c;原来的 k8s 集群是放在 nginx 后端的并没有直接管理 https 证书&#xff0c;https 证书…

为什么要学数学?因为它真的没用啊!

全世界只有3.14 % 的人关注了爆炸吧知识数学之用无用之用有一天&#xff0c;表妹过来问了我两个问题&#xff1a;数学有什么用&#xff1f;那些深奥的公式对于普通人有什么意义&#xff1f;相信大多数人都有这个疑问&#xff0c;但总是找不到一个标准答案。问老师&#xff0c;他…

UI设计教程-界面设计构图

九宫格构图&#xff0c;圆心点放射形构图&#xff0c;三角形构图&#xff0c;SF字形构图。 1.九宫格网格构图 这种版式主要运用在分类为主的一级页面&#xff0c;起到功能分类的作用。 通常在界面设计中&#xff0c;我们会利用网格在界面进行布局&#xff0c;根据水平方向和垂直…

Android之最好理解的Binder机制

转载&#xff1a;http://weishu.me/2016/01/12/binder-index-for-newer/ Binder学习指南 发表于 2016-01-12 | 92条评论 | 34011次阅读毫不夸张地说&#xff0c;Binder是Android系统中最重要的特性之一&#xff1b;正如其名“粘合剂”所喻&#xff0c;它是系统间各个组件…

sql年月日24小时制_24小时制的「无码」真人秀,令人叫绝

几年前&#xff0c;我们总说互联网给世界带来了巨大的变化。到了现在&#xff0c;没想到自媒体的发展居然也能改变生活。但大家知道吗&#xff0c;其实早在20年前&#xff0c;美国那边就曾因“直播”掀起过不小的风浪——还是尺度挺大的那种。以至于毒师看过以后&#xff0c;整…

HangFire循环作业中作业因执行时间太长未完成新作业开启导致重复数据的问题...

背景HangFire有个很奇怪的现象&#xff0c;就是即使你设置的循环作业是一天一次&#xff0c;但是每次作业执行很长时间&#xff0c;我们假设是1小时&#xff0c;那么差不多在开始执行之后的30分钟之后&#xff0c;如果还在执行job,系统就会自动帮你重新开启了新的job执行。也就…

linux之查看文件大小、文件夹的大小和分区磁盘速度

1 查看文件大小 查看文件大小的命令 ls -l filename 比如: 注意这个 1243870 是 单位是B 2 查看文件夹的大小 查看文件夹的大小,也就是查看文件夹下所有文件的大小总和 先进入这个目录: cd FoldeName 命令如下: du -sh 3 查看分区磁盘速度 命令如下: