Mybatis的入门学习---架构、案例开发



前言


以下是今天所学,学习mybatis,一定要明白它的架构是怎样一个流程,然后学习它的操作步骤,找到自己的学习思路。

一、Mybatis介绍

(1)Mybatis是什么?

    MyBatis 本是apache的一个开源项目iBatis,是一个基于Java的持久层框架

(2)Mybatis有什么特点?

  - 1 最简单安装只要两个jar文件+配置几个sql映射文件
  - 2 sql写在xml里,便于统一管理和优化
  - 3 sql和代码的分离,提高了可维护性
  - 4 提供映射标签,支持对象与数据库的orm字段关系映射
  - 5 提供对象关系映射标签,支持对象关系组建维护
  - 6 提供xml标签,支持编写动态sql

二、Mybatis架构

在这里插入图片描述

1:核心 配置文件,放四大信息			
ip,port,username,password			
			
2:映射文件			
select			
update			
delete			
insert		
3:SqlSession对象,支持增删改查,连接		
4:SqlSessionFactory			使用了工厂设计模式的生成session的对象

三、Mybatis环境搭建

(1)mybatis下载

mybaits的代码由github.com管理
下载地址:https://github.com/mybatis/mybatis-3/releases

(2)导入jar包

  • 测试相关的包: junit hamcrest
<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
  • 日志相关的包:log4j-1.2.16 slf4-api slf4j-log4j12
<!--日志包-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
  • 数据库相关jar包: mysql-connector
<!-- MySql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
  • Mybatis先关jar包: mybaits-3.4.5
<!-- Mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

在这里插入图片描述

(3)导入jar包log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

在这里插入图片描述

四、Mybatis的操作步骤

mybatis开发流程:

  • 1 创建SqlSessionFactoryBuilder对象
  • 2 加载SqlMapConfig.xml配置文件
  • 3 创建SqlSessionFactory对象
  • 4 创建SqlSession对象
  • 5 执行SqlSession对象执行查询,获取结果User
  • 6 打印结果
  • 7 释放资源

五、Mybatis的入门案例

1、Java代码编写

(1)先获取Session
(2)再进行增删改查操作

在这里插入图片描述

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.InputStream;

public class Test01Myabatis {
    
    
    @Test
    public void test01(){
    
    
//        》1 创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//        》2 创建SqlSessionFactory对象
        InputStream inputStream = Test01Myabatis.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(inputStream);//加载核心配置文件 参1 输入流
//        》3 加载SqlMapConfig.xml配置文件
//        》4 创建SqlSession对象
        SqlSession sqlSession = sessionFactory.openSession();
//        》5 执行SqlSession对象执行删除
        System.out.println(sqlSession);
        //delete from user where id = ?
        sqlSession.delete("com.wzx.bean.User.deleteById",24);//执行删除 参1 是namespace.id 参2 参数值
//        》6 打印结果
//        》7 释放资源
        sqlSession.commit();//mybatis的session不会自动提交,必须手动提交
        sqlSession.close();
    }
}

2、映射配置文件

(1)核心配置文件模板代码从文档中复制
(2)配置说明
核心配置文件:
在这里插入图片描述

<?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">
<!--dtd是对xml配置标签与属性的约束-->
<configuration>
    <typeAliases>
        <!-- <typeAlias type="com.wzx.bean.User" alias="user"></typeAlias> -->
       <package name="com.wzx.bean"/>
       
    </typeAliases>
<!--    environments环境  开发环境,生产环境-->
    <environments default="development">
        <environment id="development">
            <!--    使用jdbc的事务管理  -->
            <transactionManager type="JDBC"/>
            <!--    dataSource Mybatis自带数据源连接池-->
            <dataSource type="POOLED">
                <!--    四大信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis01?characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 配置多个映射文件-->
    <mappers>
         <mapper resource="UserMapper.xml"/>
         <mapper resource="com/wzx/dao/UserDao.xml"/>
    </mappers>
</configuration>

映射文件:
在这里插入图片描述

<?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">
<!-- map的约束文件-->
<!-- namespace 命名空间 防止id冲突找不到正确的id-->
<!-- id Mybatis是将sql语句写在xml文件中,以后session根据namespace.id 合在一起获取sql-->
<!-- 在jdbc中,sql语句使用?作占位符,但在mybatis #{
    
    id}-->
<mapper namespace="com.wzx.bean.User">
    <delete id="deleteById" parameterType="int" >
        delete from user where id = #{
    
    id}
    </delete>

    <select id="findByUserName" parameterType="string" resultType="com.wzx.bean.User">
        select * from user where username like #{
    
    keyword}
    </select>

    <select id="findByUserName2" parameterType="string" resultType="com.wzx.bean.User">
        select * from user where username like '${value}%'
    </select>
    <!--User user   调用 user.getUsername() user.getSex() 但在标签里 #{
    
    username} -->
    <insert id="saveUser" parameterType="com.wzx.bean.User" >
        insert into user values(null,#{
    
    username},#{
    
    birthday},#{
    
    sex},#{
    
    address});
    </insert>

    <update id="updateUser" parameterType="com.wzx.bean.User">
        update  user set username = #{
    
    username},birthday=#{
    
    birthday},sex=#{
    
    sex},address=#{
    
    address} where id =#{
    
    id}
    </update>
</mapper>

3、MySessionUtil

(1)静态代码块
(2)getSession方法
(3)Junit注解

在这里插入图片描述

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

//session工具类
public class MySessionUtils {
    
    
    private static SqlSessionFactory SessionFactory;

    //静态代码块,开始时仅执行一次
    static{
    
    
        //1、创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder =new SqlSessionFactoryBuilder();
        //2、创建SqlSessionFactory对象
        InputStream inputStream=MySessionUtils.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
        SessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        //3、加载SqlMapConfig.xml配置文件

    }
    public static SqlSession getSession(){
    
    
        //4、创建SqlSession对象
        SqlSession sqlSession = SessionFactory.openSession();
        return sqlSession;
    }
}

4、模糊查询-两种方式

(1)编写sql
(2)方法读取sql,与 参数,返回值类型,转成jdbc代码

#{username}   "张%"
'${value}%'  "张"

在这里插入图片描述

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.smp.bean.User;
import com.smp.util.MySessionUtils;

import java.util.Date;
import java.util.List;

public class Test03Session {
    
    
    @Test
    public void test01(){
    
    
        SqlSession sqlSession = MySessionUtils.getSession();
//        》5 执行SqlSession对象执行删除
        System.out.println(sqlSession);

        // List<User> list= sqlSession.selectList("com.smp.bean.User.findByUserName","张%");//查询结果为集合,参1,namespace.id 参2 关键字
        List<User> list= sqlSession.selectList("com.smp.bean.User.findByUserName2","张");
        for(User user:list){
    
    
            System.out.println(user);
        }

//        》6 打印结果
        sqlSession.close();
    }

猜你喜欢

转载自blog.csdn.net/qq_41209886/article/details/108766309