01-MyBatis基础

01-MyBatis基础,第1张

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

web层(controller层) -- 处理请求

service层 -- 业务处理

dao层(持久层) -- 与数据库交互

分层代码

不同层代码放在不同的包

controller层 --- com.xxx.controller

service 层 --- com.xxx.service

dao层 --- com.xxx.dao

实体层 --- com.xxx.model

工具类 --- com.xxx.utils

持久层

软件中用于持久化的代码

持久化

将数据保存到可掉电式设备中:txt、图片、数据库

环境搭建

ORM框架:(object relation mapping) -- 实体关系映射

1、建表(数据库) 2、编写对应表的实体类(Java) 3、编写dao层接口
public interface StudentDao {
    // 返回值 方法名
    // 查询所有学生对象
    List getAllStu();
}
4、导入myBatis核心包和JDBC实现包(lib文件夹内,Bulid Path) 5、每个dao层接口对应一个xml配置文件(文件名与接口类名称必须一致)



  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 

    
    
    
 
6、每个myBatis应用,都有一个myBatis的全局配置文件(.xml在src文件下) 


  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

  
  
    
    
      
      
      
        
        
        
        
       
        
        
      
    
  
  
    
    
  
7、启动MyBatis
// 默认在src下读取文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 工厂模式:解析InputStream,生产sqlSession对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// SqlSession对象,放所有myBaits生成的DAO层接口的实现
SqlSession session = sqlSessionFactory.openSession();
// 获取指定的接口实现
StudentDao studentDao = session.getMapper(StudentDao.class);
// 多态调用方法
int count = studentDao.deleteStuByID();
// 更新类需要提交事务
session.commit();
// sqlSessoin是个资源,使用完毕后必须进行关闭   
session.close();

可能会遇到的问题:

接口没注册mapper,全局配置文件中没引入mapper配置

Type interface com.woniuxy.dao.StudentDao is not known to the MapperRegistry

参数传递 @param

在接口形参上@param("参数的别名") 参数类型 形参

在XML配置文件中通过 #{别名} 取值

接口类 

// 添加学生
int addStudent(@Param("student")Student student);
// 通过姓名和描述查找学生
List getStuByNameAndByDesc(@Param("name")String name,@Param("desc")String desc);

 xml配置文件



    INSERT INTO student VALUES (DEFAULT,#{student.sname},#{student.sdesc});

传递Map

在接口写map @param对参数取别名

List getStuByNameAndByDesc2(@Param("condition")Map condition);

在xml配置文件中通过 #{map.k} 取值

在调用方法的时候传递map

Map map =  new HashMap();
map.put("name", "JERRY");
map.put("desc", "JERRY 是谁");
List stuByNameAndByDesc2 = studentDao.getStuByNameAndByDesc2(map);
for (Student student : stuByNameAndByDesc2) {
    System.out.println(student);
}
session.commit();
session.close();

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

原文地址: https://outofmemory.cn/langs/796129.html

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

发表评论

登录后才能评论

评论列表(0条)

保存