MyBatis浅入:三层框架和初步学习MyBatis

发布于:2023-01-18 ⋅ 阅读:(572) ⋅ 点赞:(0)

目录

一,三层架构:

1,什么是三层架构

为什么使用三层:

2,常用框架SSM

MyBatis执行流程图:

二,使用MyBatis框架

一),使用mybatis框架得基本步骤:

1,新建数据库表

2,新建maven项目

3,补全maven工程目录

4,修改pom.xml文件,添加mybatis依赖,添加mysql依赖

5,修改pom.xml文件,添加资源文件指定

6,在idea中添加数据可视化

7,配置jdbc.properties属性文件(配置数据库连接得基本信息)

8,添加SqlMapConfig.xml,mybatis的核心文件

9,创建实体类,用来封装数据

数据库连接池的引入:

10,添加数据库对数据表操作的StuMapper.xml文件

11,创建测试类,进行功能测试

mapper数据库查询语句映射Java的数据类型:

使用Mybatis对数据库进行增删改查



一,三层架构:

1,什么是三层架构

在项目开发中遵循的一种开发模式,分为三层:

1),界面层:负责接收客户端的数据,将数据传递给业务逻辑层处理,返回结果给客户端

2),业务逻辑层:整个项目的逻辑处理层,接收界面层的数据,传递给数据访问层,接受数据访问层的结构,返回数据结果给界面层

3),数据访问层:专门用来进行数据库的增删改查操作,向上为业务逻辑提供数据

界面层<————>业务逻辑层<————>数据访问层,各层之间不可以跨月访问。

为什么使用三层:

1,结构清晰,耦合度低,各层分工明确

2,可维护性搞,课扩展性高

3,有利于标准化

4,开发人员只需要注重一层功能结构的实现

5,有利于各层逻辑结构的实现。

2,常用框架SSM

Spring:Spring整合了其他框架,核心是IOC和AOP,由20多个模块组成

SpringMVC:Spring中的一员,专门用于优化控制器(Servlet)。提供了极为简单的数据提交,数据携带和数页面跳转。

MyBatis:持久化层的一个框架,用于优化数据访问,专注SQL语句

SSM是一个半成品软件,将公共的部分封装,重复问题解决,简化程序开发,他是可扩展,可复用的。

MyBatis执行流程图:

添加框架的步骤:

1,添加依赖 

2,添加配置文件

二,使用MyBatis框架

一),使用mybatis框架得基本步骤:

1,新建数据库表

SHOW DATABASES;
USE ssm;
CREATE TABLE if not EXISTS stu(
	id INT auto_increment PRIMARY KEY,
	name VARCHAR(255) DEFAULT null,
	email VARCHAR(255) DEFAULT null,
	age int DEFAULT NULL
);

INSERT INTO stu(name,email,age) VALUES('张三','123@163.com' ,18);
INSERT INTO stu(name,email,age) VALUES('李四','345@163.com' ,28);
INSERT INTO stu(name,email,age) VALUES('王五','1433@163.com' ,38);

SELECT * FROM stu;

2,新建maven项目

3,补全maven工程目录

4,修改pom.xml文件,添加mybatis依赖,添加mysql依赖

<!--添加mybatis依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>

    <!--添加muysql依赖-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.49</version>
    </dependency>

5,修改pom.xml文件,添加资源文件指定

      <!--添加资源文件的指定-->
        <resources>
            <resource>
            <!--      加载src/main/java下的所有一xml和properties结尾的文件到编译后的target文件中去
                      如果没有指定文件,默认是只加载java目录下的java文件,xml和properties会丢失-->
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
            <!--上面设置了资源的加载路径,系统会以为修了默认的加载路径,如果不再次显示的把resources下的文件添加到文件加载路劲中去
            那么系统就不会从resources中加载文件到target目录下-->
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>

6,在idea中添加数据可视化

 

  

7,配置jdbc.properties属性文件(配置数据库连接得基本信息)

8,添加SqlMapConfig.xml,mybatis的核心文件

 

  SqlMapConfig.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>
    <!-- 引入配置信息 -->

    <!--  1,读取数据库配置文件properties  -->
    <!--
    resource:从resources文件下读取文件名为jdbc.properties得文件
    url: 从   绝对路径  中读取文件
       -->
    <properties resource="jdbc.properties" />

    <!--  2,配置数据环境变量(数据库得连接配置)  -->
    <environments default="development">
        <!--   这里面可以有很多个environment的id,default里面是哪个,下面的那个环境就生效     -->
        <environment id="development">
            <!--  配置事务管理器  type:指定事务管理的方式,type的属性值是源码transactionManager包下的包名大写
            JDBC:事务的控制交给开发人员处理  MANAGER:有容器来管理事务
            -->
            <transactionManager type="JDBC" />
            <!-- 配置数据源,也可引用c3p0外部文件
                JNDI:java命名目录接口接口,在服务器进行数据库连接池管理
                POOLED:使用数据连接池进行数据库的连接配置
                UNPOOLED:不适用数据库连接池
             -->
            <dataSource type="POOLED">
                <!-- db.properties文件会被加载到内存创建一个个的全局变量,因此可以在此处引用,其实不止可以在此处引用在其他地方也可以使用 -->
                <property name="driver" value="${jdbc.driverClassName}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>

    <!--3,注册mapper.xml文件-->
    <mappers>
        <!-- 映射的文件,也可以是类:框架根据此处的配置创建相应的实现类 -->
        <!--  从指定的路径下,
        resource:找到文件名为resource的文件
        url:指定绝对路径
        class:动态代理方式下的注册
          -->
        <mapper resource="StuMapper.xml" />
    </mappers>

</configuration>

9,创建实体类,用来封装数据

数据库连接池的引入:

http://t.csdn.cn/Bfaw8

10,添加数据库对数据表操作的StuMapper.xml文件

创建StuMapper.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.rd.mapper.XXXMapper">
  
</mapper>
<?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标签是整个文件的标签,用来开始和结束xml文件
    mapper中的属性:namespace:指定命名空间(包名),用来区分不同mapper.xml中相等的id属性
-->
<mapper namespace="yyk">
    <!--  id:通过指定ID来执行数据语句

        返回值的集合时:返回值的类型必须是泛型
          resultType:指定返回值的类型 ,必须是泛型,即一个类的全路径
          parameterType:指定参数类型
    -->
    <select id="getAll" resultType="com.pojo.Stu" >
        select id,name,email,age
        from stu
    </select>
    
</mapper>

StuMapper.xml创建完毕,需要去SqlMapConfig.xml中去注册mapper,否则无法使用该StuMapper

11,创建测试类,进行功能测试

按照这个流程书写测试代码:

package com.ssm;

import com.pojo.Stu;
import org.apache.ibatis.io.Resources;
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.IOException;
import java.io.InputStream;
import java.util.List;

public class MyTest {
    @Test
    public void Test() throws IOException {

        //1,使用文件流,读取核心配置文件SqlMapConfig.xml
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2,创建sqlSessionFactory,bean工厂
        SqlSessionFactory factory = new  SqlSessionFactoryBuilder().build(in);
        //3,获取sqlSession
        SqlSession sqlSession = factory.openSession();
        //4,执行sql
        List<Stu> stu = sqlSession.selectList("yyk.getAll");
        stu.forEach(stu1 -> {
            System.out.println(stu1);
        });
        //5,释放资源
        sqlSession.close();
    }
}

 

mapper数据库查询语句映射Java的数据类型:

 

使用Mybatis对数据库进行增删改查

<?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标签是整个文件的标签,用来开始和结束xml文件
    mapper中的属性:namespace:指定命名空间(包名),用来区分不同mapper.xml中相等的id属性
-->
<mapper namespace="yyk">
    <!--  id:通过指定ID来执行数据语句

        返回值的集合时:返回值的类型必须是泛型
          resultType:指定返回值的类型 ,必须是泛型,即一个类的全路径
          parameterType:指定参数类型
    -->
    <select id="getAll" resultType="com.pojo.Stu" >
        select id,name,email,age
        from stu
    </select>

    <!-- 按主键查询   -->
    <select id="getById" parameterType="int" resultType="com.pojo.Stu">
        select id,name,email,age
        from stu
        where id = #{id};
    </select>
    
    <!-- 模糊查询   -->
    <select id="getByName" parameterType="string" resultType="com.pojo.Stu">
        select id,name,email,age
        from stu
        where name like '%${name}%';
    </select>
    
    <!--  增加  -->
    <insert id="insert" parameterType="com.pojo.Stu">
        insert into stu(name,email,age) values (#{name},#{email},#{age})
    </insert>

    <!--  删除学生  -->
    <delete id="delete" parameterType="int">
        delete from stu where id = #{id};
    </delete>

    <!--  修改  -->
    <update id="update" parameterType="com.pojo.Stu" >
        update stu set name = #{name},email = #{email},age = #{age}
        where id = #{id}
    </update>

</mapper>

 

package com.ssm;

import com.pojo.Stu;
import org.apache.ibatis.io.Resources;
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.IOException;
import java.io.InputStream;
import java.util.List;

public class MyTest {
    @Test
    public void TestAll() throws IOException {

        //1,使用文件流,读取核心配置文件SqlMapConfig.xml
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2,创建sqlSessionFactory,bean工厂
        SqlSessionFactory factory = new  SqlSessionFactoryBuilder().build(in);
        //3,获取sqlSession
        SqlSession sqlSession = factory.openSession();
        //4,执行sql;执行mapper的yyk下的sql getAll
        List<Stu> stu = sqlSession.selectList("yyk.getAll");
        stu.forEach(stu1 -> {
            System.out.println(stu1);
        });
        //5,释放资源
        sqlSession.close();
    }

    @Test
    public void testByID() throws IOException {
        //1,读取和兴配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2,创建SessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3,取出sqlsession对象
        SqlSession sqlSession = factory.openSession();
        //4,按主键查询
        Stu stu = sqlSession.selectOne("yyk.getById",1);
        System.out.println(stu);
        //5,关闭sqlSession
        sqlSession.close();
    }

    @Test
    public void testByName() throws IOException {
        //1,读取SqlMapConfig配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2,创建SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3,获取sqlSession对象
        SqlSession sqlSession = factory.openSession();
        //4,执行sql语句
        List<Stu> list = sqlSession.selectList("yyk.getByName","李");
        list.forEach(stu -> System.out.println(stu));
        System.out.println(list.size());
        //5,释放资源
        sqlSession.close();
    }

    @Test
    public void testInsert() throws IOException{
        //1,读取SqlMapConfig配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2,创建SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3,获取sqlSession对象
        SqlSession sqlSession = factory.openSession();
        //4,执行sql语句
        int num = sqlSession.insert("yyk.insert",new Stu("钱六","234@163.com",20));
        //在所有的增删改中,需要手工提交事务
        sqlSession.commit();
        //5,释放资源
        sqlSession.close();
    }

    @Test
    public void testDelete() throws IOException{
        //1,读取SqlMapConfig配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2,创建SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3,获取sqlSession对象
        SqlSession sqlSession = factory.openSession();
        //4,执行sql语句
        int num = sqlSession.delete("yyk.delete",1);
        System.out.println(num);
        //在所有的增删改中,需要手工提交事务
        sqlSession.commit();
        //5,释放资源
        sqlSession.close();
    }

    @Test
    public void testUpdate() throws IOException{
        //1,读取SqlMapConfig配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2,创建SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3,获取sqlSession对象
        SqlSession sqlSession = factory.openSession();
        //4,执行sql语句
        int num = sqlSession.update("yyk.update",new Stu(3,"tt","234@163.com",100));
        System.out.println(num);
        //在所有的增删改中,需要手工提交事务
        sqlSession.commit();
        //5,释放资源
        sqlSession.close();
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到