资讯详情

资讯详情

Mybatis - 入门教程

一、简介什么是 MyBatisMyBatis 是一款优秀的持久层框架它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJOPlain Old Java Objects普通老式 Java 对象为数据库中的记录。Mybatis网址https://mybatis.org/mybatis-3/zh_CN/index.html二、引入1、安装要使用 MyBatis 只需将mybatis-x.x.x.jar 文件置于类路径classpath中即可。如果使用 Maven 来构建项目则需将下面的依赖代码置于 pom.xml 文件中dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversionx.x.x/version/dependency2、配置在 application.properties 或 application.yml 中配置数据库连接和 MyBatis 的基础路径# application.properties# 数据库连接配置spring.datasource.urljdbc:mysql://localhost:3306/your_databasespring.datasource.usernamerootspring.datasource.passwordyour_password spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver# MyBatis 配置# 指定 Mapper XML 文件的位置如果使用 XML 方式mybatis.mapper-locationsclasspath:mapper/*.xml# 指定实体类所在的包方便在 XML 中直接使用类名mybatis.type-aliases-packagecom.example.domain三、使用1、使用注解写 SQL使用注解写 SQL适合简单查询直接在方法上使用 Select、Insert 等注解编写 SQL非常简洁。packagecom.example.mapper;importcom.example.domain.User;importorg.apache.ibatis.annotations.Mapper;importorg.apache.ibatis.annotations.Select;MapperpublicinterfaceUserMapper{Select(SELECT * FROM users WHERE id #{id})UserfindById(Longid);}2、使用 XML 映射文件使用 XML 映射文件适合复杂 SQL创建一个与 Mapper 接口全限定名相同的 XML 文件Mapper 接口packagecom.example.mapper;importcom.example.domain.User;importorg.apache.ibatis.annotations.Mapper;MapperpublicinterfaceUserMapper{UserfindById(Longid);}XML 映射文件 (src/main/resources/mapper/UserMapper.xml)namespace 必须指向对应的 Mapper 接口id 必须与方法名一致。?xml version1.0 encodingUTF-8 ?!DOCTYPEmapperPUBLIC-//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmappernamespacecom.example.mapper.UserMapperselectidfindByIdresultTypecom.example.domain.UserSELECT * FROM users WHERE id #{id}/select/mapper在 Service 或 Controller 中直接使用完成以上步骤后你就可以像使用普通的 Spring Bean 一样通过 Autowired 注入 Mapper 并调用其方法了。ServicepublicclassUserService{AutowiredprivateUserMapperuserMapper;// 直接注入接口Spring 会提供代理实现publicUsergetUser(Longid){returnuserMapper.findById(id);}}四、参数说明1、SELECT查询语句是 MyBatis 中最常用的元素之一——光能把数据存到数据库中价值并不大还要能重新取出来才有用多数应用也都是查询比修改要频繁。 MyBatis 的基本原则之一是在每个插入、更新或删除操作之间通常会执行多个查询操作。因此MyBatis 在查询和结果映射做了相当多的改进。一个简单查询的 select 元素是非常简单的。比如selectidselectPersonparameterTypeintresultTypehashmapSELECT * FROM PERSON WHERE ID #{id}/selectselect 元素允许你配置很多属性来配置每条语句的行为细节。selectidselectPersonparameterTypeintparameterMapdeprecatedresultTypehashmapresultMappersonResultMapflushCachefalseuseCachetruetimeout10fetchSize256statementTypePREPAREDresultSetTypeFORWARD_ONLYSelect 元素的属性属性描述id在命名空间中唯一的标识符可以被用来引用这条语句。parameterType将会传入这条语句的参数的类全限定名或别名。这个属性是可选的因为 MyBatis 可以通过类型处理器TypeHandler推断出具体传入语句的参数默认值为未设置unset。parameterMap用于引用外部 parameterMap 的属性目前已被废弃。请使用行内参数映射和 parameterType 属性。resultType期望从这条语句中返回结果的类全限定名或别名。 注意如果返回的是集合那应该设置为集合包含的类型而不是集合本身的类型。 resultType 和 resultMap 之间只能同时使用一个。resultMap对外部 resultMap 的命名引用。结果映射是 MyBatis 最强大的特性如果你对其理解透彻许多复杂的映射问题都能迎刃而解。 resultType 和 resultMap 之间只能同时使用一个。flushCache将其设置为 true 后将会导致本条语句的结果被二级缓存缓存起来默认值对 select 元素为 true。useCache将其设置为 true 后将会导致本条语句的结果被二级缓存缓存起来默认值对 select 元素为 true。timeout这个设置是在抛出异常之前驱动程序等待数据库返回请求结果的秒数。默认值为未设置unset依赖数据库驱动。fetchSize这是一个给驱动的建议值尝试让驱动程序每次批量返回的结果行数等于这个设置值。 默认值为未设置unset依赖驱动。statementType可选 STATEMENTPREPARED 或 CALLABLE。这会让 MyBatis 分别使用 StatementPreparedStatement 或 CallableStatement默认值PREPARED。resultSetTypeFORWARD_ONLYSCROLL_SENSITIVE, SCROLL_INSENSITIVE 或 DEFAULT等价于 unset 中的一个默认值为 unset 依赖数据库驱动databaseId如果配置了数据库厂商标识databaseIdProviderMyBatis 会加载所有不带 databaseId 或匹配当前 databaseId 的语句如果带和不带的语句都有则不带的会被忽略。resultOrdered这个设置仅针对嵌套结果 select 语句如果为 true则假设结果集以正确顺序排序后执行映射当返回新的主结果行时将不再发生对以前结果行的引用。 这样可以减少内存消耗。默认值false。resultSets这个设置仅适用于多结果集的情况。它将列出语句执行后返回的结果集并赋予每个结果集一个名称多个名称之间以逗号分隔。2、INSERT, UPDATE 和 DELETE数据变更语句 insertupdate 和 delete 的实现非常接近insertidinsertAuthorparameterTypedomain.blog.AuthorflushCachetruestatementTypePREPAREDkeyPropertykeyColumnuseGeneratedKeystimeout20updateidupdateAuthorparameterTypedomain.blog.AuthorflushCachetruestatementTypePREPAREDtimeout20deleteiddeleteAuthorparameterTypedomain.blog.AuthorflushCachetruestatementTypePREPAREDtimeout20Insert, Update, Delete 元素的属性属性描述id在命名空间中唯一的标识符可以被用来引用这条语句。parameterType将会传入这条语句的参数的类全限定名或别名。这个属性是可选的因为 MyBatis 可以通过类型处理器TypeHandler推断出具体传入语句的参数默认值为未设置unset。parameterMap用于引用外部 parameterMap 的属性目前已被废弃。请使用行内参数映射和 parameterType 属性。flushCache将其设置为 true 后只要语句被调用都会导致本地缓存和二级缓存被清空默认值对 insert、update 和 delete 语句true。timeout这个设置是在抛出异常之前驱动程序等待数据库返回请求结果的秒数。默认值为未设置unset依赖数据库驱动。statementType可选 STATEMENTPREPARED 或 CALLABLE。这会让 MyBatis 分别使用 StatementPreparedStatement 或 CallableStatement默认值PREPARED。useGeneratedKeys仅适用于 insert 和 update这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键比如像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段默认值false。keyProperty仅适用于 insert 和 update指定能够唯一识别对象的属性MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值默认值未设置unset。如果生成列不止一个可以用逗号分隔多个属性名称。keyColumn仅适用于 insert 和 update设置生成键值在表中的列名在某些数据库像 PostgreSQL中当主键列不是表中的第一列的时候是必须设置的。如果生成列不止一个可以用逗号分隔多个属性名称。databaseId如果配置了数据库厂商标识databaseIdProviderMyBatis 会加载所有不带 databaseId 或匹配当前 databaseId 的语句如果带和不带的语句都有则不带的会被忽略。下面是 insertupdate 和 delete 语句的示例insertidinsertAuthorinsert into Author (id,username,password,email,bio) values (#{id},#{username},#{password},#{email},#{bio})/insertupdateidupdateAuthorupdate Author set username #{username}, password #{password}, email #{email}, bio #{bio} where id #{id}/updatedeleteiddeleteAuthordelete from Author where id #{id}/delete
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →