书写该文档主要是为了给自己的学习路上一点总结,不然每次都是光看,看完了就忘。
以下均是自己的理解和思考,水平有限,不保证完全正确,仅供参考
跟随视频学习地址:https://www.bilibili.com/video/av69742084
什么是mybatis
mybatis的属于持久层的框架,主要作用就是代替原来的jdbc连接数据库,让开发者能够专注于sql的描写,而不需要考虑如何每次连接数据库时繁琐的过程,减少代码量。
运行mybatis需要准备什么
mybatis运行最基础的就是需要相关的jar包。我们可以先在idea中新建一个maven项目
,在视频里老师教了一个有用的方法:就是将新建的maven项目中的src文件夹删除,然后在maven项目上右键新建一个moudle,然后这个moudle属于原有项目的子项目。可以直接复用父maven项目的pom.xml,而不需要再次在子项目的pom文件里面再写一遍相关的dependency。
首先我们在最外层的pom.xml里面加上以下的maven代码
<dependencies>
<!--postgres驱动-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.10</version>
</dependency>
<!--mybatis驱动-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<!--junit包-->
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
以上我们就已经将mabatis的相关依赖添加完毕,等maven自动下载相关jar包。
接下来我们开始写一个小入门案例:
首先我们在自己的数据库中新建一个user1表(至于为什么不用user作为名字。我在实际敲得时候发现postgres数据库的select * from user语句搜出来的是当前数据库的用户名,非user表的数据,有点费解。估计user是关键字的缘故,遂将表名改成user1)该表有三个字段,如图:
== 注意表的字段名和接下来新建的pojo类的私有属性名必须相同==
接下来我们在src.main.java下新建一个文件夹:pojo类,内容如下:
package pojo;
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
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 String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
然后我们按照mybatis的官方文档获取一个SqlSessionFactory对象。
步骤是:我们现在java文件夹新家一个utils的文件夹,然后在utils的文件夹里面新建一个类,类名叫做MybatisUtils.这个类的作用是返回mybatis的SQLSessionFactory返回的sqlSession类,这段是mybatis官方提供的方法,固定套路
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//使用mybatis第一步获取SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream;
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
然后在resource文件下新建一个xml文件。命名为:mybatis-config.xml
<?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="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://127.0.0.1:5434/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="postgres"/>
<property name="password" value="951024"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="dao/userMapper.xml"/>
</mappers>
</configuration>
来解析一下这个文件,其中需要自己修改的是红框部分
上面的红框是写你的jdbc的信息,也就是一次性配置一下你的jdbc文件
然后,下面的框是写的你Mapper.xml文件位置,注意,mapper resource文件路径是用/隔开,而driver的路径是用".“隔开,这点新手一定要注意,文件路径用/隔开,java类的结构化区分用”."
接着在main->java下新建一个dao文件夹(其实也就是mapper文件夹,这里为dao是为了与之前学习的jdbc连接学习,就先设置的是dao)
dao文件夹下先新建一个dao接口,新建UserDao接口,内容为:
public interface UserDao {
List<User> getUserList();
}
在同样的文件夹下面新建一个userMapper.xml这个xml需要加载到mybatis-config.xml中也就是我上图的第二个框的位置。
userMapper.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则是接口的所在路径-->
<mapper namespace="dao.UserDao">
<!--查询语句,select表明这是一个查询语句,然后id则是接口中的方法名,
resultType则是对应的pojo类,这里注意一点,pojo类的属性值要和数据库表中的字段名相同-->
<select id="getUserList" resultType="pojo.User">
select * from user1
</select>
</mapper>
然后在test—>java->下新建一个dao文件夹,主要是为了保证test中的文件位置和main中的位置保持一致,避免出问题,我们新建一个测试类UserDaoTest
内容为:
public class UserDaoTest {
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userList = mapper.getUserList();
for(User user:userList){
System.out.println(user);
}
sqlSession.close();
}
}
当点击运行的时候会报一个这个错误:
主要是maven的一个问题,maven规定约定大于配置,他在test文件夹不会对应生成Usermapper.xml文件夹从而导致文件缺失导致错误。
解决方法在pom.xml文件夹里面加上
<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执行sql查询成功。