一: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 时,直接根据参数进行查询。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。