栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis学习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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();
    }


 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/726599.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号