mybatis相关知识
-
Mybatis【Mybatis与Spring整合】Mybatis第五篇【Mybatis与Spring整合】 既然我们已经学了Mybatis的基本开发了,接下来就是Mybatis与Spring的整合了! 以下使用的是Oracle数据库来进行测试 导入jar包 aopalliance.jar asm-3.3.1.jar aspectjweaver.jar c3p0-0.9.1.2.jar cglib-2.2.2.jar commons-logging.jar log4j-1.2.16.jar mybatis-3.1.1.jar mybatis-spring-1.1.1.jar mysql-connector-java-5.1.7-bin.jar ojdbc5.jar org.springframework.aop-3.0.5.RELEASE.jar org.springframework.asm-3.0.5.RELEASE.ja
-
【MyBatis】MyBatis动态SQLMyBatis动态SQL前言在前面,我们已经学习了MyBatis的单表操作以及多表操作,在体验了MyBatis提供的对于结果集的封装之后,我们接下来来学习MyBatis中的动态SQL。动态SQL所谓的动态SQL,就是根据不同的情况来产生不同的SQL,比如在查询用户的时候,我们可以根据用户的ID、名称、邮箱来查询,当然,这三者也可以进行组合,如果要为每一种情况写一个查询,那工作量还是比较恐怖的,动态SQL在这个时候就充分发挥作用了。在MyBatis中,提供了一下几个标签来实现动态SQLifchoosewhenotherwisewheresettrimforeach下面我们就来详细学习这几个标签if标签if标签中包含一个必须具备的属性test="",只有当test中的值为真时,if标签里面的内容才会被拼接到SQL语句中,如下代码所示。<select id="selectByUser" resultType="domain.SysUser
-
【MyBatis】MyBatis多表操作MyBatis多表操作前言在前面的两个小节里,我们已经初步接触到MyBatis,并且通过MyBatis实现了单表的增删改查操作,但在实际开发过程中,经常遇到的是多表之间的操作,MyBatis在多表操作方面也提供非常方便的工具用于将结果集映射到对象中,这一节,我们将详细学习这一部分。多表操作由于本节涉及到多表操作,在前面建立的数据表明显不符合,所以这里我们需要再建立一些表以及插入一些数据本节所使用的表以及数据均来自刘增辉老师的《MyBatis从入门到精通》create table sys_user ( id bigint not null auto_increment comment '用户ID', user_name varchar(50) comment '用户名', user_pass
-
Mybatis系列全解(二):Mybatis简介与环境搭建封面:洛小汐 作者:潘潘 Mybatis 是一套持久层框架,灵活易用,特别流行。 前言 Mybatis系列全解,我们预计准备10+篇文章,让我们了解到 Mybatis 的基本全貌,真正从入门到上手,从上手到精通,本文为首篇,我们开始。 Mybaits系列全解 (持续更新) Mybatis系列全解(一):手写一套持久层框架 Mybatis系列全解(二):Mybatis简介与环境搭建 Mybatis系列全解(三):Mybatis简单CRUD使用介绍 Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解 Mybatis系列全解(五)
mybatis相关课程
-
Mybatis缓存详解 基于mybatis 3.5.1版本,全面介绍mybatis一级缓存、二级缓存以及自定义缓存的使用方法、实现原理、应用场景、优缺点等,并进行现场验证
讲师:西昆仑 初级 6705人正在学习
mybatis相关教程
- 2. 什么是 MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。与其它 ORM 框架不同,MyBatis 没有将 Java 对象与数据表关联起来,而是作为 Java 方法和 SQL 语句的桥梁,我们一般称它为“半自动化 ORM ”框架。
- 3. MyBatis 能做什么 MyBatis 可以方便地定制化 SQL, 操纵数据库对象;MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO 为数据库中的记录;MyBatis 提供了强大的动态 SQL 功能,帮助你更加灵活地使用 SQL;MyBatis 提供了插件增强机制,你可以轻松集成其它诸如分页的插件。
- 2.1 启动 MyBatis 在 mybatis-primer 项目中,有一个默认的包com.imooc.mybatis,在该包下,我们新建一个包名为pattern,并在其中新建一个名为StartNoXml.java的类,并向该文件中填充如下代码:package com.imooc.mybatis.pattern;import org.apache.ibatis.datasource.pooled.PooledDataSource;import org.apache.ibatis.mapping.Environment;import org.apache.ibatis.session.Configuration;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;@SuppressWarnings({"SqlResolve", "SqlNoDataSourceInspection", "Duplicates"})public class StartNoXml { public static void main(String[] args) throws SQLException { // 无需xml配置的方式使用MyBatis // 准备jdbc事务类 JdbcTransactionFactory jdbcTransactionFactory = new JdbcTransactionFactory(); // 配置数据源 PooledDataSource dataSource = new PooledDataSource("com.mysql.cj.jdbc.Driver", "jdbc:mysql://localhost:3306/imooc?useSSL=false", "root", "123456"); // 配置环境,向环境中指定环境id、事务和数据源 Environment environment = new Environment.Builder("development") .transactionFactory(jdbcTransactionFactory) .dataSource(dataSource).build(); // 新建 MyBatis 配置类 Configuration configuration = new Configuration(environment); // 得到 SqlSessionFactory 核心类 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); // 开始一个 sql 会话 SqlSession session = sqlSessionFactory.openSession(); // 得到 sql 连接并运行 sql 语句 PreparedStatement preStatement = session .getConnection() .prepareStatement("SELECT * FROM imooc_user WHERE id = ?"); preStatement.setInt(1, 1); ResultSet result = preStatement.executeQuery(); // 验证结果 while (result.next()) { System.out.println("username: " + result.getString("username")); } // 关闭会话 session.close(); }}即使你不熟悉 MyBatis,也没有必要被这段代码给吓到,因为在实际的开发中,你几乎没有机会去写这段代码。但是我们仍需要介绍这段代码,它可能是你面试的重点。书写完毕后,请在 PooledDataSource 类构造函数中更改数据用户名、密码和 url 配置以满足你所使用的数据库环境。运行一下这段代码,如果一切顺利,在控制台中你会看到以下输出内容(只截取了部分内容):18:31:44.914 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Opening JDBC Connection****username: peter****18:31:45.413 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - Returned connection 1234250905 to pool.
- 3.2 启动 MyBatis 同样地,我们在 patter 包下新建另一个类,名为StartWithXml.java,并填充以下代码:package com.imooc.mybatis.pattern;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.InputStream;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;@SuppressWarnings({"SqlResolve", "SqlNoDataSourceInspection", "Duplicates"})public class StartWithXml { public static void main(String[] args) throws IOException, SQLException { // 配置式使用MyBatis String resource = "mybatis-config.xml"; // 读取配置文件 InputStream inputStream = Resources.getResourceAsStream(resource); // 按照配置文件得到 SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 新建会话 SqlSession session = sqlSessionFactory.openSession(); // 执行SQL PreparedStatement preStatement = session.getConnection().prepareStatement("SELECT * FROM imooc_user WHERE id = ?"); preStatement.setInt(1, 1); ResultSet result = preStatement.executeQuery(); while (result.next()) { System.out.println("username: " + result.getString("username")); } // 关闭会话 session.close(); }}运行代码,你会看到跟上面一样的结果。
- 4. Hibernate 与 MyBatis 对比 Hibernate 和 MyBatis 是 Java 中使用最为广泛的两个 ORM 框架,二者各有千秋,我们将它们对比并总结出如下两点:Hibernate: 全自动化 ORM 框架,数据库移植性好,基础业务几乎不需要写 SQL;易学难精,上手简单但熟练使用需要阅读大量文档,框架结构复杂。MyBatis: 半自动化 ORM 框架,数据库移植性一般,基础业务仍需写 SQL,但可以通过基础 Mapper 来简化;易学易用,上手简单,结构精简清晰,易深入学习。对比发现: Hibernate 适合在需求明确、业务固定的项目中使用,如 OA、ERP 项目;MyBatis 适合在需求多变,快速迭代的项目中使用,如互联网的电商项目。
- 4.5 MyBatis 配置 多数据源情况下, MyBatis 中的关键组件 SqlSessionFactory 和 SqlSessionTemplate 也需要单独配置,我们需要为两个数据源分别配置一套组件。实例:/** * 数据源1 MyBatis配置 */@Configuration@MapperScan(value = "com.imooc.springbootmultidb.mapper1", sqlSessionFactoryRef = "sqlSessionFactory1")public class Db1MyBatisConfig { @Autowired // 自动装配 @Qualifier("db1") // 指定注入名为db1的组件 private DataSource db1; @Bean public SqlSessionFactory sqlSessionFactory1() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(db1);// sqlSessionFactory1使用的数据源为db1 sqlSessionFactoryBean .setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper1/*.xml")); return sqlSessionFactoryBean.getObject(); } @Bean public SqlSessionTemplate sqlSessionTemplate1() throws Exception { return new SqlSessionTemplate(sqlSessionFactory1());// sqlSessionTemplate1使用的数据源也是关联到db1 }}通过上面的配置类, com.imooc.springbootmultidb.mapper1 包中的 DAO 数据访问接口会自动调用 sqlSessionTemplate1 组件实现具体数据库操作,而 sqlSessionTemplate1 操作的数据源已经通过配置类设置为 db1 。同时, DAO 数据访问接口对应的映射文件已经指定到 classpath:mapper1/ 目录去寻找。这样数据源 – DAO 数据访问接口 – 映射文件三者的对应关系就建立起来了。数据源 2 的配置方法是一样的,com.imooc.springbootmultidb.mapper2 包中的 DAO 数据访问接口会自动调用 sqlSessionTemplate2 组件,其操作的数据源即为 db2 ,其对应的映射文件指定到 classpath:mapper2/ 目录去寻找。实例:/** * 数据源2 MyBatis配置 */@Configuration@MapperScan(value = "com.imooc.springbootmultidb.mapper2", sqlSessionFactoryRef = "sqlSessionFactory2")public class Db2MyBatisConfig { @Autowired // 自动装配 @Qualifier("db2") // 指定注入名为db1的组件 private DataSource db2; @Bean public SqlSessionFactory sqlSessionFactory2() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(db2);// sqlSessionFactory2使用的数据源为db2 sqlSessionFactoryBean .setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper2/*.xml")); return sqlSessionFactoryBean.getObject(); } @Bean public SqlSessionTemplate sqlSessionTemplate2() throws Exception { return new SqlSessionTemplate(sqlSessionFactory2());// sqlSessionTemplate2使用的数据源也是关联到db2 }}
mybatis相关搜索
-
mac osx
machine_start
macox
magellan
malloc
manifest
manifest文件
map
map 遍历
mapreduce编程
maps google com
margin
margin bottom
margin left
margin right
margin top
marginbottom
marginheight
marginleft
margintop