新闻中心
这篇文章主要介绍“MyBatis集成方法是什么”,在日常操作中,相信很多人在MyBatis集成方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyBatis集成方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
站在用户的角度思考问题,与客户深入沟通,找到固安网站设计与固安网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册、网络空间、企业邮箱。业务覆盖固安地区。
1 概述
MyBaits
是一个著名的持久层框架,本文首先介绍了MyBatis
的简单使用,接着与Spring
进行整合,最后简单地使用了Generator
去自动生成代码。
2 MyBatis
简介
MyBatis
本来是Apache
的一个开源项目——iBatis
,2010年由Apaceh Software Foundation
迁移到了Google Code
,并改名为MyBatis
。
MyBatis
是一个基于Java
的持久层框架,提供的持久层框架包括SQL Maps
和Data Access Objects
,使用简单的XML
或者注解用于配置映射,将接口和POJO
映射成数据库中的记录,是一个小巧、方便、高效、简单、直接、半自动化的持久层框架。
3 工作原理
上图:
读取配置文件:
mybatis-config.xml
是全局MyBatis
配置文件,配置了MyBatis
运行环境信息加载映射文件:也就是
SQL
映射文件,配置了操作数据库的SQL
语句构造会话工厂:通过配置文件构造会话工厂
SqlSessionFactory
创建会话对象:由上一步的会话工厂创建会话对象
SqlSession
获取
MapperStatement
:通过用户调用的api
的Statement ID
获取MapperStatement
对象输入参数映射:通过
Executor
对MapperStatement
进行解析,将各种Java
基本类型转化为SQL
操作语句中的类型输出结果映射:
JDBC
执行SQL
后,借助MapperStatement
的映射关系将返回结果转化为Java
基本类型并返回
4 MyBatis
示例
首先先来看一下纯MyBaits
的示例,没有整合Spring
,一个简单的Maven
工程,项目结构如下:
4.1 依赖
org.mybatis mybatis 3.5.5 org.projectlombok lombok 1.18.12 mysql mysql-connector-java 8.0.21
Gradle
:
compile group: 'org.mybatis', name: 'mybatis', version: '3.5.5' compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.21'
4.2 实体类
@Setter @Getter @Builder public class User { private Integer id; private String name; @Override public String toString() { return "id:"+id+"\tname:"+name; } }
4.3 映射文件
新建一个叫UserMapper.xml
的映射文件:
映射文件是一个XML
文件,根元素为
,需要注意其中的namespace
属性,调用的时候通过该namespace
调用。其中的子元素表示SQL
语句:
:查询,id指定了这条语句的id号,调用时通过namespace.id的方式调用,比如该条select需要通过UserMapper.selectById调用,parameterType指定参数类型,这里是一个Integer的参数,resultType指定返回类型,实体类//:对应的插入/修改/删除语句关于占位符:#{}表示是占位符,相当于传统JDBC中的?,#{id}表示该占位符等待接收的参数名称为id4.4 配置文件MyBatis的配置文件,叫mybatis-config.xml: 指定了数据库的一些连接属性还有mapper的位置。4.5 测试public class Main { public static void main(String[] args) { try { InputStream inputStream = Resources.getResourceAsStream("config/mybatis-config.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); User user = session.selectOne("UserMapper.selectById",1); System.out.println(user); User user1 = User.builder().name("test").build(); session.insert("UserMapper.insert",user1); user1.setName("222"); session.update("UserMapper.update",user1); List list = session.selectList("UserMapper.selectAll"); list.forEach(System.out::println); session.delete("UserMapper.delete",1); session.commit(); session.close(); } catch (Exception e) { e.printStackTrace(); } } }主要流程如下:读取配置文件:根据org.apache.ibatis.io.Resources读取配置文件mybatis-config.xml,请注意配置文件的位置正确,这里的配置文件都放在resources下,mybatis-config.xml放在其中的config下构建Session:根据配置文件构建SqlSessionFactory后,通过openSession创建Session业务操作:通过session的selectOne/insert/update等进行业务操作,这类操作带两个参数,第一个参数是String,表示配置文件中的SQL语句,采用namespace.id的形式,比如这里的UserMapper.xml中声明namespace为UserMapper,其中带有一条id为selectById的select语句,因此调用时使用UserMapper.selectById的形式,第二个参数是一个Object,表示要传递的参数,也就是绑定到配置文件中对应占位符的值提交与关闭:业务操作完成后提交事务并关闭session示例测试结果:5 Spring整合示例上面的例子只是为了演示MyBatis的基本使用,没有整合Spring,这里的例子是把Spring整合进来,流程也大概差不多,项目结构如下:5.1 依赖分为5类JAR:MyBatis需要的JARSpring需要的JARMyBatis与Spring整合的中间JAR数据库驱动JAR数据源JAR完整依赖如下: org.springframework spring-context 5.2.9.RELEASE org.springframework spring-core 5.2.9.RELEASE org.springframework spring-beans 5.2.9.RELEASE org.springframework spring-web 5.2.9.RELEASE org.projectlombok lombok 1.18.12 org.springframework spring-jdbc 5.2.9.RELEASE mysql mysql-connector-java 8.0.21 org.springframework spring-tx 5.2.9.RELEASE org.mybatis mybatis 3.5.5 org.mybatis mybatis-spring 2.0.5 org.apache.commons commons-dbcp2 2.8.0 Gradle:compile group: 'org.springframework', name: 'spring-beans', version: '5.2.9.RELEASE' compile group: 'org.springframework', name: 'spring-context', version: '5.2.9.RELEASE' compile group: 'org.springframework', name: 'spring-core', version: '5.2.9.RELEASE' compile group: 'org.springframework', name: 'spring-tx', version: '5.2.9.RELEASE' compile group: 'org.springframework', name: 'spring-jdbc', version: '5.2.9.RELEASE' compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.21' compile group: 'org.apache.commons', name: 'commons-dbcp2', version: '2.8.0' compile group: 'org.mybatis', name: 'mybatis', version: '3.5.5' compile group: 'org.mybatis', name: 'mybatis-spring', version: '2.0.5'5.2 配置文件配置文件分为三类:MyBatis映射文件:编写mapper的地方,也就是业务需要的SQL语句MyBatis全局配置文件:由于整合了Spring,数据源的配置放在了Spring的配置文件中,而只需要保留mapper的查找位置Spring配置文件:配置数据源+事务管理+MyBaits的sqlSssionFactory+组件扫描5.2.1 MyBatis映射文件与上面的例子差不多,只是修改了namespace为包名.类名的形式: select * from user where id=#{id} select * from user INSERT INTO `user` (`id`,`name`) VALUES (#{id},#{name}) UPDATE `user` set `name`=#{name} where id=#{id} DELETE FROM `user` WHERE `id` = #{id} namespace
需要与对应包名的带有@Mapper
的类配置一致。5.2.2
MyBatis
配置文件5.2.3
Spring
配置文件5.3 持久层
需要加上
@Mapper
注解,表示自动装配为MyBatis
的映射接口,注意:映射文件中的
namespace
需要与包名.类名
对应,比如这里的包为pers.dao
,类名为UserDao
,那么映射文件中的namespace
为pers.dao.UserDao
id
需要与方法名对应,比如映射文件中的有一条select
语句的id
为selectById
,那么方法就需要命名为selectById
,且参数类型需要对应一致
@Repository @Mapper public interface UserDao { User selectById(Integer id); List
selectAll(); int insert(User user); int update(User user); int delete(Integer id); } 5.4 业务层
@Service @Transactional @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class MyBatisService { private final UserDao dao; public void test(){ User user = dao.selectById(13); System.out.println(user); dao.insert(User.builder().name("333").build()); dao.update(User.builder().name("88888").id(13).build()); dao.selectAll().forEach(System.out::println); dao.delete(12); dao.selectAll().forEach(System.out::println); } }
注入
UserDao
后进行简单的测试,结果如下:6 自动生成代码
相信很多程序员也讨厌写又长又麻烦的
XML
配置文件,因此,MyBatis
也提供了一个生成器插件,可以直接从表中生成实体类、dao
接口以及映射文件,可以省去很多操作。步骤如下:
导入依赖
编写
Generator
配置文件生成代码
6.1 依赖
其实就是加入一个插件:
org.mybatis.generator mybatis-generator-maven-plugin 1.4.0 true true src/main/resources/generatorConfig.xml mysql mysql-connector-java 8.0.21 数据库驱动请对应修改。
至于
Gradle
版请看Kotlin
版源码。6.2 配置文件
这里是参考别人的配置文件,修改数据库连接、表名、包名即可:
6.3 生成代码
双击生成即可:
生成了实体类、
dao
接口以及mapper
文件。到此,关于“MyBatis集成方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
文章名称:MyBatis集成方法是什么
标题链接:http://jxjierui.cn/article/jeepie.html