热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

jndi数据源配置_Mybatis3系列2.MyBatis3入门,XML配置基础

上一节已经介绍了开始使用MyBatis的简单使用条件.这节就开始做一个最简单的入门和一些核心概念的说明.准备项目:准备数据库数据库使用MySQL.开发必备吧,使用学习安装都很方便.

上一节已经介绍了开始使用MyBatis的简单使用条件. 这节就开始做一个最简单的入门和一些核心概念的说明.

准备项目:

准备数据库

数据库使用MySQL. 开发必备吧, 使用学习安装都很方便.

-- 创建数据库create database mybatis3;-- 创建用户表create table t_user( uid varchar(32), -- 主键 loginid varchar(32), -- 登录主键 uname varchar(64), -- 用户名称 pwd varchar(128), -- 登录密码 flag varchar(2), -- 有效标识 1 有效 0 无效 primary key(uid));

-- 插入数据, 这里密码暂时使用明码. 因为这个不是本次教程的重点.insert into t_user(uid, loginid, uname, pwd, flag)values('1', '1', '测试', '123', '1');

创建一个maven项目

com.xymiao.mybatis3mybatis3_01_introduction0.0.1-SNAPSHOT

并加入MyBatis的依赖

org.mybatis mybatis 3.5.3

截图为了更好的展示. 上面的代码为了更好的复制. 当然在最下面还会加入github的地址.

c718e8d091e51b132d9d852acddfaf4f.png

大概的介绍一下流程

首先我们考虑一下, 我们使用JDBC的时候, 是怎么连接数据库的. 需要什么信息.

看驱动连接方法:

public static Connection getConnection(String url, String user, String password) throws SQLException

需要知道, 连接的url地址, 连接的用户和密码. 并且也需要对应的驱动.

所有的框架不管是MyBatis也好, 还是Hibernate也好最终都是封装jdbc, 最终让你使用更方便. 去掉那些繁琐的重复性的操作. 只是有实现方式不同.

Hibernate封装的更加面向对象, 相对于MyBatis就相对轻量一些. 从这里理解, 可以知道只要jdbc需要的MyBatis一样也需要, 特别是配置连接.

毕竟, 我要和你握手, 你必须在我身边, 这样才能达到我们握手的基础条件.

加入实体类

实体类是为了更好的操作数据, 但是实体类不是MyBatis的唯一映射方式.

public class TUser { private String uid; private String uname; private String pwd; private String flag; private String loginid; // ... 省略getter setter }

配置文件

编写一个简单的配置文件信息.

c2c1b787266ddce6d164e6b3f468ff1e.png

文件内容如下:

配置文件的简单说明:

configuration

根配置为: configuration 这个是mybatis-3-config.dtd进行格式定义的. 必须以configuration 开始

详细的配置约束信息可以到mybatis-3.5.3.jar -> org.apache.ibatis.builder.xml -> mybatis-3-config.dtd 查看

environments

数据库环境配置. 可以进行多个环境配置. 每个配置都在 environment 中, 里面本次包含 transactionManager, dataSource 配置.

default

default属性是选择使用哪个配置进行连接. 对应 environment 的 id, 可以随意定义, 只要default中的值在environment 中id存在就可以.

transactionManager

transactionManager是配置事务管理器的类型,mybatis中有JDBC和MANAGED两种, JDBC是方式事务, 需要手动管理提交和回滚. MANAGED 是托管事务, 提交不需要再单独的编写提交和回滚代码.

dataSource

数据源配置, 类型包括: POOLED(数据池连接方式), UNPOOLED(非数据池连接方式), JNDI(可以简单的理解为外部数据源)

mappers

每一个MyBatis的数据库持久范围层都可以被称为一个mapper. 主要是用来指定对应的实体类的配置文件. 这里使用resource. 还可以使用url 和 class进行配置. 也可以进行包(package)指定.

分别的使用方式如下:

url方式: 不推荐使用这种方式, 开发人员想要路径一致比较困难. 实际开发中基本不会使用这种情况.

[项目路径]: 改成项目对应的路径

class方式: 如果使用class的方式, 必须让xml的路径和接口路径一致. 否则会出现错误

package name 方式: 如果使用package 的方式, 必须让xml的路径和接口路径一致. 否则会出现错误

本次使用 resource 的方式. 后续在实际开发中可以会使用package比较多一些, 特别和配合SpringMVC之后.

考虑清楚, 如果这个业务由你来做,你认为需要有什么样的东西才能支撑这个框架运行. 然后再和源代码进行比较. 更快的学习知识点.

配置Mapper

实体类有了, 配置文件也配置了. 现在我们看一下实体类的映射文件Mapper.->TUserMapper.xml

里面包含了一个根据主键查询用户信息的方法. 用来查找单个用户数据.

09561ba81b8ca80d9d0202acbf7ef9ab.png

代码如下:

select * from t_user where uid = #{uid}

因为本次使用的是xml的配置方式, 所以对应的接口文件也需要加入. 加入: TUserMapper.java文件.

package com.xymiao.mybatis3.mapper;import com.xymiao.mybatis3.pojo.TUser;public interface TUserMapper { TUser selectUser(String uid);}

namespace:

在之前版本的 MyBatis 中,命名空间(Namespaces)的作用并不大,是可选的。 但现在,随着命名空间越发重要,你必须指定命名空间。

命名空间的作用有两个,一个是利用更长的完全限定名来将不同的语句隔离开来,同时也实现了你上面见到的接口绑定。就算你觉得暂时用不到接口绑定,你也应该遵循这里的规定,以防哪天你改变了主意。 长远来看,只要将命名空间置于合适的 Java 包命名空间之中,你的代码会变得更加整洁,也有利于你更方便地使用 MyBatis。

现在我们基本上包含了我们能够访问数据库的基本配置信息.

MyBatis的配置文件: mybatis-config.xml MyBatis的配置文件

实体类: com.xymiao.mybatis3.pojo.TUser.java 映射与数据的数据模型

mapper文件: com.xymiao.mybatis3.mapper.TUserMapper.java 用来操作数据库

mapper.xml配置: mapper/TUserMapper.xml

所以, 我们需要进行一个测试类, 进行测试. 验证我们的编写是否正确.

编写测试 SqlSessionFactoryTest.java

首先需要注意; 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。

代码如下:

309f27dcf720def431adcd19cd353d49.png

现在可以直接执行该函数, 测试是否有异常, 如果没有任何提示错误, 就说明没有问题. 接着我们就编写具体的数据查询操作. MyBatis的数据SQL执行命令CURD, 都是由SqlSession进行操作. 既然有了SqlSessionFactory就可以很容易的获得SqlSession. 打开SqlSessionFactory接口, 我们查看其方法.

7eaf8b0413201009655061a9282d2af6.png

你会发现获得SqlSession的方法很多个. 我们使用默认的不带参数的.

代码如下:

SqlSession session = sqlSessionFactory.openSession();

因为该方法可能会出现异常, 这里直接使用try的方法访问. 这里我们需要获得我们要操作的mapper接口, 因为MyBatis的更新换代, 也出现了不同的方法进行查询数据, 先说第一种方式, 老的访问方式.

94a14f55923cc2699bf3479f2c277f31.png

使用session的selectOne方法获取select的一条数据. 传入对应的mapper全名和对应的方法, 并传入对应的参数.

为什么通过传入对应的namespace + 方法或者并称作: 完全限定名, 就可以访问呢? 因为在MyBatis的一开始就把对应的mapper信息放到(Configuration)缓存中, 程序所有的执行不可能凭空出现, 一点是有地方进行了初始化才能进行执行并达到你要的效果. map.put("key", "封装的mapper相关信息!"); 模拟一下而已. key就是: com.xymiao.mybatis3.mapper.TUserMapper.selectUser, 这样就做到根据传入的字符串找到了需要处理的结果.

并且这里的selectOne其实也是执行了selectList 只不过取出来第一个值而已. 并且当数据大于1的时候, 就会报出异常.

最终输出对应的结果集.

e5a7a3df6c03b0d263f416e68e44fcea.png

当然既然说了第一种不推荐就有第二种写法:

5d05d7f79e1f80244026cae6a9eaf435.png

这里看起来就舒服了很多根据反射机制, 通过执行是那个class. 进行反向得到需要操作的mapper文件. 这样我们就可以操作对应的方法. 得到对应的结果集. 这种出错率更加少一些. 看起来也更加舒服. 当然执行测试看到的效果也是一样的.

全部的代码如下:

package com.xymiao.mybatis3;import java.io.IOException;import java.io.InputStream;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 com.xymiao.mybatis3.mapper.TUserMapper;import com.xymiao.mybatis3.pojo.TUser;public class SqlSessionFactoryTest { public static void main(String[] args) throws IOException { // 配置文件地址 根据/resources的root查找 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); // 创建一个session工厂. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 第一种方式, 推荐使用第二种 try (SqlSession session = sqlSessionFactory.openSession()) { TUser tUser = (TUser) session.selectOne("com.xymiao.mybatis3.mapper.TUserMapper.selectUser", "1"); System.out.println(tUser); } // 第二种方式, 推荐使用这种 try (SqlSession session = sqlSessionFactory.openSession()) { TUserMapper mapper = session.getMapper(TUserMapper.class); TUser tUser = mapper.selectUser("1"); System.out.println(tUser); } }}

到这里简单的一个基于xml配置MyBatis简单的应用已经成功. 接下来会讲解使用注解的方式如何实现以上的功能.

完整的代码已经上传到github.

github地址: https://github.com/xymiao/mybatis3

位于: https://github.com/xymiao/mybatis3/tree/master/mybatis3_01_introduction

希望能够给你带来一定的帮助. 感谢阅读. 来个关注不迷路.



推荐阅读
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
author-avatar
破晓晨曦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有