## 1.首先MyBatis的介绍
MyBatis 本是apache的一个[开源项目](https://baike.baidu.com/item/开源项目/3406069)iBatis, 2010年这个[项目](https://baike.baidu.com/item/项目/477803)由apache software foundation 迁移到了[google code](https://baike.baidu.com/item/google code/2346604),并且改名为MyBatis 。2013年11月迁移到[Github](https://baike.baidu.com/item/Github/10145341)。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的[持久层](https://baike.baidu.com/item/持久层/3584971)框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
## 2.MyBatis的增删改查
### (1)建moven文件项目
## (2)导入依赖到pom.xml中,module和项目中都要导入
```java
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>
```
## (3)连接数据库的配置文件
```xml
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/jdbc_date?userSSL=true& userUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/jsh/dao/UserDao1.xml"></mapper> </mappers></configuration>
```
## (4)测试是否连接数据库
然后点击apply
成功连接后会显示数据库数据
## (5)写与数据库对应表的构造方法
```java
package com.jsh.dao;
public class User { int id;
String status;
String name;
String money;
public String getMoney() {
return money; }
public void setMoney(String money) { this.money = money; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public User(){ }
public User(int id,String status,String name,String money){ this.id=id; this.money=money; this.name=name; this.status=status; }
@Override public String toString() { return "User{" + "id=" + id + ", status='" + status + '\'' + ", name='" + name + '\'' + ", money='" + money + '\'' + '}'; }}
```
## (6)写一个工具类MybatisUtil
```java
package com.jsh.utils;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;public class MybatisUtil { private static SqlSessionFactory sqlSessionFactory; static { try { //使用mybatis第一步:获取sqlSessionFactory对象 String resource = "Mybaties_01.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 // 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); }}
```
## (7)写一个userDao的接口,接口中对应方法,再新建一个xml文件
```java
package com.jsh.dao;import java.util.List;public interface UserDao { //查询所有信息 List<User> getUserList(); //根据ID查询 User getByIdUserList(int id); //add一个用户 int addUserList(User user); //修改数据 int updateUserList(User user); //删除数据根据id int deleteUserList(int id);}
```
xml文件
```xml
<?xml version="1.0" encoding="UTF8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace绑定一个对应的mapper接口--><mapper namespace="com.jsh.dao.UserDao"> <!--id方法名--> <select id="getUserList" resultType="com.jsh.dao.User"> select * from jdbc_date.user </select> <select id="getByIdUserList" resultType="com.jsh.dao.User" parameterType="int"> select * from jdbc_date.user where id= #{id} </select> <insert id="addUserList" parameterType="com.jsh.dao.User"> insert into jdbc_date.user (id, status, money, name) VALUES (#{id},#{status},#{money},#{name}) </insert> <delete id="deleteUserList" parameterType="com.jsh.dao.User"> delete from jdbc_date.user where id=#{id} </delete> <update id="updateUserList" parameterType="com.jsh.dao.User"> update jdbc_date.user set status=#{status},money=#{money},name=#{name} where id=#{id} </update></mapper>
```
## (8)增删改查的实现代码
1. package com.jsh.dao;import com.jsh.utils.MybatisUtil;import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import java.util.List;
public class UserDaoTest{
//打印表的内容
@Test public void Test(){
// 获得sqlsession对象
SqlSession sqlSession = MybatisUtil.getSqlSession();
// 1.执行 getmapper
UserDao userDao = sqlSession.getMapper(UserDao.class); List<User> userList = userDao.getUserList(); // method 2// List<User> userList = sqlSession.selectList("com.hou.dao.UserDao.getUserList"); for(User user: userList){ System.out.println(user); } //关闭 sqlSession.close(); }
//通过id查询
@Test public void getByIdUserList(){ SqlSession s=MybatisUtil.getSqlSession(); UserDao userDao = s.getMapper(UserDao.class); User f= userDao.getByIdUserList(1); System.out.println(f); s.close(); }
//增加的代码块
2. @Test public void addUserList(){ SqlSession sqlSession=MybatisUtil.getSqlSession(); UserDao userDao=sqlSession.getMapper(UserDao.class); int res=userDao.addUserList(new User(1,"冻结","小明","14")); if(res>0){ System.out.println("插入成功"); } sqlSession.commit(); sqlSession.close(); }
//删除
3. @Test public void deleteUserList(){ SqlSession sqlSession=MybatisUtil.getSqlSession(); UserDao userDao=sqlSession.getMapper(UserDao.class); int res=userDao.deleteUserList(1); if (res>0){ System.out.println("删除成功"); } sqlSession.commit(); sqlSession.close(); }
//改
- 4. @Test public void updateUserList(){ SqlSession sqlSession=MybatisUtil.getSqlSession(); UserDao userDao=sqlSession.getMapper(UserDao.class); int res=userDao.updateUserList(new User(2,"解除","张三","15")); if (res>0){ System.out.println("修改成功"); } sqlSession.commit(); sqlSession.close(); }}