MyBatis快速入门

什么是框架? 框架相当于是一个脚手架,内部已经封装好了很多代码,只需要在其基础上进行开发就可以提高我们的开发效率。
什么是MyBatis?

  • MyBatis 是一款优秀的持久层框架。
  • 它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  • 官方文档:https://mybatis.org/mybatis-3...
快速上手
我的mysql版本是5.7
1. 准备数据
DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id) ); INSERT INTO user (id, name, age, email) VALUES (1, 'Jone', 18, 'test1@baomidou.com'), (2, 'Jack', 20, 'test2@baomidou.com'), (3, 'Tom', 28, 'test3@baomidou.com'), (4, 'Sandy', 21, 'test4@baomidou.com'), (5, 'Billie', 24, 'test5@baomidou.com');

2. 依赖导入
org.mybatis mybatis 3.5.10 mysql mysql-connector-java 8.0.11 org.projectlombok lombok 1.18.24 provided junit junit 4.13.2 test

3. JavaBean
用于映射数据库:
  • 类名 = 表名
  • 类成员变量 = 字段
@Data @NoArgsConstructor @AllArgsConstructor public class User { private Integer id; private String name; private Integer age; private String email; }

4. 定义接口
创建 com.nhb.dao.UserDao 接口,并定义接口方法,内容如下:
public interface UserDao { List getAll(); }

5. xml映射实现接口
resources 目录下创建 com/nhb/dao/UserDao.xml,实现接口并定义sql,内容如下:
SELECT * FROM user

6. mybatis配置文件
resources 目录下创建 mybatis-config 配置文件,内容如下:

7. 测试单元
test 目录下创建 com/nhb/MyTest.java,内容如下:
public class MyTest {private SqlSession sqlSession; @Before public void init() throws IOException { //定义mybatis配置文件路径 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //传入对应配置文件的输入流,读取配置文件获得SqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //通过SqlSessionFactory获取sqlSession对象(理解为数据库连接) sqlSession = sqlSessionFactory.openSession(); }@Test public void testUserDao(){ //通过sqlSession获取Mapper接口的实现类 UserDao userDao = sqlSession.getMapper(UserDao.class); List all = userDao.getAll(); //遍历输出 for (User user : all) { System.out.println(user); } }@After public void destroy(){ //提交事务 sqlSession.commit(); //释放资源 sqlSession.close(); } }

高效开发
拒绝重复且无意义的东西,提升开发效率。
  1. IDEA里面设置好 mybatis-configUserDao.xml代码模板。
  2. IDEA安装MyBatisX插件,接口与实体类互相跳转,自动生成实体类,代码生成等。
  3. 可以复制粘贴就别手写,容易出错。
参数获取 单个参数
基本参数 使用 #{} 来取值,写任意名字都可以获取参数,建议使用接口的参数名来取值。
定义接口方法
User getById(Integer id);

实现接口方法,并定义sql
SELECT * FROM user WHERE id = #{id}

单元测试
@Test public void testGetById(){ UserDao userDao = sqlSession.getMapper(UserDao.class); User user = userDao.getById(1); System.out.println(user); }

对象 使用对象中的属性名来获取对应的值
定义接口方法
User getByBean(User user);

实现接口方法,并定义sql
SELECT * FROM user WHERE id = #{id} AND name = #{name} AND age = #{age}AND email = #{email}

单元测试
@Test public void testGetByBean(){ UserDao userDao = sqlSession.getMapper(UserDao.class); User newUser = new User(2, "Jack", 20, "test2@baomidou.com"); Useruser = userDao.getByBean(newUser); System.out.println(user); }

多个参数
MyBatis会把多个参数放入一个Map集合中,如果只有一个参数的时候不用做什么特殊处理。 多个参数的情况下要加上 @Param 来设置参数名。
定义接口方法
User getByMap(@Param("id") Integer id,@Param("name") String name);

实现接口方法,并定义sql
SELECT * FROM user WHERE id = #{id} AND name = #{name}

单元测试
@Test public void testGetByMap(){ UserDao userDao = sqlSession.getMapper(UserDao.class); User user = userDao.getByMap(1,"Jone"); System.out.println(user); }

占位符的区别
#{} 是预编译处理,会将形参变量的值取出,并自动给其添加引号。
${} 是字符串替换,直接替换掉占位符,使用 ${} 的话会导致 sql 注入。
所以为了防止 SQL 注入,能用 #{} 的不要去用 ${}
核心类 sqlSessionFactory sqlSessionFactory是一个SqlSession的工厂类,主要用来获取SqlSession对象。
//成员方法SqlSession openSession(); //获取SqlSession对象,传入的参数表示创建的SqlSession是否自动提交 SqlSession openSession(boolean var1);

sqlSession SqlSession 实现了 Closeable 接口,代表 SqlSession 是可以关闭的,那也就是说SqlSession 代表一种可关闭的连接。SqlSession 提供了在数据库执行SQL命令所需的所有方法,它还提供了事务的相关操作。
//成员方法//获取Mapper对象 T getMapper(Class var1); //提交事务 void commit(); //事物回滚 void rollback(); //释放资源 void close();

CRUD操作 定义接口方法
//新增 int save(User user); //删除 int removeById(Integer id); //修改 int updateById(User user); //查询 User getById(Integer id);

实现接口方法,并定义sql
INSERT INTO user VALUE(#{id},#{name},#{age},#{email}) DELETE FROM user WHERE id = #{id} UPDATE user SET name = #{name}, age = #{age}, email = #{email} WHERE id = #{id} SELECT * FROM user WHERE id = #{id}

单元测试
@Test public void testSave(){ UserDao userDao = sqlSession.getMapper(UserDao.class); User newUser = new User(6, "鸡你太美", 25, "jige@baomidou.com"); int result = userDao.save(newUser); System.out.println(result); }@Test public void testRemoveById(){ UserDao userDao = sqlSession.getMapper(UserDao.class); int result = userDao.removeById(5); System.out.println(result); }@Test public void testUpdateById(){ UserDao userDao = sqlSession.getMapper(UserDao.class); User newUser = new User(6, "鸡哥真爱粉", 21, "jige@www.com"); int result = userDao.updateById(newUser); System.out.println(result); }@Test public void testGetById(){ UserDao userDao = sqlSession.getMapper(UserDao.class); User user = userDao.getById(1); System.out.println(user); }

配置文件 下面举几个简单的配置来演示一下,更多配置查官方文档:https://mybatis.org/mybatis-3...
properties
可以使用 读取 properties 配置文件,使用其中的 resource 属性来设置配置文件的路径。然后使用 ${key} 来获取配置文件中的值。
resources 目录下有 jdbc.properties 文件:
jdbc.url = jdbc:mysql://localhost:3306/demo?useSSL=false jdbc.driver = com.mysql.cj.jdbc.Driver jdbc.username = nhb jdbc.password = ********

mybatis-config.xml中:

settings
可以使用该标签来进行一些设置

environments
配置数据库相关的环境,例如事物管理器,连接池相关参数等。

mappers
将包内的映射器接口实现全部注册为映射器
注意:定义dao接口所在的包,要求xml文件存放的路径和dao接口的包名要对应,不然会报错!!
【MyBatis快速入门】

    推荐阅读