目录
MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
官网:https://mybatis.org/mybatis-3/zh/index.html
持久层: 负责将数据到保存到数据库的那一层代码。 以后开发我们会将操作数据库的Java代码作为持久层。而Mybatis就是对jdbc代码进行了封装。
JavaEE三层架构:表现层、业务层、持久层 。
框架: 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展
1:硬编码 注册驱动、获取连:的代码有很多字符串,而这些是连接数据库的四个基本信息,以后如果要将Mysql数据库换成其他的关系型 数据库的话,这四个地方都需要修改,如果放在此处就意味着要修改我们的源代码。 SQL语句如果表结构发生变化,SQL语句就要进行更改。这也不方便后期的维护
2: 操作繁琐 手动设置参数 手动封装结果集
1创建stu表,添加数据
2创建模板,导入坐标
这里我是用的Maven导入(编写pom.xml文件)
- <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.0modelVersion>
-
- <groupId>org.examplegroupId>
- <artifactId>MyBatis_domeartifactId>
- <version>1.0-SNAPSHOTversion>
-
- <properties>
- <maven.compiler.source>8maven.compiler.source>
- <maven.compiler.target>8maven.compiler.target>
- properties>
-
- <dependencies>
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatisartifactId>
- <version>3.5.5version>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>5.1.46version>
- dependency>
-
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>4.13version>
- <scope>testscope>
- dependency>
-
-
-
-
- dependencies>
-
-
- project>
3 编写 Mybatis核心配置文件 (stuMapper.xml)
- 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.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql:///school?useSSL=false"/>
- <property name="username" value="root"/>
- <property name="password" value="666"/>
- dataSource>
- environment>
- environments>
- <mappers>
-
- <mapper resource="stuMapper.xml"/>
- mappers>
- configuration>
4编写 sql映射文件(mybatis-config.xml) 统一管理sql语句,解决硬编码问题
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="test">
- <select id="selectAll" resultType="com.chen.pojo.Student">
- select * from stu;
- select>
-
- mapper>
创建一个学生实体类
- package com.chen.pojo;
-
- public class Student {
- private int id;
- private String name;
- private String className;
-
- public Student(int id, String name, String className) {
- this.id = id;
- this.name = name;
- this.className = className;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getClassName() {
- return className;
- }
-
- public void setClassName(String className) {
- this.className = className;
- }
-
- @Override
- public String toString() {
- return "Student{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", className='" + className + '\'' +
- '}';
- }
- }
-
5编码
加载核心配置文件 获取SqlSessionFactory
获取SqlSession 对象,执行SQL语句
释放资源
- import com.chen.pojo.Student;
- 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.InputStream;
- import java.util.List;
-
- public class D1Test {
- public static void main(String[] args) throws Exception{
- //加载mybatis核心配置文件,获取sqlSessionFactory
- String resource = "mybatis-config.xml";
- InputStream inputStream = Resources.getResourceAsStream(resource);
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- //获取sqlSession对象,用他执行sql
- SqlSession sqlSession=sqlSessionFactory.openSession();
- //执行sql
- List
students =sqlSession.selectList("test.selectAll");//这里的参数为sql映射文件中namespace的值和id的值 - System.out.println(students);
- sqlSession.close();//释放资源
- }
-
- }
-