Mybatis入门系列01-Mybatis简介及第一个Mybatis程序
1. 简介
1.1 为什么使用Mybatis
java服务器需要与数据库操作,java传统的数据库操作通过JDBC实现。JDBC提供了java与数据库连接及操作的接口,但与数据库交互时需要==编写JDBC文件==,同时SQL语句也会出现在java中,导致==java与SQL的耦合==,为了解决这两个问题,引入了Mybatis解决java JDBC实现数据库操作带来的问题。
1.2 什么是Mybatis
文章图片
image-20201202171812129.png
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
- 持久层框架;
- 支持自定义SQL、存储过程和高级映射;
- 免除JDBC代码,设置参数及获取结果集的工作;
- XML或注解进行配置;
持久化:对应于“易失性存储”,将易失性存储的数据转变为持久状态。
为什么持久化:有些数据需要长久保存,不能断电即失。
持久化的方式:数据库;IO文件;...
持久层:处理持久化过程的代码块,实现持久化数据与内存数据的相互转化。
1.4 Mybatis的特点 Mybatis的作用:==帮助程序操作数据库。==
Mybatis的特点:
- sql与代码的分离,提高可维护性;
- 提供映射标签,支持对象与数据库的orm字段关系映射;
- 提供对象关系映射标签,支持对象关系组建维护;
- 提供xml标签,支持编写动态sql。
Mybatis文档:https://mybatis.org/mybatis-3/zh/index.html
2. Mybatis环境搭建与第一个Mybaits程序(基于Maven)
2.1 环境搭建 基于Maven项目中使用Mybatis,只需要在.pom文件中引入Mybatis对应的包即可。
mysql
mysql-connector-java
8.0.21
org.mybatis
mybatis
3.4.6
junit
junit
4.12
2.2 第一个Mybatis程序 一个Mybatis程序构建完成后的示例结构如下图。
文章图片
image-20201205121753726.png 其具体构建步骤如下:
- 准备数据库;
- 新建一个maven项目,并在项目的main目录下的resource文件夹中新建mybatis-config.xml文件,结构如下:
- 构建Mybatis工具类:在utils文件夹中新建MybatisUtil.java工具类,用于读取xml构建sqlSession实例,作为程序与数据库的连接。
//文件名:MybatisUtils.java public class MybatisUtils { //新建静态sqlSessionFactory对象,该对象只需要在项目初始化时生成一次; private static SqlSessionFactory sqlSessionFactory; static { try { //定义xml文件地址,默认地址在resources文件夹中; String resource = "mybatis-config.xml"; InputStream inputStream = null; //对过inputSteam流解析xml中的数据库及项目信息; inputStream = Resources.getResourceAsStream(resource); //sqlSessionFactory对象由sqlSessionFactoryBuilder对象的build方法实例化; sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //定义一个getSqlSession方法来构建一个sqlSession实例,通过sqlSessionFactory的openSession()方法实现。 //sqlSession完全包含了面向数据库执行SQL命令所需的所有方法! //参数true指打开了sqlSession的自动提交,即更改数据库后无需手动commit。 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(true); } }
- 编写数据库
数据定义一般放入pojo文件夹,一般一个数据表与一个类对应,类的属性为表中的字段,同时构建出get/set方法,tostring方法,有参/无参构造方法。
//文件名:User.java package com.hy.pojo; public class User { private int id; private String name; private String pwd; public User() { }public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; }public int getId() { return id; }public void setId(int id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public String getPwd() { return pwd; }public void setPwd(String pwd) { this.pwd = pwd; }@Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
- 编写数据库交互接口
数据库交互的接口一般放在dao文件夹,定义数据库的基本操作(CRUD),一般命名为XxxMapper,定义为接口文件。
//文件名:UserMapper.java public interface UserMapper { //获取全部用户; List
getUserList(); //根据id查询用户; User getUserById(int id); //根据name查询用户; List getUserListByName(String name); //insert一个用户; void addUser(User user); //按id更新一个用户; void updateUserById(User user); //按id删除一个用户; Integer deleteUserById(int id); //利用map适配查询内容; int addUserPartly(Map map); //模糊查询; List getUserLike(String value); }
- 编写XxxMapper.xml文件
上一步中的接口的实现在此xml文件中定义,当然也可以直接用java编写实现类。而Mybatis的作用即在此步骤中,通过xml配置文件替换了java的实现类,免去了实现类中连接数据库等基础操作的代码,简化代码并实现了java和SQL的解耦。
select * from db_hy.userselect * from db_hy.user where name like "%"#{value}"%"select * from db_hy.user where id = #{id}select * from db_hy.user where name = #{name} insert into db_hy.user (id,name,pwd) values (#{id}, #{name}, #{pwd}) insert into db_hy.user (id,name,pwd) values (#{userid}, #{userName}, #{passWORD}) update db_hy.user set name=#{name}, pwd=#{pwd} where id=#{id} delete from db_hy.user where id=#{id}
- 将Mapper.xml引入项目
要使上一步中的Mapper.xml文件在项目中起作用,需要将xml文件引入项目。具体实现分为2步。
首先,需要将该文件引入mybatis的核心配置文件中,即引入mybatis-config.xml文件中。
文章图片
image-20201205122248564.png
src/main/resources
**/*.properties
**/*.xml
src/main/java
**/*.properties
**/*.xml
- 编写测试类进行测试
在test文件夹中新建对应接口文件相同位置的建立对应的测试类,测试测试方法验证。
//文件名: UserMapperTest.java public class UserMapperTest {@Test public void test(){ //新建sqlSession连接。 SqlSession sqlSession = MybatisUtils.getSqlSession(); try{ //通过sqlSession的getMapper方法获取UserMapper对象; //该对象就是对应UserMapper接口的实例化对象。 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //UserMapper对象可以直接使用接口定义的方法,方法的实现来自Mapper.xml配置文件。 List
userList = userMapper.getUserList(); for (User user : userList) { System.out.println(user); } } finally { //测试完毕要记得关闭连接,释放内存。 sqlSession.close(); System.out.println("====================="); }} }
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- mybatisplus|mybatisplus where QueryWrapper加括号嵌套查询方式
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- 【欢喜是你·三宅系列①】⑶
- 你不可不知的真相系列之科学
- 人脸识别|【人脸识别系列】| 实现自动化妆
- 2018-06-13金句系列7(金句结构-改编古现代诗词)
- Unity和Android通信系列文章2——扩展UnityPlayerActivity