一:Mybatis

1.什么是Mybatis
它是一款半自动的ORM(Object Relation Mapping,对象关系映射,对象指的是Java对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在Java对象和数据库的关系模型之间建立一种对应关系,)持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低
2.mybatis快速进行持久层的开发

编写全局配置文件
编写mapper映射文件
加载全局配置文件,生成SqlSessionFactory
创建SqlSession,调用mapper映射文件中的SQL语句来执行CRUD操作

3.Mybatis的作用

Mybatis就是帮助程序员将数据存取到数据库里面。
传统的jdbc操作,有很多重复代码块,比如:数据取出时的封装,数据库的建立连接等等, 通过框架可以减少重复代码,提高开发效率 
MyBatis 是一个半自动化的ORM框架 (Object     Relationship Mapping)对象关系映射
所有的事情,不用Mybatis依旧可以做到,只是用了它,会更加方便更加简单,开发更快速  

4.MyBatis的优点

简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件就可以了,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
提供xml标签,支持编写动态sql。
现在主流使用方法 

5.创建第一个MyBatis
(1)创建一个student表

create table student(
id int not null,
score int,
name varchar(255),
age int,
grade int
)

(2)常见maven项目,导入相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <repositories>
        <repository>
            <id>aliyun</id>
            <name>aliyun</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
    </repositories>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.31</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>sqljdbc4</artifactId>
            <version>4.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>           
</project>

(2)创建一个Student类

public class Student {
    private Integer id;
    private String name;
    private Integer score;
    private Integer age;
    private Integer gender;
    //getter,setter
}

(3)文件配置:mybatis-config

<?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>
    <!-- 配置文件信息 -->
    <properties resource="mybatis-config.xml"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 从配置文件中加载属性 -->
                <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
                <property name="url" value="数据库"/>
                <property name="username" value="名"/>
                <property name="password" value="密码"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 加载前面编写的SQL语句的文件 -->
        <mapper resource="mapper.xml"/>
    </mappers>
</configuration>

(4)mapper.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="org.example.base.StudentDao">
    <select id="findAll" resultType="org.example.base.Student">
        SELECT * FROM Student;
    </select>

    <insert id="insert" parameterType="org.example.base.Student">
        INSERT INTO Student (id,name,score,age,gender) VALUES (1,#{name},#{score},#{age},#{gender});
    </insert>

    <delete id="delete" parameterType="int">
        DELETE FROM Student WHERE id = #{id};
    </delete>
</mapper>

(5)StudentDao.java

package org.example.base;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class StudentDao {
    private SqlSessionFactory sqlSessionFactory;

public StudentDao(String configPath) throws IOException {
    InputStream inputStream = Resources.getResourceAsStream(configPath);
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}

public List<Student> findAll() {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    List<Student> studentList = sqlSession.selectList("findAll");
    sqlSession.close();
    return studentList;
}
public int addStudent(Student student) {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    int rowsAffected = sqlSession.insert("insert", student);
    sqlSession.commit();
    sqlSession.close();
    return rowsAffected;
}

public int deleteStudent(int id) {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    int rowsAffected = sqlSession.delete("delete",id);
    sqlSession.commit();
    sqlSession.close();
    return rowsAffected;
}
}

(6)测试

import org.example.base.Student;
import org.example.base.StudentDao;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.List;
public class SimpleTest {
    private StudentDao studentDao;

    @Before
    public void init() throws IOException {
        studentDao = new StudentDao("mybatis-config.xml");
    }

    @Test
    public void insertTest() {
        Student student = new Student();
//        student.setId(1);
        student.setName("yogurt");
        student.setAge(24);
        student.setGender(1);
        student.setScore(100);
        studentDao.addStudent(student);
    }

    @Test
    public void findAllTest() {
        List<Student> all = studentDao.findAll();
        all.forEach(System.out::println);
    }
}

(7)测试结果

二:Druid

1.Druid是一个数据库连接池
2.Druid 核心主要包括三部分

基于Filter-Chain模式的插件体系。
DruidDataSource 高效可管理的数据库连接池。
SQLParser

3.Druid的主要功能如下:

是一个高效、功能强大、可扩展性好的数据库连接池。
可以监控数据库访问性能。
数据库密码加密
获得SQL执行日志
扩展JDBC

三:PageHelper

1.PageHelper介绍
PageHelper是Mybatis的一个分页插件,PageHelper的使用很简单,只需要在Maven中添加pagehelper这个依赖就可以了

<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper-spring-boot-    starter</artifactId>
   <version>1.2.3</version>
</dependency>

2.添加配置
(1)在application.properties或application.yml添加

pagehelper:
helperDialect: mysql
offsetAsPageNum: true
rowBoundsWithCount: true
reasonable: false

(2)在mybatis.xml配置中添加

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <!-- 扫描mapping.xml文件 -->
    <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
<!-- 配置分页插件 -->
     <property name="plugins">
        <array>
          <bean class="com.github.pagehelper.PageHelper">
            <property name="properties">
              <value>
                helperDialect=mysql
                offsetAsPageNum=true
                rowBoundsWithCount=true
                reasonable=false
              </value>
            </property>
          </bean>
        </array>
      </property>
  </bean>

(3)在代码中添加,使用@Bean注解在启动程序的时候初始化。

@Bean
public PageHelper pageHelper(){
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
//数据库
properties.setProperty("helperDialect", "mysql");
//是否将参数offset作为PageNum使用
properties.setProperty("offsetAsPageNum", "true");
//是否进行count查询
properties.setProperty("rowBoundsWithCount", "true");
//是否分页合理化
properties.setProperty("reasonable", "false");
pageHelper.setProperties(properties);
}

注:reasonable参数,表示分页合理化,默认值为false。如果该参数设置为 true 时,pageNum<=0 时会查询第一页,pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。


茶色岛
62 声望1 粉丝

« 上一篇
Spring基础
下一篇 »
SpringBoot项目