Mybatis的核心配置

学习目标

 

  • 了解Mybatis核心对象的作用
  • 熟悉Mybatis配置文件中各个元素的作用
  • 掌握Mybatis映射文件中常用元素的使用

     

文章目录

 

1.Mybatis的核心对象

1.1 SqlSessionFactory

1.2 SqlSession

1.2.1 使用工具类创建SqlSession

 2. 配置文件

2.1 主要元素

3. 映射文件

2.1主要元素


1.Mybatis的核心对象

1.1 SqlSessionFactory

SqlSessionFactory是Mybatis框架中十分重要的对象,他是单个数据库映射关系经过编译后的内存镜像,其主要对象是创建SqlSession

SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来构建,而SqlSessionFactoryBuilder则可以通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例

// 读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);// 2.通过配置文件构建 SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

SqlSessionFactory对象是线程安全的,它一旦被创建,整个应用执行期间都会存在。如果我们多次地创建同一个数据库的SqlSessionFactory,那么此数据库的资源很容易被耗尽。为了解决此问题,通常每一个数据库都会只对应一个SqlSessionFactory,所以在构建SqlSessionFactory实例时,建议使用单列模式。

1.2 SqlSession

SqlSession是Mybatis框架中另一个十分重要的对象,它是应用程序与持久层之间执行交互操作的一个单线程对象,其主要作用是执行持久化操作。SqlSession对象包含了数据库中执行SQL操作的方法,由于其底层封装了JDBC连接,所以可以直接使用其实例来执行已映射SQL语句。

1.2.1 使用工具类创建SqlSession

package com.mybatis.util;import java.io.Reader;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;/** 工具类*/
public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory;// 初始化SqlSessionFactory对象static {try {// 使用Mybatis提供的Resources类加载Mybatis的配置文件Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 构建SqlSessionFactory工厂sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);} catch (Exception e) {e.printStackTrace();}}// 获取SqlSeeion对象的静态方法public static SqlSession getSession() {return sqlSessionFactory.openSession();}
}

 2. 配置文件

2.1 主要元素

<configuration>根元素<properties>
<settings>
<typeAliases>
<typeHandlers>
<objectFactory>
<plugins>
<environments>
<databaseIdProvider>
<mappers>

注:<configuration>的子元素必须按照表中由上到下的顺序进行配置,否则Mybatis在解析XML配置文件的时候会报错。

下面介绍几个元素的使用方法:

 1.<properties>元素

(1)在项目的src目录下,添加一个全名为db.properties的配置文件,编辑后的代码如下所示:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456

(2)在mybatis配置文件mybatis-config.xml中配置<properties.../>元素,具体如下:

	<properties resource="db.properties" />

(3)修改配置文件中数据库的连接的信息,具体如下:

	<dataSource type="POOLED"><!-- 数据库驱动 --><property name="driver" value="${jdbc.driver}" /><!-- 连接数据库的url --><property name="url" value="${jdbc.url}" /><!-- 连接数据库的用户名 --><property name="username" value="${jdbc.username}" /><!-- 连接数据库的密码 --><property name="password" value="${jdbc.password}" /></dataSource>

 2. <typeAliases>元素

<typeAliases>元素用于为配置文件的Java类型配置一个简短的名字,即设置别名。别名的设置与XML配置相关,其使用的意义在于减少全限定类名的冗余。

使用 <typeAliases>元素配置别名的方法如下:

<!-- 定义别名 -->
<typeAliases><typeAlias alias="customer" type="com.mybatis.po.Customer" /></typeAliases>

3. 映射文件

3.1主要元素

<mapper><select> 映射查询语句,可自定义参数,返回结果集等
<insert> 映射插入语句,执行后返回一个整数,代表插入的条数
<update> 映射更新语句,执行后返回一个整数,代表更新的条数
<delete> 映射删除语句,执行后返回一个整数,代表删除的条数
<sql> 用于定义一部分SQL,然后可被其他语句引用此SQL
<cache> 给命名空间的缓存配置
<cache-ref> 其他命名空间缓存配置的引用
<resultMap> 用于描述如何从数据库结果集中来加载对象

下面是主要元素的使用方式:

<!-- 根据客户名编号查询客户信息列表 -->
<mapper namespace="com.nynu.qdy.mapper.CustomerMapper"><select id="findCustomerById" parameterType="Integer"resultType="com.nynu.qdy.po.Customer">select * from user where id = #{id}</select><!-- 根据客户名模糊查询客户信息列表 --><select id="findCustomerByName" parameterType="String"resultType="com.nynu.qdy.po.Customer">select * from user where username like '%${value}%'</select><!-- 添加用户信息 --><insert id="addCustomer"parameterType="com.nynu.qdy.po.Customer">insert into user(id,username,jobs)values(#{id},#{username},#{jobs})</insert><!-- 更新用户信息 --><update id="updateCustomer"parameterType="com.nynu.qdy.po.Customer">update user setusername=#{username},jobs=#{jobs} whereid=#{id}</update><!-- 删除客户信息 --><delete id="deletetCustomer" parameterType="Integer">delete from userwhere id=#{id}</delete><!-- resultMap的元素结构 --><resultMap type="" id=""><constructor>	<!-- 类在实例化时,用于注入结果到构造方法中 --><idArg />	<!-- ID参数;标记结果作为ID --><arg />		<!-- 注入到构造方法中的一个普通结果 --></constructor><id />			<!-- 用于表示哪个键是主键 --><result />		<!-- 注入到字段或JavaBean属性的普通结果 --><association property=""></association>			<!-- 用于一对一关联 --><collection property=""></collection>			<!-- 用于一对多关联 --><discriminator javaType="">						<!-- 使用结果集来决定使用哪个结果映射 --><case value=""></case>						<!-- 某些值的结构映射 --></discriminator></resultMap></mapper>	

 其中resultMap的映射文件为:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nynu.qdy.mapper.UserMapper"><resultMap type="com.nynu.qdy.po.User" id="resultMap"><id property="id" column="t_id" /><result property="name" column="t_name" /><result property="age" column="t_age" /></resultMap><select id="findAllUser" resultMap="resultMap">select * from t_user</select></mapper>

 

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

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

相关文章

jzoj5353-村通网【最小生成树】

正题 题目大意 一条边的价格为两个点的曼哈顿距离乘B&#xff0c;修建源点价格为A。要求每个联通块内都有源点的最小价格。 解题思路 对于最终每个联通块肯定是棵树。对于合并每个联通块可以减少一个源点。所以将最小生成树上价格小于A的边都加进去就可以了。 codecodecode …

auto.js小案例

微信朋友圈自动点赞 var it className("ListView").findOne(); var i1;while(i<5){say desc(评论).findOne();say.click();goodtext(赞).findOne();goodpgood.parent();goodp.click();sleep(1000);it.scrollDown();i; }home();微信轰炸机 toast("轰炸机已准…

本土开源、立足全球 | COSCon'17

全球公有云 90% 的服务器运行的是开源 Linux 操作系统&#xff01; GitHub 上有超过 150 万个组织&#xff0c;正在进行开源开发&#xff01; 本土开源项目目前在 Apache 的顶级以及孵化列表中已经有 6 个&#xff01; 你想知道这其中都有什么奥秘吗&#xff1f;Apache 顶级项目…

Zookeeper选举原理——FastLeaderElection

转载自 Zookeeper选举原理 作为一个分布式应用程序协调服务&#xff0c;在大型网站中&#xff0c;其本身也是集群部署的&#xff0c;安装zookeeper的时候最好是单数节点&#xff0c;因为要选举。Zookeeper的leader节点是集群工作的核心&#xff0c;用来更新并保证leader和ser…

P2742-二维凸包/圈奶牛Fencing the Cows【凸包】

正题 题目链接:https://www.luogu.org/recordnew/lists?uidSSL_WYC_zombieeeeee&pidP2742&status&sort0 题目大意 求凸包总长度 解题思路 求凸包 codecodecode #include<cstdio> #include<algorithm> #include<cmath> #define N 10010 usin…

Wamp升级php到7.3版本

在网上找了关于cms的模板&#xff0c;结果显示php版本低于7.2的无法使用。 找了很多wamp和xampp的安装包&#xff0c;要不然版本没到7.2&#xff0c;要不然安装无法使用&#xff0c;浪费了很多时间 于是想自己手动把php升到7.3版本&#xff0c;刚开始看教程&#xff0c;特别麻烦…

浅析Entity Framework Core中的并发处理

前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework Core的并发处理方式. 1.常见的并发处理策略 要了解如何处理并发,就要知道并发的一般处理策略 悲观并发策略 悲观并发策略,正如其名,它指的是对数据被外界&…

Mybatis的关联映射

学习目标 了解数据表之间以及对象之间的三种关联关系熟悉关联关系中的嵌套查询和嵌套结果掌握一对一、一对多和多对多关联映射的使用文章目录 1. 关联关系概述 2. 一对一 3.一对多 4. 多对多 1. 关联关系概述 一对一的关系&#xff1a;就是在本类中定义对方类型的对象一对…

POJ3348-Cows【凸包,计算几何】

正题 题目大意 凸包的面积S&#xff0c;求⌊S/50⌋\left \lfloor S/50\right \rfloor⌊S/50⌋ 解题思路 求凸包&#xff0c;然后求面积&#xff0c;然后求答案。 codecodecode #include<cstdio> #include<algorithm> #include<cmath> #define N 10010 usi…

【乱码】字符串乱码

1、html <meta charset"UTF-8">2、mysql mysql_query(set names "utf8");3、php header("Content-Type: application/json;charsetUTF-8");json解码 $a你好; echo json_encode($a);加入 $aurldecode($a);即可解码

.NET Core 使用RSA算法 加密/解密/签名/验证签名

前言 前不久移植了支付宝官方的SDK&#xff0c;以适用ASP.NET Core使用支付宝支付&#xff0c;但是最近有好几位用户反应在Linux下使用会出错&#xff0c;调试发现是RSA加密的错误&#xff0c;下面具体讲一讲。 RSA在.NET Core的改动 以前我们使用RSA加密主要是使用RSACryptoSe…

C++描述杭电OJ 2012.素数判定 ||

C描述杭电OJ 2012.素数判定 || Problem Description 对于表达式n^2n41&#xff0c;当n在&#xff08;x,y&#xff09;范围内取整数值时&#xff08;包括x,y&#xff09;(-39<x<y<50)&#xff0c;判定该表达式的值是否都为素数。 Input 输入数据有多组&#xff0c;…

ajax读取.txt文件出现乱码

其实挺简单一问题&#xff0c;刚开始以为页面没输入 <meta charset"UTF-8">结果还是乱码&#xff0c;后来想到老师讲过&#xff0c;新建文件时保存文件有utf8和ANSI等格式&#xff0c;一看果然不对&#xff0c;自己每次新建文件默认格式都是ANSI&#xff0c;这…

P3369-[模板]普通平衡树【有旋Treap】

正题 评测记录:https://www.luogu.org/recordnew/lists?uidSSL_WYC_zombieeeeee&pidP3369&status&sort0 题目大意 要求支持查询一个数字的排名&#xff0c;查询该排名的数字&#xff0c;插入数字&#xff0c;删除数字&#xff0c;求前驱后继。 解题思路 有旋Tr…

ASP.NET Core中的OWASP Top 10 十大风险-SQL注入

本博文翻译自&#xff1a; https://dotnetcoretutorials.com/2017/10/11/owasp-top-10-asp-net-core-sql-injection/ OWASP或者说是开放Web应用程序安全项目&#xff0c;这是一个非营利性的组织&#xff0c;其目的是促进安全的web应用程序的开发和设计。当他们在世界各地举办不…

C++描述杭电OJ 2023.求平均成绩 ||

C描述杭电OJ 2023.求平均成绩 || Problem Description 假设一个班有n(n<50)个学生&#xff0c;每人考m(m<5)门课&#xff0c;求每个学生的平均成绩和每门课的平均成绩&#xff0c;并输出各科成绩均大于等于平均成绩的学生数量。 Input 输入数据有多个测试实例&#x…

adb操作

adb下载安装 链接&#xff1a;https://pan.baidu.com/s/1Tg_q7Q5wS-0-y_3KuZL-dQ 提取码&#xff1a;599i 检验是否连接到手机 adb devices 检测是否自己的手机 adb shell wm size 无线连接: 先开启usb连接调试 连接手机ip adb connect 192.168.1.5 连接成功后可拔掉usb继续测…

P3369-[模板]普通平衡树【替罪羊树】

正题 评测记录:https://www.luogu.org/recordnew/lists?uidSSL_WYC_zombieeeeee&pidP3369&status&sort0 题目大意 要求支持查询一个数字的排名&#xff0c;查询该排名的数字&#xff0c;插入数字&#xff0c;删除数字&#xff0c;求前驱后继。 解题思路 替罪羊…

萨提亚领衔主题演讲,带领高管和MVP合影,预告Julia女神的演讲中将有我的.NET Core实践

微软Tech Summit 2017大会在精彩的暖场视频中劲爆开始&#xff0c;瞬间点燃参会者们的热情。予力全球每一人、每一组织&#xff0c;成就不凡&#xff0c;是微软的使命。 微软公司首席执行官萨提亚 ∙ 纳德拉发布了主题演讲&#xff0c;他表示&#xff1a;“稳定发展、持续创新…

C++描述杭电OJ 2015.偶数求和 ||

C描述杭电OJ 2015.偶数求和 || Problem Description 有一个长度为n(n<100)的数列&#xff0c;该数列定义为从2开始的递增有序偶数&#xff0c;现在要求你按照顺序每m个数求出一个平均值&#xff0c;如果最后不足m个&#xff0c;则以实际数量求平均值。编程输出该平均值序列…