MyBatis学习-(二)动态代理实现

本文最后更新于:December 3, 2021 pm

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

目录

MyBatis 中文文档:https://mybatis.org/mybatis-3/zh/index.html

1.Dao

1.1 接口

MybatisStudyDao.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.loong.Dao;

import com.loong.test.USER;

import java.util.List;

public interface MybatisStudyDao {

public List<USER> alluser(); //查询
public int inserttest(USER user); //插入

/**
方法名与配置文件中的查询语句的 id 名要一致。
*/
}

1.2 配置文件

MybatisStudyDao.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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.loong.Dao.MybatisStudyDao">

<select id="alluser" resultType="com.loong.test.USER">
select * from test;
</select>
<insert id="inserttest">
insert into test value (#{id},#{username},#{tele});
</insert>
</mapper>

2.utils

myutils.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.loong.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 myutils {
private static SqlSessionFactory factory = null;
static {
String config = "mybatis.xml";
try {
InputStream in = Resources.getResourceAsStream(config);
factory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}

public static SqlSession getSqlSession(){
SqlSession sqlsession = null;
if(factory != null){
sqlsession = factory.openSession();
}
return sqlsession;
}
}

3.实体类

USER.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.loong.test;

public class USER {
private Integer id;
private String username;
private String tele;

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 getTele() {
return tele;
}

public void setTele(String tele) {
this.tele = tele;
}

@Override
public String toString() {
return "USER{" +
"id=" + id +
", username='" + username + '\'' +
", tele='" + tele + '\'' +
'}';
}
}

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.loong;


import com.loong.Dao.MybatisStudyDao;
import com.loong.test.USER;
import com.loong.utils.myutils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.io.IOException;
import java.util.List;

public class inTest {

@Test
public void tsetall(){
SqlSession sqlsession = myutils.getSqlSession();
MybatisStudyDao dao = sqlsession.getMapper(MybatisStudyDao.class);
/**
使用SqlSession.getMapper(dao接口.class) 获取这个dao接口的对象。
*/
List<USER> list = dao.alluser();
for(USER st:list){
System.out.println(st);

}
}
@Test
public void testin(){
SqlSession sqlsession = myutils.getSqlSession();
MybatisStudyDao dao = sqlsession.getMapper(MybatisStudyDao.class);

USER us = new USER();
us.setTele("3423");
us.setUsername("luoyi");
us.setId(34);

int ans = dao.inserttest(us);
sqlsession.commit();
sqlsession.close();
System.out.println(ans);

}

}

4.总结

4.1 动态代理

就是 mybatis 帮你创建 dao 接口的实现类,在实现类中调用 SqlSession 的方法执行 SQL 语句。

4.2 使用方法

  1. 获取 SqlSession 对象,SqlSessionFactory.openSession()
1
SqlSession sqlsession = myutils.getSqlSession();
  1. 使用 getMapper 方法获取某个接口的对象,sqlsession.getMapper(接口.class)
1
MybatisStudyDao dao = sqlsession.getMapper(MybatisStudyDao.class);
  1. 使用 dao 接口的方法,调用方法就执行了 mapper 文件中的 SQL 语句。
1
List<USER> list = dao.alluser();

4.3 要求

  1. dao 接口和 mapper 文件放在一起,同一目录下。
  1. dao 接口和 mapper 文件名称一致。
  1. mapper 文件中的 namespace 的值是 dao 接口的全限定名称。
  1. mapper 文件中的 <select>、<insert>、<update>、<delete> 等的 id 是接口中方法的名称。
  1. dao 接口中不要使用重载方法,不要使用同名的、不同参数的方法。

本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/3686500164.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!