Mybatis学习笔记

Mybatis学习笔记,第1张

Mybatis学习笔记

目录

1、Mybatis简介

1.1.什么是Mybatis

1.2 持久化

1.3 持久层

2、第一个Mybatis程序

2.1 搭建环境,创建数据库

2.2 创建一个模块

2.3 编写代码

2.4.遇到的问题及解决方式


1、Mybatis简介 1.1.什么是Mybatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

1.2 持久化

持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。

持久化是将程序数据在持久状态和瞬时状态间转换的机制。

JDBC就是一种持久化机制。文件IO也是一种持久化机制。

1.3 持久层

其功能主要是负责数据库的访问,简单的说法就是实现对数据表的Select(查询),Insert(插入),Update(更新),Delete(删除)等 *** 作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。
Dao层、Service层、Controller层,完成持久化工作的代码块,层界限十分明显

MVC模式:

Model层(模型层)
View层(显示层)
Controller层(控制层)
Model层分为Dao层和service层

service层:主要负责业务处理,比如取得连接,关闭数据库、事务回滚,一些复杂的逻辑业务放到service层。
dao层:负责访问数据库进行数据的 *** 作,取得结果集,之后将结果集的数据取出给service层或封装到VO类对象之后返回给service层。
Controller层:控制层,主要功能是处理用户发送的请求。
View层:显示层,主要负责实现数据

在实际开发中dao层要先定义自己的 *** 作标准接口,为了解耦合。

1.4 为什么需要MyBatis
优点:

我们可以通过XML配置或者Java注解配置的方式来配置SQL语句,参数,以及结果及类型等等,不需要频繁地修改源代码, 提高了代码的维护性和扩展性, 更重要的是我们可以完成持久层(DAO)的零实现. 所谓的零实现,就是不用写实现类代码,直接使用接口就可以 *** 作数据库.极大地提高了代码的扩展性和维护性。
灵活:Mybatis不会对应用程序或者数据库的现有设计强加任何影响,sql写在xml文件中,便于统一管理和优化,通过sql语句可以满足数据库 *** 作的所有需求。
接触sql与程序代码的耦合:提供dao层,将业务逻辑和数据库访问逻辑分离,使系统设计更清晰,更易于维护,更容易单元测试。
提供映射标签,支持对象与数据库的orm字段映射
提供xml标签,支持编写动态SQL

2、第一个Mybatis程序 2.1 搭建环境,创建数据库
CREATE DATAbase `mybatis`;

USE `mybatis`;

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
`id` int(20) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert  into `user`(`id`,`name`,`pwd`) values (1,'狂神','123456'),(2,'张三','abcdef'),(3,'李四','987654');


1.新建项目
2.创建一个普通的maven项目
3.删除src目录 (就可以把此工程当做父工程了,然后创建子工程)
4.导入maven依赖


        
            mysql
            mysql-connector-java
            8.0.21
        
        
            org.mybatis
            mybatis
            3.5.2
        
        
            junit
            junit
            4.12
        
    
2.2 创建一个模块

编写mybatis的核心配置文件




    
        
            
            
                
                
                
                
            
        
    
    
        
    

编写mybatis工具类

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static{
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //可以从SqlSessionFactory中获得 SqlSession 的实例.
    // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}
2.3 编写代码

实体类

package com.kuang.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接口

public interface UserMapper {
    List getUserList();
}

接口实现类 (由原来的UserDaoImpl转变为一个Mapper配置文件)




    
        select  * from mybatis.user where id=#{id}
    

3.编写测试类

@Test
    public void getUserById(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getUserById(1);
        System.out.println(user);
        sqlSession.close();
    }
3.3insert


1、在UserMapper接口中添加对应的方法

//添加一个用户
int addUser(User user);


2、在UserMapper.xml中添加insert语句

  
        insert into mybatis.user(id,name,pwd) values (#{id},#{name},#{pwd})
    


3、测试

 @Test
    public void addUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        int res = mapper.addUser(new User(5, "jojo", "123456"));
        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }


注意点:增、删、改 *** 作需要提交事务!

3.4 update

我们一般使用update标签进行更新 *** 作,它的配置和select标签差不多!

//修改一个用户
int updateUser(User user);


2、编写对应的配置文件


        update mybatis.user
        set name = #{name},pwd=#{pwd}
        where id=#{id};
    


3、测试

@Test
public void testUpdateUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);
   User user = mapper.selectUserById(1);
   user.setPwd("asdfgh");
   int i = mapper.updateUser(user);
   System.out.println(i);
   session.commit(); //提交事务,重点!不写的话不会提交到数据库
   session.close();
}
3.5 delete

1、同理,编写接口方法 

//根据id删除用户
int deleteUser(int id);


2、编写对应的配置文件SQL


  delete from user where id = #{id}


3、测试

 @Test
    public void deleteUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

         mapper.deleteUser(4);
        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }


 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5721940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存