MyBtis简介

环境说明

  • jdk1.8
  • MySQL 5.7
  • idea

什么是MyBatis

  • MyBtis是一款优秀的持久层框架
  • MyBatis几乎避免了所有的JDBC代码和手动设置参数以及获取结果集的过程
  • MyBatis可以使用简单的xml或者注解来配置映射信息,将接口和java实体类(pojo)映射成数据库中的数据
  • MyBatis原是apache的ibatis,10年由apache转向google code,改名为MyBatis,13年将代码迁移到GitHub
  • Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html
  • GitHub : https://github.com/mybatis/mybatis-3

持久化

持久化是将数据从持久状态和瞬间状态相互转移的一种机制

  • JDBC就是一种持久化机制。文件IO也是一种持久化机制。
  • 即把数据(内存中的对象)保存到存储设备中(硬盘)。即,将内存中的对象存到数据库、xml、磁盘文件中等等
  • 由于内存存在断电数据丢失,并且价格昂贵,是必须要将数据持久化到外存的

持久层

什么是持久层?

  • 简单来说就是完成持久化的代码块,对应java程序中的dao层(DAO (Data Access Object) 数据访问对象)
  • 是专门用来,通过数据库完成持久化操作的,和其他功能代码有着明显严格的逻辑边界

为什么需要MyBatis

  • MyBatis是优秀的持久层框架,帮助程序员对数据库中的数据进行CRUD操作
  • 其功能与传统的JDBC相似,当传统的JDBC代码有大量重复代码,即便封装成JdbcUtils和BaseDao等都需要经过复杂的操作,并且在使用JDBC完成CRUD操作的时候会造成层级之间的耦合
  • MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射
  • 使用MyBatis理由:
  • 首先,不会对现有的程序或者数据库的设计产生影响,sql语句写在xml配置文件中,方便管理
  • 解除了sql语句和程序代码之间的耦合:Dao层中业务逻辑和数据访问逻辑相互分离,系统设计更加清晰,提高了可维护性。(不用new UserService,UserDao了降低了代码之间的耦合)
  • 提供xml标签,支持编写动态sql

HelloWorld

  1. 导包,添加log4j.properties

测试相关包junit_4.12.jar,org.hamcrest.core_1.3.0.jar

MyBatis依赖包mybatis-3.4.1.jar

mysql-connector-java-5.1.7-bin.jar

log4j.rootLogger=DEBUG,A1
log4j.logger.org.apache=DEBUG
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
  1. Mybatis-config.xml配置文件,参考官方帮助文档
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 环境:说明可以配置多个,default:指定生效的环境 --><environments default="development"><!-- id:环境的唯一标识 --><environment id="development"><!-- 事务管理器,type:类型 --><transactionManager type="JDBC" /><!-- 数据源:type-池类型的数据源 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" /><property name="username" value="root" /><property name="password" value="1234" /></dataSource></environment></environments><!-- 映射文件 --><mappers><mapper resource="UserDaoMapper.xml" /></mappers>
</configuration>
  1. UserDaoMapper.xml映射配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="UserDaoMapper"><select id="queryUserById" resultType="com.atguigu.mybatis.pojo.User">select * from tb_user where id = #{id}</select><select id="queryUserAll" resultType="com.atguigu.mybatis.pojo.User">select * from tb_user</select><insert id="insertUser" parameterType="com.atguigu.mybatis.pojo.User">INSERT INTO tb_user (user_name,password,name,age,sex,birthday,created,updated)VALUES(#{userName},#{password},#{name},#{age},#{sex},#{birthday},NOW(),NOW());</insert><update id="updateUser" parameterType="com.atguigu.mybatis.pojo.User">UPDATE tb_userSETuser_name = #{userName},password = #{password},name = #{name},age = #{age},sex = #{sex},birthday = #{birthday},updated = NOW()WHERE(id = #{id});</update><delete id="deleteUserById" parameterType="java.lang.Long">delete from tb_user where id=#{id}</delete></mapper>
  1. 创建实体类User(pojo包下)
public class User {private Long id;private String userName;private String password;private String name;private Integer age;private Integer sex;private Date birthday;private Date created;private Date updated;}
  1. 创建接口UserDao(dao包下)
public interface UserDao {/*** 根据id获取用户信息* @param id* @return*/public User queryUserById(long id);/*** 查询全部用户信息* @return*/public List<User> queryUserAll();/*** 新增用户* @param user*/public void insertUser(User user);/*** 更新用户信息* @param user*/public void updateUser(User user);/*** 根据id删除用户信息* @param id*/public void deleteUserById(Long id);
}
  1. 创建UserDao接口实现类UserDaoImpl(dao包下)
public class UserDaoImpl implements UserDao {private SqlSession sqlSession;public UserDaoImpl(SqlSession sqlSession) {this.sqlSession = sqlSession;}@Overridepublic User queryUserById(long id) {return this.sqlSession.selectOne("UserDaoMapper.queryUserById",id);}@Overridepublic List<User> queryUserAll() {return this.sqlSession.selectList("UserDaoMapper.queryUserAll");}@Overridepublic void insertUser(User user) {this.sqlSession.insert("UserDaoMapper.insertUser",user);//提交this.sqlSession.commit();}@Overridepublic void updateUser(User user) {this.sqlSession.update("UserDaoMapper.updateUser", user);this.sqlSession.commit();}@Overridepublic void deleteUserById(Long id) {this.sqlSession.delete("UserDaoMapper.deleteUserById", id);this.sqlSession.commit();}
}
  1. 编写测试类UserDaoTest
public class UserDaoTest {private UserDao userDao;@Beforepublic void setUp() throws Exception {String resource = "mybatis-config.xml";//读取配置文件InputStream inputStream = Resources.getResourceAsStream(resource);//构建sqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//获取sqlsessionSqlSession sqlSession = sqlSessionFactory.openSession();this.userDao = new UserDaoImpl(sqlSession);}@Testpublic void queryUserById() {System.out.println(userDao.queryUserById(1l));}@Testpublic void queryUserAll() {userDao.queryUserAll().forEach(System.out::println);}//仅展示前两个功能测试代码
}
  1. 成功运行,再也不用写JDBC了!

总结MyBatis使用步骤

  1. 配置mybatis-config.xml 全局的配置文件 (1、数据源,2、外部的mapper) 及映射文件(配置statement)
  2. 基于配置创建SqlSessionFactory
  3. 通过SqlSessionFactory创建SqlSession对象
  4. 通过SqlSession操作数据库 CRUD
  5. 调用sqlSession.commit()提交事务(增删改时,需要调用该方法提交事务)
  6. 调用sqlSession.close()关闭会话

参考第一篇博客
https://blog.csdn.net/Fang_1996/article/details/107122202

总结使用MyBatis的测试步骤

  1. 编写UserDao接口
  2. 编写UserDao的实现类UserDaoImpl及映射文件UserDaoMapper.xml
  3. 修改全局配置文件,引入UserDaoMapper.xml
  4. 编写UserDao的Junit Test Case测试用例

随着学习会持续更新和更改原内容,加油,青年!!

苍蓝星MyBatis-第一个程序相关推荐

  1. java mybatis狂神说sql_狂神说MyBatis01:第一个程序

    狂神说MyBatis系列连载课程,通俗易懂,基于MyBatis3.5.2版本,欢迎各位狂粉转发关注学习,视频同步文档.未经作者授权,禁止转载 MyBatis简介 环境说明: jdk 8 + MySQL ...

  2. 黑石6亿美元注资蓝星 任建新再造千亿化工系

    http://www.sina.com.cn 2007年10月02日 17:45 <英才> 黑石6亿美元注资蓝星的隐秘原因 任建新 再造千亿化工系 文|本刊记者 朱雪尘/图|本刊记者 梁海 ...

  3. 苍蓝契约服务器维护,苍蓝誓约安卓精英测试停服公告

    苍蓝誓约于3月18日14:00正式关闭所有作战海域,并根据此次测试中广大指挥官提出的建议与意见,对作战海域进行升级改造,期待下次见面时,能变成你心中最美好的样子. 注:由于本次测试为付费删档测试,因此 ...

  4. OSChina 周四乱弹 ——刚从蓝星寄过来的幼年蓝星人宠物 萌萌哒

    2019独角兽企业重金招聘Python工程师标准>>> [今日歌曲] @树和伊文 :分享, 单曲:Simple Life - Young Rising Sons <Simple ...

  5. 中国第一代程序员列传

    过去的20年,是中国程序员快意恩仇的江湖时代,程序员通过知识实现梦想和财富.历数曾经的数字英雄,名利双收的并不多见.而程序.经营两手抓的更是凤毛麟角. 2011年7月,仅仅47岁的"中国第一 ...

  6. 中国第一代程序员列传 我的偶像

    过去的20年,是中国程序员快意恩仇的江湖时代,程序员通过知识实现梦想和财富.历数曾经的数字英雄,名利双收的并不多见.而程序.经营两手抓的更是凤毛麟角.我们试图透过他们曾走过的足迹,看到中国软件的前世今 ...

  7. 中国第一代程序员盘点

    (点击上方公众号,可快速关注) 来自:<中国经济和信息化>,编辑:孙宏超,写于 2011 年 2011年7月,仅仅47岁的"中国第一程序员"求伯君彻底退隐江湖.这代表着 ...

  8. Mybatis(黑马程序员)

    1. Mybatis基础操作 1.1 需求 需求说明: 根据资料中提供的<tlias智能学习辅助系统>页面原型及需求,完成员工管理的需求开发. 通过分析以上的页面原型和需求,我们确定了功能 ...

  9. 正点原子STM32F103精英版开发环境搭建并编写第一个程序(使用串口下载,基于HAL库)

    一:软件下载: 使用图形化配置软件:STM32cubeMX,支持HAL库. 1,下载stm32cubeMX; 2,下载STM32f103器件包: 3,下载IED:keil5 arm版本: 4,下载 s ...

最新文章

  1. mysql设计数据集市_数据集市设计
  2. Verilog初级教程(20)Verilog中的`ifdef 条件编译语句
  3. 推荐一个用Java实现监控手机短信、来电、App的开源项目
  4. 内存是拿来用的不是拿来看的
  5. MySQL学习笔记06【多表查询、子查询、多表查询练习】
  6. packetbeat oracle,packetbeat 无法启动
  7. 关于微信内置浏览器,打开图片上传功能,调用的问题
  8. python3 + selenium + (chrome and firefox)使用
  9. 爱培科963方案GPS升级ROM过程以及SDK开发
  10. Java学习系列(十三)Java面向对象之界面编程
  11. Python 自动化 30 个实用案例
  12. PS使用:利用PS去除图片中的多余文字
  13. 如果有一天我老无所依,请把我埋在这春天里
  14. 【室内园艺】——栀子花
  15. oracle 11g的Oracle Enterprise Manager(Oracle企业管理器,简称OEM)
  16. 『计组』CPU 如何区分指令和数据
  17. Java基础算法题(01):判断101-200之间有多少个素数,并输出所有素数。 素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。
  18. 14- 决策树算法 (有监督学习) (算法)
  19. java 新手入门电子书_Java基础入门指导(适合所有初学者).pdf
  20. 精度更高,视野更大的Photoneo3D相机

热门文章

  1. oracle 8i安装说明,Oracle 8i for NT/WIN2000安装与配置
  2. visual studio code注释快捷键怎么用?
  3. java中常用的日期工具类
  4. 前端实现可绘制的canvas画布_HTML5 如何创建Canvas画布
  5. ORA-01841: (full) year must be between -4713 and +9999, and not be 0 及自定义my_to_date函数
  6. 通过SSH Client设置规避SSH定时断开
  7. 计算机网络之HTTP协议
  8. RabbitMq | springboot (路由模式RoutingKey)整合Direct交换器
  9. UE4中的GameplayTag:使用层级概念标签来管理对象
  10. linux服务器有必要开zram吗,ZRAM SWAP内存管理讲解