MyBatis学习笔记(感谢up主:狂神老师)

1、简介

1.1 什么是MyBatis?

MyBatis 是一款优秀的基于Java的持久层框架,
它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

1.2 如何获得mybatis?

通过maven仓库

org.mybatis mybatis 3.5.5 GitHub 中文文档地址: https://mybatis.org/mybatis-3/zh/index.html ### 1.3 特点 简单易学:没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件。 灵活: sql写在xml里,便于统一管理和优化。 解除sql与程序代码的耦合:sql和代码的分离,提高了可维护性。 提供映射标签,支持对象与数据库的orm字段关系映射 提供对象关系映射标签,支持对象关系组建维护 提供xml标签,支持编写动态sql。 ## 2、入门 ### 2.1 从 XML 中构建 SqlSessionFactory public class MybatisUtils { private static final SqlSessionFactory sqlSessionFactory;
static {
    String resource = "SqlMapconfig.xml";
    InputStream inputStream = null;
    try {
        inputStream = Resources.getResourceAsStream(resource);
    } catch (IOException e) {
        e.printStackTrace();
    }
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}

public static SqlSession getSqlSession() {
    return sqlSessionFactory.openSession();
    // openSession(true)会自动提交事务
}

}

2.2 mybatis主配置文件

<?xml version="1.0" encoding="utf-8" ?>
<!-- 指定映射配置文件的位置,映射配置文件是指每个DAO独立的配置文件 -->
<mappers>
    <mapper resource="UserDAO.xml"/>
</mappers>
### 2.3 编写实体类、DAO接口、DAO接口实现类 #### 2.3.1 实体类 public class User implements Serializable { private Integer id; private String username; private Date birthday; private String sex; private String address;
public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public Date getBirthday() {
    return birthday;
}

public void setBirthday(Date birthday) {
    this.birthday = birthday;
}

public String getSex() {
    return sex;
}

public void setSex(String sex) {
    this.sex = sex;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

@Override
public String toString() {
    return "User{" +
            "id=" + id +
            ", username='" + username + '\'' +
            ", birthday=" + birthday +
            ", sex='" + sex + '\'' +
            ", address='" + address + '\'' +
            '}';
}

}

2.3.2DAO接口

public interface UserDAO {
List findAll();
}

2.3.3DAO接口实现类(UserDAO.xml)
<?xml version="1.0" encoding="UTF-8" ?> select * from user; ### 2.4 测试 Junit测试 public class MyBatisTest { @Test public void test() { // 使用自己定义工具类获取sqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession();
    // 方式一
    UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
    List<User> users = userDAO.findAll();

// // 方式二
// List users1 = sqlSession.selectOne(“com.alinu.dao.UserDAO.findALL”);
for (User user : users){
System.out.println(user.toString());
}

    sqlSession.close();

}

}

3、实现增删查改

3.1 namespace

namespace必须要写,且和接口名称要一致 ### 3.2 select查询 select * from user; #### 3.2.1 id id值要与接口中的要使用的方法名一致 #### 3.2.2 resultType resultType值为结果集返回封装类型 #### 3.2.3 模糊查询 @Test public void test6() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDAO mapper = sqlSession.getMapper(UserDAO.class);
List<User> userList = mapper.findByName("张%");
for (User user : userList) {
    System.out.println(user);
}

sqlSession.close();

}

select * from user where username like #{value}; ### 3.3 insert插入 insert into user(username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address});

@Test
public void test2() {
// 使用自己定义工具类获取sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();

// 方式一
UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
User user = new User("林新", new Date(), "男", "河南信阳");
boolean add = userDAO.add(user);
//提交事务
sqlSession.commit();
System.out.println(add);

sqlSession.close();

}
特别注意:增删改需要添加事务!!!

3.4 update修改

@Test
public void test3(){
SqlSession sqlSession = MybatisUtils.getSqlSession();

UserDAO mapper = sqlSession.getMapper(UserDAO.class);
User user = new User(1,"王菲", new Date(), "女", "北京");
boolean update = mapper.update(user);
sqlSession.commit();
System.out.println(update);

sqlSession.close();

}

update user set username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address} where id = #{id}; ### 3.5 delete删除 // 删除用户测试 @Test public void test4() { SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDAO sqlSessionMapper = sqlSession.getMapper(UserDAO.class);
sqlSessionMapper.delete(22);

sqlSession.commit();

sqlSession.close();

}

delete from user where id = #{id}; ### 3.6 万能map // 使用Map作为参数的添加测试 @
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博沟通,博会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博沟通,博会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博沟通,博会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博沟通,博会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博沟通,博会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值