MyBatis简介
- MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
- MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
- MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
官网
使用数据库专门存放数据
我们在开发过程中要把数据和代码分离出来,数据使用数据库进行存放。
使用数据库的好处:
应用与数据分离
便于数据的集中管理
利于应用程序的开发和维护
这里我们主要使用数据库的增删改查操作:
1.增
INSERT INTO 表名("属性名1","属性名2","属性名3","属性名4") VALUES("实例1","实例2","实例3","实例4");
2.删
DELETE FROM 表名 WHERE 条件;
3.改
UPDATE 表名 SET "属性名"="实例" WHERE 条件;
4.查
SELECT * FROM 表名 WHERE 条件;
JAVA使用JDBC连接数据库
JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。
连接不同数据库时使用数据库厂商提供的驱动:
使用JDBC简单操作数据库
步骤1:使用Navicat Premium 新建数据库创建t_user表
步骤2:在EClipse中新建Maven文件
说明:
数据库驱动其实就是对JDBC规范的实现,就是一个jar包。
通过Maven依赖引入
注意驱动要和数据库版本匹配
MySQL数据库要5.7以上才能用8.0的依赖
如果你的MySQL数据库5.7以下,请使用5.x的驱动版本
在pom.xml配置文件中加入数据库驱动
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
</dependencies>
步骤3:编写JAVABean类User.java
package com.test.bean;
public class User {
private Integer id;
private String username;
private String password;
private String realName;
private String phone;
private String email;
private Integer status;
private String tx;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getTx() {
return tx;
}
public void setTx(String tx) {
this.tx = tx;
}
}
步骤3:编写JDBC类UserJDBC.java
package com.test.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import com.test.bean.User;
public class UserJDBC {
public static void main(String[] args) throws Exception {
UserJDBC userjdbc = new UserJDBC();
User user = userjdbc.getUserById(2);
System.out.println("查询到该用户的用户名为:" + user.getUsername());
}
public User getUserById(Integer id) throws Exception {
//1、导入驱动jar包
//2、注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3、获取数据库的连接对象
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/user", "root", "123456");
//4、定义sql语句
String sql = "select * from t_user where id=" + id;
//5、获取执行sql语句的对象
Statement stat = con.createStatement();
//6、执行sql并接收返回结果
ResultSet rs = stat.executeQuery(sql);
//7、处理结果
User user = null;
if(rs.next()) {
user = new User();
user.setId(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
user.setRealName(rs.getString(4));
}
//8、释放资源
stat.close();
con.close();
return user;
}
}
运行结果:
简单的操作JDBC实现去获取数据库数据的操作我们发现JDBC八股文的缺点非常明显:
抽象程度不够,编程比较麻烦。 JDBC比较死板工,当数据库的属性名有几百个时,需要也大量相同的下列代码,工作量非常的大。
使用MyBatis
MyBatis可以解决JDBC的弊端,以下代码MyBatis仅仅使用两行代码就可以搞定。
user = new User();
user.setId(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
user.setRealName(rs.getString(4));
MyBatis工作流
MyBatis工作流1:
MyBatis工作流2:
使用MyBatis简单操作数据库
- 创建新的Maven项目MybatisTest
- 在pom.xml引入Mybatis依赖
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<!-- Mybatis的依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
</dependencies>
- 增加主配置文件mybatis-config.xml切换到source模式加入代码
<?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>
<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://localhost:3306/user"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 这里要声明一下我们自定义的DAO类,让Mybatis知道这个类的存在 -->
<mapper class="com.test.dao.UserDao"/>
</mappers>
</configuration>
- 编写用户表对应的实体类User.java
package com.test.bean;
public class User {
private Integer id;
private String username;
private String password;
private String realName;
private String phone;
private String email;
private Integer status;
private String tx;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getTx() {
return tx;
}
public void setTx(String tx) {
this.tx = tx;
}
}
- 数据操作对象 UserDao.java
package com.test.dao;
import org.apache.ibatis.annotations.Select;
import com.test.bean.User;
/**
* 注意这里是一个接口(interface),Mybatis会利用动态代理技术在运行过程中动态生成这个类的实现类
*/
public interface UserDao {
/**
* 根据id查询用户信息. @Select 给这个方法绑定了SQL语句
* @param id 查询的参数,这个id的内容会自动放到SQL中的占位符#{id}中
* @return 数据库查询会返回一行数据,Mybatis会自动映射成一个User对象
*/
@Select("select * from t_user where id=#{id}")
public User getUserById(Integer id);
}
- 测试类 MybatisTest.java
package com.test.dao;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.test.bean.User;
public class MybatisTest {
public static void main(String[] args) {
//读取配置文件
InputStream inputStream = MybatisTest.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
//根据配置文件创建SqlSessionFactory对象,这个相当于JDBC中的数据库连接
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建一个数据库会话,通过会话可以执行SQL
SqlSession session = sqlSessionFactory.openSession();
//通过会话获取User表的数据操作对象
UserDao dao = session.getMapper(UserDao.class); //动态代理
//以下是根据业务需要进行数据库操作,这里查询了id为1的用户信息
User zs = dao.getUserById(2);
System.out.println(zs.getUsername() + ":" + zs.getPhone());
}
}
运行结果: