博客
关于我
Mybatis的入门01
阅读量:362 次
发布时间:2019-03-05

本文共 4324 字,大约阅读时间需要 14 分钟。

MyBatis 介绍

MyBatis 是一款支持普通 SQL 查询、存储过程以及高级映射的持久层框架。它是一款半自动 ORM(对象关系映射)持久层框架,具有高 SQL 灵活性、动态 SQL 支持、延迟加载、缓存等特点,但数据库无关性较低。

JDBC 到 MyBatis 的演变历程

  • JDBC:传统的数据库连接方式,操作复杂,难以管理事务。
  • dbutils:简化了 JDBC 的使用,但仍然难以处理复杂的数据库操作。
  • MyBatis:提供了更高级别的抽象,简化了数据库开发,支持动态 SQL 和高级映射。
  • Hibernate:全自动 ORM框架,提供了更强的对象与数据库映射能力。

MyBatis 快速入门

1. 添加必要的 jar 包

mysql
mysql-connector-java
5.1.40
org.mybatis
mybatis
3.5.6
org.project.lombok
lombok
1.18.18

2. 创建数据库及表

  • 数据库名称:ppp
  • 表名称:user
  • 表字段:id(int), username(String), password(String)

3. 添加 MyBatis 配置文件 mybatis-config.xml

4. 定义实体类

@AllArgsConstructor@NoArgsConstructor@Datapublic class User {    private int id;    private String username;    private String password;}

5. 定义 CURD 操作 SQL 映射文件 UserMapper.xml

insert into user(username, password) values (#{param1}, #{param2})
update user set username=#{username}, password=#{password} where id=#{id}
delete from user where id=#{id}

6. 注册 UserMapper.xml

7. 编写测试代码

public static void main(String[] args) throws Exception {    Reader reader = Resources.getResourceAsReader("mybatis-config.xml");    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);    SqlSession session = sessionFactory.openSession();    UserDao mapper = session.getMapper(UserDao.class);    List
users = mapper.selectAll(); session.commit(); System.out.println(users);}

实际开发中的操作

1. 创建 UserDao 接口

public interface UserDao {    List
selectAll(); int insertUser(String username, String password); int updateUser(User user); int deleteUser(int id);}

2. 创建映射文件

insert into user(username, password) values (#{param1}, #{param2})
update user set username=#{username}, password=#{password} where id=#{id}
delete from user where id=#{id}

3. 实际开发中的增删改查

@Testpublic void select() throws Exception {    Reader reader = Resources.getResourceAsReader("mybatis-config.xml");    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);    SqlSession session = sessionFactory.openSession();    UserDao mapper = session.getMapper(UserDao.class);    List
users = mapper.selectAll(); session.commit(); System.out.println(users);}
@Testpublic void insert() throws Exception {    Reader reader = Resources.getResourceAsReader("mybatis-config.xml");    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);    SqlSession session = sessionFactory.openSession();    UserDao mapper = session.getMapper(UserDao.class);    int insert = mapper.insertUser("峥峥", "111");    session.commit();    System.out.println(insert);}
@Testpublic void update() throws Exception {    Reader reader = Resources.getResourceAsReader("mybatis-config.xml");    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);    SqlSession session = sessionFactory.openSession();    UserDao mapper = session.getMapper(UserDao.class);    int update = mapper.updateUser(new User(3, "李四", "333"));    session.commit();    System.out.println(update);}
@Testpublic void delete() throws Exception {    Reader reader = Resources.getResourceAsReader("mybatis-config.xml");    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);    SqlSession session = sessionFactory.openSession();    UserDao mapper = session.getMapper(UserDao.class);    int delete = mapper.deleteUser(2);    session.commit();    System.out.println(delete);}

注意事项

  • Mapper.xml 映射文件中可能出现参数名称不匹配的问题。
  • 可以通过在 UserDao 接口中添加 @Param 注解来解决参数名称不匹配的问题。
  • 也可以通过在 Mapper.xml 中直接使用参数占位符来实现参数值的传递。

转载地址:http://ysmg.baihongyu.com/

你可能感兴趣的文章
数学建模更新12(数学线性规划模型1)
查看>>
Android,SharedPreferences的使用
查看>>
JPEG压缩技术
查看>>
两款用于检测内存泄漏的软件
查看>>
王爽 《汇编语言》 读书笔记 三 寄存器(内存访问)
查看>>
IDEA出现问题:Received fatal alert: protocol_version 解决方案
查看>>
Airtest自动化测试 Docs airtest.core.android package
查看>>
SVN Unable to connect to a repository at URL 的解决方案
查看>>
准确率94%!Python 机器学习识别微博或推特机器人
查看>>
Android基本知识
查看>>
在Java中,return null 是否安全, 为什么?
查看>>
命令模式【Command Pattern】
查看>>
OSI 7 层网络模型
查看>>
JDK 内置的多线程协作工具类的使用场景
查看>>
Java 中哪些对象可以获取类对象
查看>>
linux 的 cp 命令如何复制不提示覆盖
查看>>
缓存穿透 / 缓存击穿 / 缓存雪崩 / 缓存一致性
查看>>
linux 的 sleep 命令
查看>>
js 的 let var const 区别
查看>>
vue计算属性和监听器区别
查看>>