MyBatis-特性及基本框架搭建(实现添加用户信息的功能)

 MyBatis

MyBatis特性:

1) MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架

2) MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集

3) MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录

4) MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架(sql语句需要写,jdbc中所有过程都需要自己写,而hibernate是全自动的ORM框架)

  mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
MyBatis的核心配置文件:

 (mybatis-config.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--设置连接数据库的环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?
serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>

创建mapper接口:

MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,不需要提供实现类。通过 MyBatis的功能创建代理实现类,当调用接口中的方法时直接对应SQL语句并执行。

(UserMapper.java)

package com.mybatis.mapper;

public interface UserMapper {
    int insertUser(); //mapper接口与mapper映射的id保持一致
}

ORM(Object Relationship Mapping)对象关系映射
对象:Java的实体类对象
关系:关系型数据库
映射:二者之间的对应关系

(1)映射文件的命名规则:

表所对应的实体类的类名+Mapper.xml

例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml

因此一个映射文件对应一个实体类,对应一张表的操作

MyBatis映射文件用于编写SQL,访问以及操作表中的数据

MyBatis映射文件存放的位置是src/main/resources/mappers目录下

(2) mapper接口和映射文件要保证两个一致:

1)mapper接口的全类名和映射文件的namespace一致;

2)mapper接口中的方法的方法名要和映射文件中的sql的id保持一致。

映射文件:

一个映射文件对应一个实体类,对应一张表的操作
MyBatis映射文件用于编写SQL,访问以及操作表中的数据

(UserMapper.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.mapper.UserMapper">
    <!--int insertUser();-->
    <insert id="insertUser">    <!--方法名与id一致-->
        insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')
    </insert>
</mapper>

在核心配置文件 (mybatis-config.xml)中引入mybatis的映射文件

<!--引入映射文件-->
<mappers>
    <mapper resource="mappers/UserMapper.xml"/>
</mappers>

文件结构:

 测试类:(MyBatisTest.java)

public class MyBatisTest {
    @Test
    public static void main(String[] args) throws IOException {
        //获取核心配置文件的输入流
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取sql的会话对象sqlSession(是MyBatis提供的操作数据库的对象)
        //SqlSession sqlSession = sqlSessionFactory.openSession(); //不会自动提交事务
        SqlSession sqlSession = sqlSessionFactory.openSession(true);//会自动提交事务
        
                /*(使用最多)
                //获取UserMapper的代理实现类对象
                 UserMapper mapper = sqlSession.getMapper(UserMapper.class);
                //调用mapper接口中的方法,实现添加用户信息的功能
                int result = mapper.insertUser();
                System.out.println("结果"+result);
                */
        //提供SQL语句的唯一标识id找到sql并执行。唯一标识是 namespace.sqlId
        int insert = sqlSession.insert("com.mybatis.mapper.UserMapper.insertUser");
        System.out.println("结果"+insert);

         //提交事务
        //sqlSession.commit();
        //关闭sqlSession
        sqlSession.close();
    }
}

        SqlSession sqlSession = sqlSessionFactory.openSession(); //不会自动提交事务

        若不提交事务( sqlSession.commit() ),显示插入成功,但是数据库中无数据。

        SqlSession sqlSession = sqlSessionFactory.openSession(true);//会自动提交事务

 

  • SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的
    会话)
  • SqlSessionFactory:是“生产”SqlSession的“工厂”。
  • 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的
    相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。

 

posted @   浑浑噩噩一只小迷七  阅读(219)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示