文章目录
前言
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
一、JDBC到Mybatis的改进
1.JDBC编程的步骤
1) 加载数据库驱动
2) 创建并获取数据库链接
3) 创建jdbc statement对象
4) 设置sql语句
5) 设置sql语句中的参数(使用preparedStatement)
6) 通过statement执行sql并获取结果
7) 对sql执行结果进行解析处理
8) 释放资源(resultSet、preparedstatement、connection)
2.Mybatis对JDBC的改进
1) 使用数据库连接池来解决资源浪费
JDBC方式的数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,而使用数据库连接池可以反复利用已经建立的连接去访问数据库了。减少连接的开启和关闭的时间。
2) 使用XML配置文件封装SQL语句
Mybatis将SQL语句写在配置文件中通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。这样当需要更改SQL时,只需要更改配置文件。(不影响接口的情况下)
3) 通过Mapped Statement对sql执行输出结果进行定义
Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
Mybatis架构:
二、IDEA下的Mybatis使用
1.新建Spring-Mybatis项目
1) File–>New–>Project
2) 编辑项目信息
java版本选择version 8
3) 选择依赖Dependencies
首先选择Web,勾选Spring Web
然后点击SQL,勾选Spring Data JDBC和Mybatis Framework
选择完成后点击next
4) 设置项目名称和保存位置,点击Finish完成项目创建
5) 新建四个包分别为bean、controller、mapper、service。
**6)**在对应的包中创建类和接口如下所示:
2.配置代码
Account:
package com.example.springboot.bean;
public class Account {
String no;
String name;
String password;
String root;
public void setNo(String no) {
this.no = no;
}
public void setName(String name) {
this.name = name;
}
public void setPassword(String password) {
this.password = password;
}
public void setRoot(String root) {
this.root = root;
}
public String getRoot() {
return root;
}
public String getPassword() {
return password;
}
public String getName() {
return name;
}
public String getNo() {
return no;
}
@Override
public String toString() {
return "Account{" +
"no='" + no + '\'' +
", name='" + name + '\'' +
", password='" + password + '\'' +
", root='" + root + '\'' +
'}';
}
}
DataBaseLink:
package com.example.springboot.bean;
import java.sql.Connection;
import java.sql.DriverManager;
public class DataBaseLink {
static public Connection getConn() {
String serverName="com.mysql.jdbc.Driver";
String dbURL="jdbc:mysql://localhost:3306/studentadmin";
String userName="用户名";
String userPwd="数据库连接密码";
try {
Class.forName(serverName);
Connection tmp = DriverManager.getConnection(dbURL, userName, userPwd);
System.out.println("成功连接数据库");
return tmp;
}
catch(Exception e) {
System.out.println("连接数据库失败");
System.out.println(e);
}
return null;
}
}
AccountController:
package com.example.springboot.controller;
import com.example.springboot.bean.Account;
import com.example.springboot.bean.DataBaseLink;
import com.example.springboot.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@RestController
public class AccountController {
@Autowired
private AccountService accountService;
@ResponseBody
@RequestMapping(value = "/get",method = RequestMethod.GET)
public List<Account> get(){
Connection conn= DataBaseLink.getConn();
if(conn!=null){
String sql="select name from account";
try {
PreparedStatement pst = conn.prepareStatement(sql);
ResultSet results = pst.executeQuery();
while (results.next()){
System.out.println(results.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return accountService.getAllAccounts();
}
}
AccountMapper:
package com.example.springboot.mapper;
import com.example.springboot.bean.Account;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface AccountMapper {
List<Account> getAllAccounts();
}
AccountService:
package com.example.springboot.service;
import com.example.springboot.bean.Account;
import com.example.springboot.mapper.AccountMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class AccountService {
@Autowired
AccountMapper accountMapper;
public List<Account> getAllAccounts(){
return accountMapper.getAllAccounts();
}
}
另外需要在resources文件下新建文件mapper用于存放sql语句的xml文件
AccountMapper.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.example.springboot.mapper.AccountMapper">
<select id="getAllAccounts" resultType="com.example.springboot.bean.Account">
select * from user
</select>
</mapper>
接着配置文件
输入
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/studentAdmin?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT&useSSL=false
spring.datasource.username=用户名
spring.datasource.password=数据库连接密码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis.typeAliasesPackage=com.example.springboot.bean
mybatis.mapperLocations=classpath:mapper/*.xml
server.port=8080
3.测试
1) 目标数据库
2) 连接测试
后台:
关于ssl 服务错误
Establishing SSL connection without server’s identity verification is not recommended.
在连接数据库的地址中加入&ssl=false即可
ssl连接问题解决方式
浏览器输入http://localhost:8080/get
访问正常
总结
从JDBC到Mybatis,通过将代码中的SQL语句封装在外部的xml文件当中,简化了需要修改java源代码的麻烦步骤,并且更加高效的利用了数据库连接的资源。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息。
参考
https://blog.csdn.net/qq_47281915/article/details/120782706
https://blog.csdn.net/u010176014/article/details/52028854