一、搭建MyBatis

2.创建maven工程

a>打包方式:jar

b>引入依赖 (我用的是这个)

<dependencies>
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.3</version>
</dependency>
</dependencies>

3、创建MyBatis的核心配置文件

习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring 之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。

核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息

核心配置文件存放的位置是src/main/resources目录下(一定要注意位置)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--设置连接数据库的环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/MyBatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>

4、创建mapper接口

MyBatis中的mapper接口相当于以前的dao。

但是区别在于,mapper仅仅是接口,我们不需要 提供实现类。(更加方便更加简洁,隔壁68岁大妈都说小伙子聪明)

实例:

public interface UserMapper {
/**
* 添加用户信息
*/
int insertUser();
}

5、创建MyBatis的映射文件

相关概念:ORM(Object Relationship Mapping)对象关系映射。

对象:Java的实体类对象

关系:关系型数据库

映射:二者之间的对应关系

Java概念 数据库概念
类 
属性 字段/列
对象 记录/行

这个表格一定要好好记住

1、映射文件的命名规则: 表所对应的实体类的类名+Mapper.xml 例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml 因此一个映射文件对应一个实体类,对应一张表的操作 MyBatis映射文件用于编写SQL,访问以及操作表中的数据 MyBatis映射文件存放的位置是src/main/resources/mappers目录下(以至于后面可以设置实体类类名对应自定义的,请看后面,不要着急哦,又不是跟女朋友看完电影后)

2、MyBatis中可以面向接口操作数据,要保证两个一致:

a>mapper接口的全类名和映射文件的命名空间(namespace)保持一致

b>mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mybatis.mapper.UserMapper">
<!--int insertUser();-->
<insert id="insertUser">
insert into t_user values(null,'张三','123',23,'女')
</insert>
</mapper>

6、通过junit测试功能

//读取MyBatis的核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new
SqlSessionFactoryBuilder();
//通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
//SqlSession sqlSession = sqlSessionFactory.openSession();
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//通过代理模式创建UserMapper接口的代理实现类对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配
映射文件中的SQL标签,并执行标签中的SQL语句
int result = userMapper.insertUser();
//sqlSession.commit();
System.out.println("结果:"+result);

(我摊牌了,我是软男  我是暖男 ,写得这么详细)

SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的 会话)

SqlSessionFactory:是“生产”SqlSession的“工厂”。

工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的 相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。

7、加入log4j日志功能

加入日志功能,可以很明确的可以看到打印台上面输出的SQL语句,十分重要

a>加入依赖

<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

b>加入log4j的配置文件

log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
%m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>

日志的级别 FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试) 从左到右打印的内容越来越详细

二、核心配置文件详解

核心配置文件中的标签必须按照固定的顺序: properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//MyBatis.org//DTD Config 3.0//EN"
"http://MyBatis.org/dtd/MyBatis-3-config.dtd">
<configuration>
<!--引入properties文件,此时就可以${属性名}的方式访问属性值-->
<properties resource="jdbc.properties"></properties>
<settings>
<!--将表中字段的下划线自动转换为驼峰-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--开启延迟加载-->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
<typeAliases>
<!--
typeAlias:设置某个具体的类型的别名
属性:
type:需要设置别名的类型的全类名
alias:设置此类型的别名,若不设置此属性,该类型拥有默认的别名,即类名且不区分大小
写
若设置此属性,此时该类型的别名只能使用alias所设置的值
-->
<!--<typeAlias type="com.atguigu.mybatis.bean.User"></typeAlias>-->
<!--<typeAlias type="com.atguigu.mybatis.bean.User" alias="abc">
</typeAlias>-->
<!--以包为单位,设置改包下所有的类型都拥有默认的别名,即类名且不区分大小写-->
<package name="com.atguigu.mybatis.bean"/>
</typeAliases>
<!--
environments:设置多个连接数据库的环境
属性:
default:设置默认使用的环境的id
-->
<environments default="mysql_test">
<!--
environment:设置具体的连接数据库的环境信息
属性:
id:设置环境的唯一标识,可通过environments标签中的default设置某一个环境的id,
表示默认使用的环境
-->
<environment id="mysql_test">
<!--
transactionManager:设置事务管理方式
属性:
type:设置事务管理方式,type="JDBC|MANAGED"
type="JDBC":设置当前环境的事务管理都必须手动处理
type="MANAGED":设置事务被管理,例如spring中的AOP
-->
<transactionManager type="JDBC"/>
<!--
dataSource:设置数据源
属性:
type:设置数据源的类型,type="POOLED|UNPOOLED|JNDI"
type="POOLED":使用数据库连接池,即会将创建的连接进行缓存,下次使用可以从
缓存中直接获取,不需要重新创建
type="UNPOOLED":不使用数据库连接池,即每次使用连接都需要重新创建
type="JNDI":调用上下文中的数据源
-->
<dataSource type="POOLED">
<!--设置驱动类的全类名-->
<property name="driver" value="${jdbc.driver}"/>
<!--设置连接数据库的连接地址-->
<property name="url" value="${jdbc.url}"/>
<!--设置连接数据库的用户名-->
<property name="username" value="${jdbc.username}"/>
<!--设置连接数据库的密码-->
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="UserMapper.xml"/>
<!--
以包为单位,将包下所有的映射文件引入核心配置文件
注意:此方式必须保证mapper接口和mapper映射文件必须在相同的包下
-->
<package name="com.atguigu.mybatis.mapper"/>
</mappers>
</configuration>

三、MyBatis的增删改查

//1.添加
<!--int insertUser();-->
<insert id="insertUser">
insert into t_user values(null,'admin','123456',23,'男')
</insert>//2.删除
<!--int deleteUser();-->
<delete id="deleteUser">
delete from t_user where id = 7
</delete>//3.修改
<!--int updateUser();-->
<update id="updateUser">
update t_user set username='ybc',password='123' where id = 6
</update>//4。查询一个实体类的对象
<!--User getUserById();-->
<select id="getUserById" resultType="com.atguigu.mybatis.bean.User">
select * from t_user where id = 2
</select>//5.查询集合
<!--List<User> getUserList();-->
<select id="getUserList" resultType="com.atguigu.mybatis.bean.User">
select * from t_user
</select>

注意:

1、查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射 关系

resultType:自动映射,用于属性名和表中字段名一致的情况

resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况

2、当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常 TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值

MyBatis一发入魂(一)相关推荐

  1. Mybatis一发入魂

    文章目录 Mybatis官方中文文档 一.Mybatis简介 二.简单入门使用 2.1.在pom.xml中添加依赖 2.2.使用xml配置文件 2.3.创建接口 2.4.创建映射文件 2.6.获取sq ...

  2. MyBatis一发入魂之插入操作

    第一步: 在dao接口中定义insertStudent方法, 第二步: 在sql映射文件中添加insertSQL语句,因为是根据java对象属性值来插入数据,所以sql语句中的插入列值用#{java对 ...

  3. 开发一番赏盲盒小程序怎么抽才能一发入魂呢

    很多人都想做属于自己的一番赏小程序,包括许多玩家在内,但是盲盒一番赏具体的瓦房是怎么样的呢 今天小编就抽时间给大家讲解一下,希望玩家朋友,平台 一发入魂!!! 一番赏盲盒的玩法: 1.全无: 赏品自由 ...

  4. mybatis plus 看这篇就够了,一发入魂

    mybatis-plus是一款Mybatis增强工具,用于简化开发,提高效率.下文使用缩写mp来简化表示mybatis-plus,本文主要介绍mp搭配SpringBoot的使用. 注:本文使用的mp版 ...

  5. 2022最新最全MyBatis(简单全面,一发入魂,内容超详细)

    目录 一.MyBatis简介 1.MyBatis历史 2.MyBatis特性 3.MyBatis下载 4.和其它持久化层技术对比 JDBC Hibernate 和 JPA MyBatis 二.搭建My ...

  6. 狂神说Spring学习笔记————(一发入魂)

    文章目录 1.Spring 1.1.简介 1.2.优点 1.3.组成 2.IOC理论推导 2.1.IOC本质 3 Hello Spring 4.IOC创建对象的方式 使用无参构造创建对象,默认! 假设 ...

  7. 还不会用springboot写接口?快看这里,手把手操作,一发入魂~

    1.springboot简介 Spring Boot 可以轻松创建可以"直接运行"的独立的.生产级的基于 Spring 的应用程序. 特征 创建独立的 Spring 应用程序 直接 ...

  8. 一发入魂!15分钟让你快速入门Python

    文章目录 前言 1 python基本数据类型 2 Python推倒式 2.1 列表推倒式 2.2 字典推倒式 2.3 集合推倒式 2.4 元组推倒式 3 注释 4 运算符 4.1 算数运算符 4.2 ...

  9. 重学JavaWeb —— JSP,简单全面一发入魂

    文章目录 JSP 特点 由来 本质 使用 JSP指令 page include taglib JSP脚本 JSP内置对象 JSP作用域 EL表达式 EL内置对象 EL取值方式 JSP动作元素 JSTL ...

最新文章

  1. DNS解析污染原理——要么修改包,要么直接丢弃你的网络包
  2. java stringbuilder appendline_StringBuilder
  3. (1) 基于tomcat7和jdk1.7的websocket启动
  4. NOIP2011 选择客栈
  5. cnn训练出现的问题
  6. GDAL读取S-57海图数据中文属性值乱码问题解决
  7. mac Axure下载并汉化
  8. 计算机组装与维护李毅,青春力量 | 优秀校友李毅专访
  9. 博客做外链(可以发布外链的博客有哪些平台)
  10. 御坂坂的C++学习之路(1)
  11. 树莓派Ubuntu18.04下无线鼠标延迟问题解决
  12. 人工智能的历史与演变
  13. 燕十八php基础视频学习杂记
  14. 按shift delete删除的文件还能恢复吗?文件恢复教程
  15. HackerRank Company Logo
  16. 经验模态分解法简析(转)
  17. ROS入门21讲---ROS命令行工具的使用
  18. 什么是网络安全审计?网络安全审计的作用...
  19. Aspects 实现原理
  20. 安付通app--中小企业的好帮手

热门文章

  1. 语音计算机软件,语音计算器
  2. 使用fiddler进行发包
  3. 20221221英语学习
  4. 免费开放API支付接口
  5. 懂GPU服务器的工作原理
  6. 简述存储器的分级策略
  7. 为什么选择嵌入式方向
  8. 关于多个ul标签并列时下对齐的问题
  9. Ubuntu添加Pycharm的快捷方式
  10. h5在ios系统里调用微信jsdk失败