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

mybatis

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

mybatis

SSM框架 一、mybatis框架 1.介绍

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。

半自动的ORM(Object/ Relational Mapping,即对象关系映射)框架。ORM框架常用有两个:Hibernate和MyBatis框架。

2.ORM的介绍

ORM(对象关系映射):以对象的方式操作数据库

比如定义一个对象和数据库表字段一致,那么就可以直接操作这个对象,就可以自动生成SQL语句.
 如:userDao.insert(user对象) ,无需书写SQL语句就可以实现数据的插入

ORM的核心映射机制

​ 数据表 <-对应-> java对象

​ 数据表字段 <-对应-> java对象中的属性

1)全自动映射

当用户执行代码userDao.insert(user对象),映射框架解析成insert into 表名(字段1,字段2,字段3...) values(属性值1,属性值2,属性值3.....)
------------------------------------------
用户查询操作:List userList = userDao.selectList(user对象);

select * from 表名 where xxxx=xxxx and xxx= xxx
结果集自动的封装成对象

自动实现对象的封装

自动生成SQL语句

2)半自动ORM的mybatis

可以实现对象的自动封装,但是不能自动生成SQL语句.

3.mybatis的入门代码编辑(Maven项目下) 总体的项目结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDR0Aujp-1659013934685)(D:Typorabindocumentimg1658917077363.png)]

1.导入jar包


        
        
            mysql
            mysql-connector-java
            8.0.16
        

        
        
            org.mybatis
            mybatis
            3.5.6
        
    
        
        
            log4j
            log4j
            1.2.17
        
    
        
            junit
            junit
            4.12
            test
        
    


2.数据库表和实体对象

必须保证数据表和对象一一映射,表中字段和对象属性一一映射

3.编写xxxMapper接口

(和Dao接口一类,只是命名格式不同,用来定义操作数据库的方法)

4.编写xxxMapper对应的映射文件xxxMapper.xml

该xml文件只是替代了实现类,在该xml中书写SQL




    
       SQL语句
    
    
    
    

----------------------------------------------------------------------------------



    
    


此处的User就是一个别名,代表com.atguigu.mybatis.pojo.User
通过下面的别名定义实现
    1|2|4 在mybatis-config.xml中配置
   	3在实体类上
-----------------------------------


               

1)通过标签定义

 
    
        
        
    

2)简化alias

 
    
        
        
    

3)注解写法

@Alias("User")
public class User implements Serializable {...}

4)定义别名


  

9.映射文件中的元素

映射文件是 MyBatis框架中十分重要的文件,在映射文件中,元素是映射文件的根元素,其他元素都是它的子元素

1、< select >

用于映射查询语句,它用于从数据库中读取出数据,并组装数据给业务开发人员。


        select      from demo_user
    
10.参数传递 #{}和${}的用法和区别

#号它是有预编译的效果(相当于 PraperStatement ),参数使用?进行占位,并且默认为参数添加引号

$号是直接将字符串进行拼接,没有预编译的效果,使用时需要手动添加引号

原则: 能用#号 不要使用$符,除非以字段名称为参数时使用.

1.单值参数传递

mybatis单值数据传递时和参数的名称无关. 通过参数下标的方式获取的.

建议: 虽然和名称无关,但是一般的参数 见名知意.


        
        select * from demo_user where age=#{param1} and sex=#{param2}
    

弊端: 用户传递的数据是有参数名称的, 如果大量使用下标的方式,则会导致sql业务理解不方便

2)Map集合

说明: 如果用户需要进行多值参数传递,则可以使用map集合进行封装.

编辑测试类:

 
    @Test
    public void test04(){
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int age = 3030;
        String sex = "男";
        Map map = new HashMap<>();
        map.put("age",age);
        map.put("sex",sex);
        List list = mapper.findUserByMap(map);
        list.forEach(System.out::println);
    }

xml映射文件


    
        select * from demo_user where age=#{age} and sex=#{sex}

4)实体对象封装

需求: 根据实体对象中的数据查询数据.

  1. 编辑测试类
    @Test
    public void test06(){
        User user = new User();
        user.setName("铁扇公主");
        user.setAge(1273);
        user.setSex("女");

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List list = mapper.findUser(user);
        list.forEach(System.out::println);
    }
  1. 编辑Mapper接口
List findUser(User user);
  1. 编辑Mapper.xml映射文件

    
        select * from demo_user1
    

4)mybatis-config.xml

在properties标签下生效,要依照执行顺序
    

        
        
    
    
    
........................................

  

5)测试类

@Test
    public void selectUser() throws IOException {
        InputStream rs = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(rs);
        SqlSession sqlSession=sqlSessionFactory.openSession();
        UserMappers mapper=sqlSession.getMapper(UserMappers.class);
        List userList=mapper.selectUser();
        System.out.println(userList);
    }

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

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

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