[TOC]
环境
重回Java系列学习,不易呀!
IDEA 2020.2
Maven 3.6x
Window 10
PHP study (在Windows提供服务环境(mysql5.7))
参考:https://mybatis.org/mybatis-3/zh/getting-started.html(官方文档)
视频:B站狂神
没有人是天生的大师,只有不断的内卷才能够成为一代宗师!-- Huterox(请叫我”卷神“)
何为Mybatis,一句话总结用于操作数据库的Model,类似于Django当中的ORM,不过功能据我目前体验似乎没有ORM那么丝滑,而且说句大实话 Java 的配置实在是过于冗余,说句很难听的话在开始项目的前十分钟里面由五分钟是在准备项目配置,确实对于Django来说就是离谱。但是没办法目前两条路我都得走走,前几天也是细致地了解了一下Spring全家桶之间的发展与应用,确实不得不说Java的这一套有点东西。不过目前还是得打一打基础,先走一走SSM,也是为了以后能够将White Hole社区进行重构!这阶段的学习应该不会花费太多的时间,在学习过程中我也将不断对比两个系列之间的区别和我最直观的感受,以后再有知乎开杠的时候鄙人就有机会提出综合客观的建议了。
准备阶段
一. 建表
这里的话我们直接在Dos里面建表,推荐工具 mycli 这玩意是我在玩python的时候就最喜欢的数据库辅助工具,安装也很简单
pip3 install mycli
下面创建 一张学生表
这个工具是有命令提示的不用担心硬怼sql语句。
二.进入IDEA 创建Maven项目
这里创建的话我还是参考了狂神的创建结构也就是创建了一个maven项目作为父工程,在里面创建子工程。
导入依赖
这里导入三个依赖
mysql 驱动
mybatis
junit
这里给出我的父工程下的配置文件
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
配置mybatis依赖
这个主要是让mybatis和数据库打交道的关键,这个和我们ORM里面要注册有点像,但是的话显然Django要简单的多。
关于配置文件的命名这个要求不大,不过官方文档也是这样命名的。
我们接下来先看到当前的配置文件
<?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/huterox?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="Huterox"/>
<property name="password" value="yourpassword"/>
</dataSource>
</environment>
</environments>
<!-- <mappers>-->
<!-- <mapper resource="org/mybatis/example/BlogMapper.xml"/>-->
<!-- </mappers>-->
</configuration>
上面填写了我的数据库名,用户名。
那么接下来就要创建方法来读取我们的配置文件(突然返现通过配置文件或者注解实现的AOP好垃圾,python装饰器加字典文件了解一下直接上手AOP模式哪有那么麻烦)
utls里面放置了我们的工具类
工具类代码如下
这是固定的写法,官方提供了两个方法一个就是用配置文件,还有一个是纯手撸。
我选择前者,简单呀!而且视频也是这个。
package com.huterox.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 ResourseUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "src/main/resources/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取sqlsession这玩意类似pymysql就是具体帮助我们操作数据库的玩意
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
开始编写代码
这边要用的话还是要和Django一样创建module不过在这里我们要分个层
1.实体类
2.Dao接口
3.接口实现类
不愧是个工程语言就是要规范(简称”屁事多“)当然不要着急也就是这块恶心一点就后面还是一样直接怼代码
一 实体类,我们有创建了一个包pojo
package com.huterox.pojo;
//实体类,这边的变量和字段保持一致
public class Student {
private int id;
private String name;
private double height;
public Student() {
}
public Student(int id, String name, double height) {
this.id = id;
this.name = name;
this.height = height;
}
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 double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", height=" + height +
'}';
}
}
二 在Dao编写接口和配置文件
首先是编写接口,这个接口的目的是说我们要怎么操作数据库,这个和我们的Django的ORM不一样,我们ORM已经实现了很多方法,就例如我们在Django这样搞
Student.objects.all()
我们列举出所有的对象(在数据库里面)
那么现在在我们mybatis里面我们需要自己手动实现这一过程,也就是我们的铺垫其实是为了手动实现对应的操作。也就是说我们甚至还要手写sql语句(这里目前我就有点担心sql注入了,后面有时间我觉得有必要看看mybatis对防注入方面的工作了,ORM这块的我是看过的,做的很不错,基本上针对注入有很高的防护)
接口类:
package com.huterox.dao;
import com.huterox.pojo.Student;
import java.util.List;
//这部分主要就是操作我们的实体类的接口
public interface StudentMapper {
List<Student> getStudentList();
}
配置文件我们直接在当前目录创建
<?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.huterox.dao.StudentMapper">
<!--sql-->
<select id="getStudnetList" resultType="com.huterox.pojo.Student">
select * from huterox.student
</select>
</mapper>
这里的话说句大实话有点那啥了,还要手写sql语句,这个和ORM完全不在一个量级,当然顺便复习sql也不错!
测试
package com.huterox.dao;
import com.huterox.pojo.Student;
import com.huterox.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class StudentMapperTest {
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> studnetList = mapper.getStudnetList();
for(Student student:studnetList){
System.out.println(student);
}
sqlSession.close();
}
}
这个没啥好说的。
就这样吧,目前给我的体验就是配置麻烦手写sql如果按照目前的写法很难保证开发效率和安全!
说句实话难怪要搞个springboot,就这样搞配置真的相当麻烦,第一次听说还会因为配置导致程序异常的框架,笑到了,当然这也没啥只是做个前期了解。后面的增删查改还是老样子。