MyBatis(如何使用MyBatis)

2022-05-13 14:14:35 浏览数 (1)

MyBatis是什么?点击查看

MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

在搭建好MyBatis的运行环境后,需要配置两个基础文件,一个是【全局配置文件】,另一个是【映射文件】。

全局配置文件的工作比较类似于JDBC中的工具类,用于连接数据库一系列操作。

映射文件的工作是用来编写动态SQL,用于接收参数,然后形成一个SQL语句发送到数据库执行的一系列操作。

全局配置文件

代码语言:javascript复制
<?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>
  <!--
    用于配置mybatis的配置文件
    resource:用于加载本地properties文件
    property先执行properties后执行
  -->
  <properties resource="jdbc.properties"></properties>

  <!--
  配置环境信息:
  事务:
  数据库连接池:
  default:指定默认使用的环境,值为environment的id
   -->
   <environments default="development">
     <environment id="development">
     <!-- 指定使用jdbc事务 -->
     <transactionManager type="JDBC"/>
     <!-- 指定数据源
       type:是否使用数据库连接池
       pooled是mybatis内置的数据库连接池
       mybatis内置的连接池不好用,但是spring可以代替管理数据源可以使用 druid等第三方的数据库
      -->
     <dataSource type="POOLED">
       <property name="driver" value="${jdbc.driver}"/>
       <property name="url" value="${jdbc.url}"/>
       <property name="username" value="${jdbc.username}"/>
       <property name="password" value="${jdbc.pwd}"/>
     </dataSource>
     </environment>
   </environments>
   
   <mappers>
     <!-- 加载类路径下的映射文件 resource是基于类路径下的-->
     <mapper resource="UserMapper.xml"/>
   </mappers>
</configuration>

一般会在全局配置文件中通过properties文件方式加载连接数据库。至于properties文件中如何配置,大家可以通过百度,或者留意后续更新。

以上全局配置中的value值如``${jdbc.driver}``都是在加载properties文件中的键值对。

映射文件

代码语言:javascript复制
<?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">
 <!--
   主节点:
   namespace:命名空间,类似package,目的是为了包装sql id的唯一性
   Java package为了保证类名的唯一性
  -->
<mapper namespace="UserMapper">
<!--
  用于执行select查询语句的
  id:必须
  resultType:定义查询结果的映射类型
    如果返回单行记录,类型就是返回值的类型
    如果返回多行记录,类型就是集合的泛型
  #{}为占位符 可以接收简单类型,hashMap、实体类,如果输入参数为简单类型 #{任意值},如果输入参数为hashMap,#{key},如果输入参数为pojo类型#{属性名}
  ${}为拼接字符串 可以接受简单类型、hashMap、实体类
 -->
   <select id="selectCount" resultType="int">
     select count(*) from t_user
   </select>
   <select id="selectAll" resultType="int" parameterType="java.lang.String">
     select id from t_user where pwd=${value}
   </select>
</mapper>

具体详解已经写在代码的详解中,配合代码查看更加直观。

需要注意的是,parameterType指的是输入参数,值是该数据类型的Java包装类全限定类名或是别名。别名可以在全局配置文件中声明,一些常见的Java数据类型MyBatis都有提供有别名,可自行百度学习。

使用

然后就是在测试类中使用配置好的MyBatis项目了

代码语言:javascript复制
public class test {

  public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    //创建构建者对象
    SqlSessionFactoryBuilder factory=new SqlSessionFactoryBuilder();
    //加载xml配置文件
    InputStream is=Resources.getResourceAsStream("mybatis-config.xml");
    //构建工厂对象
    SqlSessionFactory ssf=factory.build(is);
    //使用工厂对象获取SQL session对象
    SqlSession ss=ssf.openSession();
    //selectOne方法只能返回一条数据
    //参数为映射文件名(无后缀)和select标签的id
    Integer sum=ss.selectOne("UserMapper.selectCount");
    System.out.println(sum);
    //selectList方法可以返回0或多条数据
    //第一个参数同上,第二个参数为传的参数
    List<Object> all=ss.selectList("UserMapper.selectAll","123");
    System.out.println(all);
    //将该SqlSession对象关闭,后续无法继续使用
    ss.close();
  }
}

xml中包括声明(声明版本信息及编码格式)、约束(mybatis使用的是dtd约束)、节点及属性。

0 人点赞