Mybatis框架技术总结(一),springcloud书籍pdf

public interface UserDao {

List findAll();

}

<?xml version="1.0" encoding="UTF-8" ?>

select * from user

  1. 编写测试类

获取SqlSession,通过SqlSession获取UserDao调用对应的方法

@Test

public void findAll() throws IOException {

//定义mybatis配置文件的路径

String resource = “mybatis-config.xml”;

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//获取Sqlsession对象

SqlSession sqlSession = sqlSessionFactory.openSession();

//获取UserDao实现类对象

UserDao userDao = sqlSession.getMapper(UserDao.class);

//调用方法测试

List userList = userDao.findAll();

System.out.println(userList);

//释放资源

sqlSession.close();

}

1、Mybatis映射配置文件

=================================================================================

在这里插入图片描述

  • 映射配置文件包含了数据和对象之间的映射关系以及要执行的SQL语句。

  • <mapper> :核心根标签

  • namespace 属性:名称空间

  • <select>:查询功能标签

  • <insert>:新增功能标签

  • <update>:修改功能标签

  • <delete>:删除功能标签

  • id :唯一标识,配合名称空间使用

  • parameterType 属性:指定参数映射的对象类型

  • resultType 属性:指定结果映射的对象类型

  • SQL获取参数

  • #{属性名}

1.1、查询功能


  • <select> 查询功能标签

  • 属性

id:就是对应的namespace中的方法名

parameterType:传入SQL语句的参数类型

resultType:指定结果映射的对象类型。

  • SQL 获取参数: #{属性名}

  • 示例

SELECT * FROM student WHERE id = #{id}

1.2、新增功能


  • <insert>:新增功能标签。

  • 属性

id:就是对应的namespace中的方法名

parameterType:传入SQL语句的参数类型

resultType:指定结果映射的对象类型。

  • SQL 获取参数: #{属性名}

  • 示例

INSERT INTO student VALUES (#{id},#{name},#{age})

1.3、修改功能


  • <update>:修改功能标签。

  • 属性

id:就是对应的namespace中的方法名

parameterType:传入SQL语句的参数类型

resultType:指定结果映射的对象类型。

  • SQL 获取参数: #{属性名}

  • 示例

UPDATE student SET name = #{name},age = #{age} WHERE id = #{id}

1.4、删除功能


  • <delete>:查询功能标签。

  • 属性

id:就是对应的namespace中的方法名

parameterType:传入SQL语句的参数类型

resultType:指定结果映射的对象类型。

  • SQL 获取参数: #{属性名}

  • 示例

DELETE FROM student WHERE id = #{id}

2、Mybatis核心配置文件

=================================================================================

核心配置文件包含了 MyBatis 最核心的设置和属性信息。如数据库的连接、事务、连接池信息等。

<?xml version="1.0" encoding="UTF-8" ?>

2.1、environments标签


  • environments标签:数据库环境的配置,支持多环境配置

在这里插入图片描述

2.1.1、事务管理器

其中,事务管理器(transactionManager)类型有两种:

  • JDBC :这个配置就是直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域

  • MANAGER

2.1.2、数据源

数据源(dataSource)类型有三种:

  • UNPOOLED:这个数据源的实现只是每次请求时打开和关闭连接

  • POOLED:这种数据源的实现利用 "池"的概念将JDBC连接对象组织起来。

  • JNDI

2.2、properties标签


实际开发中,习惯将数据源的配置新信息单独抽取成一个properties文件,该标签可以加载额外配置的properties文件

在这里插入图片描述

我们可以在db.properties中配置信息,例如:

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8

username=root

password=123456

我们也可以在properties标签中配置信息,例如:

  • 这个例子中的 username 和 password 将会由 properties 元素中设置的相应值来替换。

  • driver 和 url 属性将会由 mybatis-config.properties 文件中对应的值来替换。这样就为配置提供了诸多灵活选择。

2.3、typeAliases标签


可以用来设置给全类名设置别名,简化书写

  • <typeAliases>:为全类名起别名的父标签。

  • <typeAlias>:为全类名起别名的子标签。

  • 属性

type:指定全类名

alias:指定别名

  • <package>:为指定包下所有类起别名的子标签。(别名就是类名)

  • 例如为com.itheima.domain.User定义别名为user

在这里插入图片描述

  • 一般设置一个包下的实体类全部具有默认别名

这样com.sangeng.dao包下的实体类全部具有默认别名

  • 默认别名是类名首字母小写

  • 例如com.sangeng.pojo.User别名为user

2.3、settings标签


2.3.1、日志工厂

Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具:

  • SLF4J

  • Apache Commons Logging

  • Log4j 2

  • Log4j[掌握]

  • JDK logging

  • STDOUT_LOGGING[掌握]

2.3.1.1、标准日志实现

指定 MyBatis 应该使用哪个日志记录实现,如果此设置不存在,则会自动发现日志记录实现

mybatis-config.xml核心配置文件配置

2.3.1.2、Log4j日志实现

使用步骤:

  1. 导入Log4j的包

log4j

log4j

1.2.17

  1. Log4j配置文件编写
  • 在resources目录下新建log4j.properties

#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码

log4j.rootLogger=DEBUG,console,file

#控制台输出的相关设置

log4j.appender.console = org.apache.log4j.ConsoleAppender

log4j.appender.console.Target = System.out

log4j.appender.console.Threshold=DEBUG

log4j.appender.console.layout = org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

#文件输出的相关设置

log4j.appender.file = org.apache.log4j.RollingFileAppender

log4j.appender.file.File=./log/kuang.log

log4j.appender.file.MaxFileSize=10mb

log4j.appender.file.Threshold=DEBUG

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n

#日志输出级别

log4j.logger.org.mybatis=DEBUG

log4j.logger.java.sql=DEBUG

log4j.logger.java.sql.Statement=DEBUG

log4j.logger.java.sql.ResultSet=DEBUG

log4j.logger.java.sql.PreparedStatement=DEBUG

  1. 在mybatis核心配置文件中实现
  1. 测试类中测试

//注意导包:org.apache.log4j.Logger

static Logger logger = Logger.getLogger(MyTest.class);

@Test

public void textLog4j(){

logger.info(“info:进入了selectUser方法”);

logger.debug(“debug:进入了selectUser方法”);

logger.error(“error:进入了selectUser方法”);

}

  1. 可以看到生成的日志文件

在这里插入图片描述

2.3.2、开启驼峰命名法

在这里插入图片描述

使用步骤:

  • 在mybatis核心配置文件中设置下划线驼峰自动转换

1.6、mappers标签


该标签的作用是加载映射的,加载方式有如下几种(主要使用第三种):

  • 使用相对类路径的资源引用xml文件,注意路径是用/而不是用点

  • 使用映射器接口实现类的完全限定类名,引用的是接口
  • 使用扫描包进行注册绑定

3、Mybatis相应API

================================================================================

3.1、Resources


加载资源的工具类:

| 返回值 | 方法名 | 说明 |

| — | — | — |

| InputStream | getResourceAsStream(String fileName) | 通过类加载器返回指定资源的字节输入流 |

//1.加载核心配置文件

InputStream inputStream = Resources.getResourceAsStream(“mybatis-config.xml”);

// 我们也可以自己加载

InputStream inputStream = 类名.class.getClassLoader().getResourceAsStream(“mybatis-config.xml”);

3.2、SqlSessionFactoryBuilder


SqlSessionFactoryBuilder工厂构建器:

  • SqlSessionFactory.build(InputStream inputStream)

  • 通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象

String resource = “org/mybatis/example/mybatis-config.xml”;

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

3.3、SqlSessionFactory


SqlSessionFactory有多个方法创建SqlSession实例,常用的有如下两个:

  • SqlSessionFactory.openSession :会默认开启一个事务,但事务不会自动提交,也就意味着需要手动提交该事务,更新操作数据才会持久化到数据库中

  • SqlSessionFactory.openSession(boolean autoCommit) : 参数为是否自动提交,如果设置为true,那么不需要手动提交事务

| 返回值 | 方法名 | 说明 |

| — | — | — |

| SqlSession | openSession() | 通过SqlSession构建者对象,并开启手动提交事务 |

| SqlSession | openSession(boolean autoCommit) | 通过SqlSession构建者对象,如果参数为true,则开启自动提交事务 |

3.4、SqlSession


SqlSession 提供了在数据库执行 SQL 命令所需的所有方法 。它还提供了事务的相关操作。

成员方法如下:

  • sqlSession.commit():提交事务

  • sqlSession.rollback():回滚事务

  • sqlSession.close():释放资源

3.5、mybatis工具类


我们通常将mybatis获取SqlSession实例封装成一个工具类

public class MybatisUtils {

private static SqlSessionFactory sqlSessionFactory;

static{

try {

// 使用Mybatis

// 第一步: 获取sqlSessionFactory对象

String resource = “mybatis-config.xml”;

InputStream inputStream = Resources.getResourceAsStream(resource);

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

} catch (IOException e) {

e.printStackTrace();

}

}

//既然有了SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。

public static SqlSession getSqlSession(){

// SqlSession sqlSession = sqlSessionFactory.openSession();

// return sqlSession;

return sqlSessionFactory.openSession();

}

}

4、Mybatis开发方式

===============================================================================

4.0、Mybatis传统方式开发


4.0、Dao 层传统实现方式


  • 分层思想:控制层(controller)、业务层(service)、持久层(dao)。

  • 调用流程

在这里插入图片描述

4.1、Dao层代理开发方式


  • Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口)

  • 我们之前的开发规范是编写Dao接口,之后再编写实现类DaoImpl

  • 代理开发规范是编写Dao接口,之后再编写xml配置文件

Mapper 接口开发需要遵循以下规范:

  1. Mapper.xml文件中的namespace与mapper接口的全限定名相同

  2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同

  3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同

  4. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

在这里插入图片描述

4.2、参数的获取


4.2.1、一个参数

4.2.1.1、基本参数

我们可以使用#{}直接来取值,写任意名字都可以获取到参数。但是一般用方法的参数名来取。

例如:

  • 接口中方法定义如下

public interface UserDao {

User findUser(Integer id);

}

  • xml中的内容如下

select * from user where id = #{id}

  • 测试

@Test

public void findUser() throws IOException {

//定义mybatis配置文件的路径

String resource = “mybatis-config.xml”;

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//获取Sqlsession对象

SqlSession sqlSession = sqlSessionFactory.openSession();

//获取UserDao实现类对象

UserDao userDao = sqlSession.getMapper(UserDao.class);

//调用方法测试

User user = userDao.findUser(2);

System.out.println(user);

//释放资源

sqlSession.close();

}

4.2.1.2、POJO

我们可以使用POJO中的属性名来获取对应的值。

例如:

  • 接口中方法定义如下

public interface UserDao {

User findByUser(User user);

}

  • xml中的内容如下

select * from user where id = #{id} and username = #{username} and age = #{age} and address = #{address}

  • 测试

@Test

public void findByUser() throws IOException {

//定义mybatis配置文件的路径

String resource = “mybatis-config.xml”;

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//获取Sqlsession对象

SqlSession sqlSession = sqlSessionFactory.openSession();

//获取UserDao实现类对象

UserDao userDao = sqlSession.getMapper(UserDao.class);

//调用方法测试

User byUser = userDao.findByUser(new User(2, “PDD”, 25, “上海”));

System.out.println(byUser);

//释放资源

sqlSession.close();

}

4.2.1.3、Map

我们可以使用map中的key来获取对应的值。

例如:

  • 接口中方法定义如下

public interface UserDao {

User findByMap(Map map);

}

  • xml中内容如下

select * from user where id = #{id} and username = #{username} and age = #{age} and address = #{address}

  • 测试

@Test

public void findByMap() throws IOException {

//定义mybatis配置文件的路径

String resource = “mybatis-config.xml”;

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//获取Sqlsession对象

SqlSession sqlSession = sqlSessionFactory.openSession();

//获取UserDao实现类对象

UserDao userDao = sqlSession.getMapper(UserDao.class);

//调用方法测试

Map map = new HashMap();

map.put(“id”,2);

map.put(“username”,“PDD”);

map.put(“age”,25);

map.put(“address”,“上海”);

User byMap = userDao.findByMap(map);

System.out.println(byMap);

//释放资源

sqlSession.close();

}

4.2.2、多个参数

Mybatis会把多个参数放入一个Map集合中,默认的key是argx和paramx这种格式。

例如:

  • 接口中方法定义如下

  • 我们一般在方法参数前使用@Param来设置参数名。

public interface UserDao {

User findByCondition(@Param(“tid”) Integer id,@Param(“username”)String username);

}

  • xml中内容如下

select * from user where id = #{tid} and username = #{username}

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料


SqlSession sqlSession = sqlSessionFactory.openSession();

//获取UserDao实现类对象

UserDao userDao = sqlSession.getMapper(UserDao.class);

//调用方法测试

Map map = new HashMap();

map.put(“id”,2);

map.put(“username”,“PDD”);

map.put(“age”,25);

map.put(“address”,“上海”);

User byMap = userDao.findByMap(map);

System.out.println(byMap);

//释放资源

sqlSession.close();

}

4.2.2、多个参数

Mybatis会把多个参数放入一个Map集合中,默认的key是argx和paramx这种格式。

例如:

  • 接口中方法定义如下

  • 我们一般在方法参数前使用@Param来设置参数名。

public interface UserDao {

User findByCondition(@Param(“tid”) Integer id,@Param(“username”)String username);

}

  • xml中内容如下

select * from user where id = #{tid} and username = #{username}

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-G1ejKPQP-1711001086832)]
[外链图片转存中…(img-V3vz2JSY-1711001086832)]
[外链图片转存中…(img-bW0R1if0-1711001086833)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-QJv2EqPv-1711001086833)]

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料

[外链图片转存中…(img-rv8GAfd6-1711001086833)]
[外链图片转存中…(img-SLWvGVT1-1711001086834)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值