mybatisxml怎么使用(Mybatis3系列-2.)

上一节已经介绍了开始使用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项目

<groupId>com.xymiao.mybatis3</groupId> <artifactId>mybatis3_01_introduction</artifactId> <version>0.0.1-SNAPSHOT</version>

并加入MyBatis的依赖

<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency>

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


mybatisxml怎么使用(Mybatis3系列-2.)(1)


大概的介绍一下流程

首先我们考虑一下, 我们使用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 }

配置文件

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

mybatisxml怎么使用(Mybatis3系列-2.)(2)

文件内容如下:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis3?useUnicode=true&characterEncoding=UTF-8" /> <property name="username" value="root" /> <property name="password" value="xymiao" /> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/TUserMapper.xml" /> </mappers> </configuration>


配置文件的简单说明:

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方式: 不推荐使用这种方式, 开发人员想要路径一致比较困难. 实际开发中基本不会使用这种情况.

<mapper url="file:///[项目路径]\mybatis3_01_introduction\src\main\resources\mapper\TUserMapper.xml" /> [项目路径]: 改成项目对应的路径

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

<mapper class="com.xymiao.mybatis3.mapper.TUserMapper" />

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

<package name="com.xymiao.mybatis3.mapper"/>

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


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

配置Mapper

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

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

mybatisxml怎么使用(Mybatis3系列-2.)(3)

代码如下:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xymiao.mybatis3.mapper.TUserMapper"> <select id="selectUser" resultType="com.xymiao.mybatis3.pojo.TUser"> select * from t_user where uid = #{uid} </select> </mapper>

因为本次使用的是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 的实例。

代码如下:

mybatisxml怎么使用(Mybatis3系列-2.)(4)

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

mybatisxml怎么使用(Mybatis3系列-2.)(5)

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

代码如下:

SqlSession session = sqlSessionFactory.openSession();

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

mybatisxml怎么使用(Mybatis3系列-2.)(6)

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

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


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

最终输出对应的结果集.

mybatisxml怎么使用(Mybatis3系列-2.)(7)

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

mybatisxml怎么使用(Mybatis3系列-2.)(8)

这里看起来就舒服了很多根据反射机制, 通过执行是那个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


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

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页