网站服务器商佳匠网站建设
- 作者: 五速梦信息网
- 时间: 2026年04月20日 08:10
当前位置: 首页 > news >正文
网站服务器商,佳匠网站建设,网络信息设计,莱芜新闻视频回放今天Mybatis框架
一、Mybatis框架简介
1.1 传统JDBC的缺陷
#xff08;1#xff09;数据库连接创建、释放频繁会造成系统资源浪费
【MyBatis通过在核心配置文件中配置数据路连接池解决此问题】
#xff08;2#xff09; SQL语句在代码中硬编码(PreparedStatement向占位符传…Mybatis框架
一、Mybatis框架简介
1.1 传统JDBC的缺陷
1数据库连接创建、释放频繁会造成系统资源浪费
【MyBatis通过在核心配置文件中配置数据路连接池解决此问题】
2 SQL语句在代码中硬编码(PreparedStatement向占位符传参数)造成代码不易维护。
【MyBatis将SQL写在映射文件中并支持动态SQL通过Statement中的parameterType定义输入参数的类型】
3 JDBC对结果集解析存在硬编码查询列名SQL变化导致解析代码变化造成系统不易维护。
【通过Statement中的resultType定义输出结果的类型】
2.2 MyBatis定义
MyBatis是一个支持普通SQL查询、存储过程以及高级映射的持久层框架它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索使用简单的XML或注解进行配置和原始映射将接口和Java的POJO映射成数据库中的记录使得Java开发人员可以使用面向对象的编程思想来操作数据库。
2.3 ORM对象关系映射
MyBatis框架是一个ORMObject/Relation Mapping即对象关系映射框架。所谓的ORM就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术它通过描述Java对象与数据库表之间的映射关系自动将Java应用程序中的对象持久化到关系型数据库的表中。 二、MyBatis工作原理 1MyBatis读取核心配置文件mybatis-config.xmlmybatis-config.xml核心配置文件主要配置了MyBatis的运行环境等信息。
2加载映射文件Mapper.xmlMapper.xml文件即SQL映射文件该文件配置了操作数据库的SQL语句需要在mybatis-config.xml中加载才能执行。
3构造会话工厂通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory用于创建SqlSession。
4创建会话对象由会话工厂SqlSessionFactory创建SqlSession对象该对象中包含了执行SQL语句的所有方法。
5创建执行器会话对象本身不能直接操作数据库MyBatis底层定义了一个Executor接口用于操作数据库执行器会根据SqlSession传递的参数动态的生成需要执行的SQL语句同时负责查询缓存地维护。
6封装SQL信息SqlSession内部通过执行器Executor操作数据库执行器将待处理的SQL信息封装到MappedStatement对象中。
7操作数据库根据动态生成的SQL操作数据库。8输出结果映射执行SQL语句之后通过MappedStatement对象将输出结果映射至Java对象中。
三、MyBatis的核心对象
SqlSessionFactoryBuilder
SqlSessionFactory
SqlSession3.1 SqlSessionFactoryBuilder对象 作用用来创建SqlSessionFactory工厂对象 方法按照配置信息的传入方式
方法描述build(InputStream inputStream【, String environment, Properties properties】)inputStream是字节流它封装了XML文件形式的配置信息build(Reader reader【, String environment, Properties properties】)Reader字符流封装了xml文件形式的配置信息build(Configuration config)Configuation对象用于封装MyBatis项目中的配置信息。
environment决定将要加载的环境包括数据源和事务管理器
properties决定将要加载的properties文件。使用方式
// 读取配置文件
InputStream inputStream Resources.getResourceAsStream(配置文件位置);
// 根据配置文件构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);SqlSessionFactory对象是线程安全的它一旦被创建在整个应用程序执行期间都会存在使用单例模式创建。
3.2 SqlSessionFactory对象
作用创建SqlSession对象方法
方法名称描述SqlSession openSession()开启一个事务。SqlSession openSession(Boolean autoCommit)参数autoCommit可设置是否开启事务。 true表示关闭事务控制自动提交false表示开启事务控制。若不传入参数默认为false。SqlSession openSession(ExecutorType execType)ExecutorType.SIMPLE表示为每条语句创建一条新的预处理语句。ExecutorType.REUSE表示会复用预处理语句。ExecutorType.BATCH表示会批量执行所有更新语句。
3.3 SqlSession对象
作用SqlSession对象包含了执行SQL操作的方法由于其底层封装了JDBC连接所以可以直接使用SqlSession对象来执行已映射的SQL语句单线程对象。注意 每一个线程都应该有一个自己的SqlSession对象并且该对象不能共享。SqlSession对象是线程不安全的绝不能将其放在类的静态字段、对象字段或任何类型的管理范围中使用。SqlSession对象使用完之后要及时的关闭。方法
有关SELECT相关的方法
方法名称描述T selectOne(String statement)statement是在配置文件中定义的select元素的id。T selectOne(String statement, Object parameter)parameter是查询语句所需的参数。List selectList(String statement)statement是在配置文件中定义的select元素的id。List selectList(String statement, Objectparameter是查询语句所需的参数。List selectList(String statement, Object parameter, RowBounds rowBounds)rowBounds是用于分页的参数对象。void select(String statement, Object parameter, ResultHandler handler)handler对象用于处理查询语句返回的复杂结果集。该方法多用于多表查询。
有关INSERT相关的方法
方法名称描述int insert(String statement)参数statement是在配置文件中定义的insert元素的id。 返回影响条数int insert(String statement, Object parameter)parameter是插入语句所需的参数。
有关UPDATE相关的方法
方法名称描述int update(String statement)参数statement是在配置文件中定义的update元素的id。 返回更新条数int update(String statement, Object parameter)parameter是更新语句所需的参数。
有关DELETE相关的方法
方法名称描述int delete(String statement)参数statement是在配置文件中定义的delete元素的id。返回影响条数int delete(String statement, Object parameter)parameter是删除语句所需的参数。
有关事务的相关的方法
方法名称描述void commit()提交事务的方法。void rollback()回滚事务的方法。void close()关闭SqlSession对象。
四、MyBatis核心配置文件
MyBatis核心配置文件配置了MyBatis的全局信息。 在核心配置文件中configuration的子元素必须按照上图由上到下的顺序进行配置否则MyBatis在解析XML配置文件的时候会报错。
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configuration!– 加载db.properties文件 –properties resourcedb.properties/!– 设置别名 –typeAliasestypeAlias aliasUser typecom.tyut.pojo.User//typeAliases!– 加载运行环境 –environments defaultdevelopmentenvironment iddevelopment!– 事务管理 –transactionManager typeJDBC/!– 数据源管理 –dataSource typePOOLEDproperty namedrive value\({jdbc.driver}/property nameurl value\){jdbc.url}/property nameusername value\({jdbc.username}/property namepassword value\){jdbc.password}//dataSource/environment/environments!– 映射文件 –mappersmapper resourcecom.tyut.mapper.UserMapper/mapper/mappers
/configuration4.1 properties元素
properties是一个配置属性的元素该元素的作用是读取外部文件的配置信息
!– 加载db.properties文件 –
properties resourcedb.propertiesproperty namedriver value\({jdbc.driver} /property nameurl value\){jdbc.url} /property nameusername value\({jdbc.username} /property namepassword value\){jdbc.password} /
/propertiesjdbc.drivercom.mysql.cj.jdbc.Driver
jdbc.urljdbc:mysql://localhost:3306/db_01
jdbc.usernameroot
jdbc.passwordroot4.2 typeAliases元素
作用使用typeAliases元素为冗长的全限定名设置别名简化代码书写。
方式一在typeAliases元素下使用多个typeAlias元素为每一个全限定类逐个配置别名。
typeAliasestypeAlias aliasUser typecom.tyut.pojo.User/typeAlias aliasStudent typecom.tyut.pojo.Student/
/typeAliases方式二通过自动扫描包的形式自定义别名。
typeAliasespackage namecom.itheima.pojo/
/typeAliases方法三默认别名 4.3 environments元素
作用MyBatis可以配置多套运行环境如开发环境、测试环境、生产环境等。MyBatis的运行环境信息包括事务管理器和数据源。
transactionManager元素用于配置运行环境的事务管理器
daraSource元素用于配置运行环境的数据源信息。 environments defaultdevelopmentenvironment iddevelopment!—设置使用JDBC事务管理 –transactionManager typeJDBC /!-配置数据源 –dataSource typePOOLED property namedriver value\({jdbc.driver} /property nameurl value\){jdbc.url} /property nameusername value\({jdbc.username} /property namepassword value\){jdbc.password} //dataSource/environment
/environments事务管理
transcationManager元素可以配置两种类型的事务管理器分别是JDBC和MANAGED。
–JDBC此配置直接使用JDBC的提交和回滚设置它依赖于从数据源得到的连接来管理事务的作用域。
–MANAGED此配置不提交或回滚一个连接而是让容器来管理事务的整个生命周期。默认情况下它会关闭连接。数据源管理
1.UNPOOLED表示数据源为无连接池类型。配置此数据源类型后程序在每次被请求时会打开和关闭数据库连接。
属性说明driverJDBC驱动的Java类的完全限定名url数据库的URL地址username登录数据库的用户名password登录数据库的密码defaultTransactionIsolationLevel默认的连接事务隔离级别
2.POOLED表示数据源为连接池类型。节省了在创建新的连接对象时需要初始化和认证的时间。
属性说明poolMaximumActiveConnections在任意时间可以存在的活动连接数量默认值10。poolMaximumIdleConnections任意时间可能存在的空闲连接数。
4.4 mappers元素
作用mappers元素用于引入MyBatis映射文件。映射文件包含了POJO对象和数据表之间映射信息。MyBatis通过核心配置文件中的mappers元素找到映射文件并解析其中的映射信息
//类路径引入
mappersmapper resourcecom/tyut/mapper/Mapper.xml/
/mappers//本地文件路径引入
mappers
mapper urlfile://D:/com/tyut/mapper/Mapper.xml/
/mappers//接口引入
mappers
mapper classcom.tyut.mapper.Mapper/
/mappers//包名引入
mapperspackage namecom.tyut.mapper/
/mappers五、MyBatis映射文件
相关约束信息
?xml version1.0 encodingUTF-8?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd1.mapper元素
namespace属性
1.用于区分不同的mapper全局唯一。
2.绑定DAO接口即面向接口编程。当namespace绑定某一接口之后可以不用写该接口的实现类MyBatis会通过接口的全限定名查找到对应的mapper配置来执行SQL语句因此namespace的命名必须跟接口同名。id属性
1.在不同的映射文件中mapper元素的子元素的id可以相同。
2.MyBatis通过mapper元素的namespace属性值和子元素的id联合区分不同的Mapper.xml文件。
3.接口中的方法与映射文件中SQL语句id应一一对应。 2.select元素
select元素用来映射查询语句它可以从数据库中查询数据并返回。
select id parameterType resultTypeselect的sql语句
/select属性说明id表示命名空间中元素的唯一标识通过该标识可以调用这条查询语句。parameterType它是一个可选属性用于指定SQL语句所需参数类的全限定名或者别名其默认值是unset。resultType用于指定执行这条SQL语句返回的全限定类名或别名。resultMap表示外部resultMap的命名引用。resultMap和resultType不能同时使用。flushCache用于指定是否需要MyBatis清空本地缓存和二级缓存。timeout用于设置超时时间单位为秒。
3.insert元素 insert元素用于映射插入语句在执行完元素中定义的SQL语句后会返回插入记录的数量。
insert id parameterType
insert into users(uid,uname,uage) values(#{uid}, #{uname}, #{uage})
/insert属性说明keyProperty 仅对insert和update元素有用将插入或更新操作的返回值赋值给POJO类的某属性。如果需要设置联合主键在多个值之间用逗号隔开keyColumn 仅对insert和update元素有用该属性用于设置第几列是主键当主键列不是表中的第一列时需要设置。需要设置联合主键时在多个值之间用逗号隔开。useGeneratedKeys 仅对insert和update元素有用该属性会使MyBatis调用JDBC的getGeneratedKeys方法来获取由数据库内部生产的主键如MySQL和SQL Server等自动递增的字段其默认值为false。
如果使用的数据库支持主键自动增长那么可以通过keyProperty属性指定POJO类的某个属性接收主键返回值通常会设置到id属性上然后useGeneratedKeys的属性值设置为true。
insert idaddUser parameterType
keyPropertyuid useGeneratedKeystrue
insert into users(uid,uname,uage) values(#{uid},#{uname},#{uage})
/insert4.update元素
update元素用于映射更新语句它可以更新数据库中的数据。在执行完元素中定义的SQL语句后会返回更新的记录数量。
update id parameterTypeupdate users set uname #{uname},uage #{uage} where uid #{uid}
/update5.delete元素
delete元素用于映射删除语句在执行完delete元素中的SQL语句之后会返回删除的记录数量。
delete iddeleteUser parameterTypeIntegerdelete from users where uid#{uid}
/delete6.sql元素
sql元素的作用是定义可重用的SQL代码片段它可以被包含在其他语句中。sql元素可以被静态地在加载参数时参数化sql元素不同的属性值通过包含的对象发生变化。
sql idsomeincludefrom include refid\({include_target} //sqlsql iduserColumns uid,uname,uage
/sqlselect idfindUserById parameterTypeInteger
resultTypecom.tyut.pojo.User select include refiduserColumns/ include refidsomeincludeproperty nameinclude_target valueusers //includewhere uid #{uid}
/select tip:sql标签对经常使用的代码段进行提取在引用时要用到如下标签
include refidsql标签的idproperty namesql标签中的占位符 value占位符的值
/include7.resultMap元素
resultMap元素主要作用是定义映射规则、更新级联以及定义类型转化器等。
默认情况下MyBatis程序在运行时会自动将查询到的数据与需返回的对象的属性进行匹配赋值**数据表中列名**与**对象的属性**名完全一致才能匹配成功并赋值。数据表中的列和需要返回的对象的属性可能不会完全一致这种情况下MyBatis不会自动赋值这时就需要使用resultMap元素进行结果集映射。mapper namespacecom.tyut.mapper.StudentMapper
resultMap type要映射的pojo对象 idsmid property属性名 columndb列名/ result property column/
/resultMapselect idfindAllStudent resultMapsmselect * from t_student
/select
/mapper六、动态SQL语句
6.1 条件查询操作
1.单条件判断
if test逻辑判断语句要拼接的SQL语句
/if//对username做非空判断
select * from t_user where 11
if testusername ! and username ! nulland username like concat(%, #{username}, %)
/if2.多分支判断
choosewhen test逻辑判断语句/when when test逻辑判断语句/when otherwise/otherwise
/chooseselect * from t_user where 11
choosewhen testusername ! nulland username #{username}/when when testjob ! nulland job #{job}/when otherwiseand phone is not null/otherwise
/choose在映射文件中编写的SQL后面加入了“where 11”的条件的话既保证了where后面的条件成立又避免了where后面第一个词是and或者or之类的关键字。如果将where后面的11去掉这条拼接出的SQL语句是不正确
3.wheretrim元素
where会自动判断SQL语句只有where内的一个或多个条件成立时才会在拼接SQL中加入where关键字否则将不会添加还会去除多余的“AND”或“OR”。
select * from t_customer
whereif testusername !null and username !and username like concat(%,#{username}, %)/ifif testjobs !null and jobs !and jobs #{jobs}/if
/wheretrim的作用是去除和添加特殊的字符串。
属性说明prefix指定给SQL语句增加的前缀prefixOverrides指定SQL语句中要去掉的前缀字符串suffix指定给SQL语句增加的后缀suffixOverrides指定SQL语句中要去掉的后缀字符串
select * from t_customer
trim prefixwhere prefixOverridesandif testusername !null and username !and username like concat(%,#{username}, %)/ifif testjobs !null and jobs !and jobs #{jobs}/if
/trim4.foreach元素
foreach元素主要用于遍历支持数组list或set接口的集合.
属性说明item(必选)集合中每一个元素进行迭代时的别名index在List和数组中index是元素的序号在Map中index是元素的key。open表示foreach语句代码的开始符号一般和close“)”合用。常用在in条件语句中。该属性可选。separator表示元素之间的分隔符。可选close表示foreach语句代码的关闭符号一般和open(合用。常用在in条件语句中。该属性可选。collection(必选)用于指定遍历参数的类型。注意该属性必须指定不同情况下该属性的值是不一样的。若参数是Listcollection为list若参数是数组collection为array若参数是Mapcollection为Map的键
遍历数组传参为数组
select idfindByArray
parameterTypejava.util.Arrays
resultTypecom.tyut.pojo.Customer
select * from t_customer where id in
foreach itemid indexindex collectionarray open( separator, close)
#{id}
/foreach
/select遍历集合传参为集合
select idfindByList parameterTypejava.util.List
resultTypecom.tyut.pojo.Customer
select * from t_customer where id in
foreach itemid indexindex collectionlist
open( separator, close)
#{id}
/foreach
/select遍历Map传参为多个聚合类型
select idfindByMap parameterTypejava.util.Map
resultTypecom.itheima.pojo.Customer
select * from t_customer where jobs#{jobs} and id in
foreach itemroleMap indexindex collectionid open( separator, close)
#{roleMap}
/foreach
/select6.2 更新操作
set元素主要用于更新操作它可以在动态SQL语句前输出一个SET关键字并将SQL语句中最后一个多余的逗号去除。
update t_customer
setif testusername !null and username !username#{username},/ifif testjobs !null and jobs !jobs#{jobs},/if
/set
where id#{id}**tip**在使用set元素进行字段信息更新时要确保传入的更新字段不能都为空。
七、MyBatis框架环境搭建
1.pom相关依赖
!-- 添加相关的依赖 --dependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/versionscopetest/scope/dependency!-- mybatis相关依赖 --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.10/version/dependency!-- mysql相关依赖 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/version/dependency
/dependencies为了使得项目可以加载到此项目下的所有特殊文件
!-- 对于项目中的properties和xml结尾的文件均可加载 --
buildresourcesresourcedirectorysrc/main/java/directoryincludesinclude**/*.properties/includeinclude**/*.xml/include/includes/resource/resources
/build2.配置 MyBatis 环境
2.1 创建 mybatis-config.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configurationproperties resourcedb.properties/environments defaultdevelopmentenvironment iddevelopmenttransactionManager typejdbc/transactionManagerdataSource typePOOLEDproperty namedriver value\){jdbc.driver}/property nameurl value\({jdbc.url}/property nameusername value\){jdbc.username}/property namepassword value${jdbc.password}//dataSource/environment/environmentsmappersmapper resourcemapper/UserMapper.xml/mapper/mappers
/configuration2.2 配置数据源
jdbc.driver com.mysql.cj.jdbc.Driver
jdbc.url jdbc:mysql://localhost:3306/db_student?serverTimezoneUTCcharacterEncodingutf8useUnicodetrueuseSSLfalse
jdbc.username root
jdbc.password 1234562.3 创建pojo实体
public class User {private int id;private String name;private String email;// Getters and setters
}2.4 创建Mapper接口
public interface UserDaoImpl {User getUserById(int id);ListUser getAllUsers();
}2.5 创建Mapper映射文件
?xml version1.0 encodingUTF-8 ?
mapper namespacecom.tyut.mapper.UserMapperselect idgetUserById resultTypeUserSELECT id, name, email FROM users WHERE id #{id}/selectselect idgetAllUsers resultTypeUserSELECT id, name, email FROM users/select/mapper2.6 配置 SqlSessionFactory
public class MyBatisUtil {private static SqlSessionFactory sqlSessionFactory;static {try {InputStream inputStream Resources.getResourceAsStream(mybatis-config.xml);sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}public static SqlSession getSqlSession() {return sqlSessionFactory.openSession();}
}2.7 使用 MyBatis 进行数据库操作
public class UserService {public User getUserById(int id) {try (SqlSession session MyBatisUtil.getSqlSession()) {UserMapper userMapper session.getMapper(UserMapper.class);return userMapper.getUserById(id);}}public ListUser getAllUsers() {try (SqlSession session MyBatisUtil.getSqlSession()) {UserMapper userMapper session.getMapper(UserMapper.class);return userMapper.getAllUsers();}}
}
- 上一篇: 网站服务器拒绝连接做局域网网站教程
- 下一篇: 网站服务器试用做网站的服务器
相关文章
-
网站服务器拒绝连接做局域网网站教程
网站服务器拒绝连接做局域网网站教程
- 技术栈
- 2026年04月20日
-
网站服务器建设商抚州 提供网站建站 公司
网站服务器建设商抚州 提供网站建站 公司
- 技术栈
- 2026年04月20日
-
网站服务器建设的三种方法是什么青岛注册公司的步骤和流程
网站服务器建设的三种方法是什么青岛注册公司的步骤和流程
- 技术栈
- 2026年04月20日
-
网站服务器试用做网站的服务器
网站服务器试用做网站的服务器
- 技术栈
- 2026年04月20日
-
网站服务器是指什么绍兴市网站建设
网站服务器是指什么绍兴市网站建设
- 技术栈
- 2026年04月20日
-
网站服务器停止响应怎么办银行网站建设
网站服务器停止响应怎么办银行网站建设
- 技术栈
- 2026年04月20日






