Mybatis笔记(一):第一个Mybatis程序
时间:2021/10/11
本文是学习了b站狂神老师的视频后的一个总结,总结了一下编写一个mybatis项目所需的基本流程和可能遇到的一些bug。
首先展示一下项目的整体结构,如下图:
然后项目的具体流程如下所示:
一.创建数据库和相应的表
这里我使用的mysql,创建了一个mybatis数据库,数据库中有一个user表,表中插入了两条记录。
二.在maven项目的配置文件中插入依赖
这个项目中使用的依赖主要有mysql驱动、mybatis和junit。具体配置代码如下:
1 <!--导入依赖--> 2 <dependencies> 3 <!--mysql驱动--> 4 <dependency> 5 <groupId>mysql</groupId> 6 <artifactId>mysql-connector-java</artifactId> 7 <version>5.1.46</version> 8 </dependency> 9 <!--mybatis--> 10 <dependency> 11 <groupId>org.mybatis</groupId> 12 <artifactId>mybatis</artifactId> 13 <version>3.5.6</version> 14 </dependency> 15 <!--junit--> 16 <dependency> 17 <groupId>junit</groupId> 18 <artifactId>junit</artifactId> 19 <version>4.13.1</version> 20 <scope>test</scope> 21 </dependency> 22 23 </dependencies>
三.编写mysql配置文件
在写url时要注意后面的参数,比如时区什么的。
1 <?xml version="1.0" encoding="UTF8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <environments default="development"> 7 <environment id="development"> 8 <transactionManager type="JDBC"/> 9 <dataSource type="POOLED"> 10 <property name="driver" value="com.mysql.jdbc.Driver"/> 11 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT"/> 12 <property name="username" value="root"/> 13 <property name="password" value="123456789.a"/> 14 </dataSource> 15 </environment> 16 </environments> 17 18 <mappers> 19 <mapper resource="bupt/machi/dao/UserMapper.xml"/> 20 </mappers> 21 </configuration>
四.编写获取SqlSession对象的工具类
这段代码首先要读取mysql配置文件,然后通过输入流获取到SqlSessionFactory对象,最后获取SqlSession对象。
1 package bupt.machi.utils; 2 3 import org.apache.ibatis.io.Resources; 4 import org.apache.ibatis.session.SqlSession; 5 import org.apache.ibatis.session.SqlSessionFactory; 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 7 8 import java.io.IOException; 9 import java.io.InputStream; 10 11 //mybatis工具类,返回一个SqlSession对象 12 public class MybatisUtils { 13 14 private static SqlSessionFactory sqlSessionFactory; 15 16 static{ 17 try{ 18 String resource = "mybatis_config.xml"; 19 InputStream inputStream = Resources.getResourceAsStream(resource); 20 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 21 }catch (IOException e){ 22 e.printStackTrace(); 23 } 24 } 25 26 public static SqlSession getSqlSession(){ 27 //获取SqlSession对象 28 return sqlSessionFactory.openSession(); 29 } 30 }
五.编写实体类
这里编写一个User实体类,属性必须与数据库中属性一一对应。
1 package bupt.machi.pojo; 2 3 //实体类 4 public class User { 5 6 private int id; 7 private String name; 8 private String pwd; 9 10 public User(){ 11 12 } 13 14 public User(int id, String name, String pwd){ 15 this.id = id; 16 this.name = name; 17 this.pwd = pwd; 18 } 19 20 public int getId(){ 21 return id; 22 } 23 24 public String getName() { 25 return name; 26 } 27 28 public String getPwd(){ 29 return pwd; 30 } 31 32 public void setId(int id){ 33 this.id = id; 34 } 35 36 public void setName(String name){ 37 this.name = name; 38 } 39 40 public void setPwd(String pwd){ 41 this.pwd = pwd; 42 } 43 44 @Override 45 public String toString(){ 46 return "User{" + "id=" + id + ",name=" + name + ",pwd=" + pwd + "}"; 47 } 48 }
六.编写dao/mapper接口
1 package bupt.machi.dao; 2 3 import bupt.machi.pojo.User; 4 5 import java.util.List; 6 7 public interface UserDao { 8 List<User> getUserList(); 9 }
七.编写sql操作的配置文件
该文件起到了dao/mapper接口实现类的作用。
1 <?xml version="1.0" encoding="UTF8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!--绑定一个Dao接口,使用xml文件代替之前的实现类--> 6 <mapper namespace="bupt.machi.dao.UserDao"> 7 <!--id对应方法名字--> 8 <select id="getUserList" resultType="bupt.machi.pojo.User"> 9 select * from mybatis.user 10 </select> 11 </mapper>
这里要注意resultType中写的是范型中的类型。
八.编写测试类
要注意这里测试类的路径要与被测试类的路径相同,最后要记得关闭SqlSession对象。
1 package bupt.machi.dao; 2 3 import bupt.machi.pojo.User; 4 import bupt.machi.utils.MybatisUtils; 5 import org.apache.ibatis.session.SqlSession; 6 import org.junit.Test; 7 8 import java.util.List; 9 10 public class UserDaoTest { 11 12 @Test 13 public void test(){ 14 //获取SqlSession对象 15 SqlSession sqlSession = MybatisUtils.getSqlSession(); 16 17 UserDao userDao = sqlSession.getMapper(UserDao.class); 18 List<User> userList = userDao.getUserList(); 19 20 for (User user : userList) { 21 System.out.println(user); 22 } 23 24 sqlSession.close(); 25 } 26 }
九.可能出现的bug以及解决方法
1)在mysql配置文件中,需要通过mapper标签引入你编写的sql配置文件,每一个都必须引入。
1 <mappers> 2 <mapper resource="bupt/machi/dao/UserMapper.xml"/> 3 </mappers>
2)如果出现找不到sql配置文件的问题,可能是由于maven的资源过滤机制,要在父项目和子项目的配置文件中添加build标签。
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
努力,向上,自律