前言
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。Mybatis在线学习文档地址为:https://mybatis.org/mybatis-3,后面加上/zh即可切成中文模式。
1、创建数据库
在学习Mybatis之前,首先要对数据库操作有所了解,一定要先建好表。
2、导入相关依赖
1)依赖包括Mybatis依赖包,数据库连接驱动以及Junit测试单元
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> </dependencies>
2)在build中配置resources,来防止我们资源导出失败的问题
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
3、Mybatis核心配置文件
1)每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。 并且每一个Mapper.xml都需要在Mybatis核心配置文件中注册。
<?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核心文件--> <configuration> <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/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/dao/UserMapper.xml"/> </mappers> </configuration>
2) 使用属性配置文件连接数据库(推荐使用),可将上述代码一分为二
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核心文件--> <configuration> <!--引入外部配置文件--> <properties resource="db.properties"/> <!--扫描实体类的包,它的默认别名就是这个类的类名,首字母小写--> <typeAliases> <package name="com.pojo"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 每一个Mapper.XML都需要在Mybatis核心配置文件中注册!--> <mappers> <package name="com.dao"/> </mappers> </configuration>
1)可以给实体类起别名
<typeAliases> <typeAlias type="com.pojo.User" alias="User"/> </typeAliases>
2)也可以扫描实体类的包,它的默认别名就是这个类的类名,首字母小写
<typeAliases> <package name="com.pojo"/> </typeAliases>
3)注册Mapper.xml,可以使用包路径加载,也可以使用资源路径
<package name="com.dao"/>
<mapper resource="com/dao/UserMapper.xml"/>
db.properties:
1)如果mysql-connector-java用的6.0以上的,此时需要把com.mysql.jdbc.Driver
改为com.mysql.cj.jdbc.Driver。
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8 driver=com.mysql.cj.jdbc.Driver username=root password=123456
2)如果使用的数据库是8.0.11以上版本的MySQL,需要配置时区(以下两种时区配置均可以),这是由于数据库和系统时区差异所造成的。
url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=Shanghai&?useUnicode=true&characterEncoding=utf8&useSSL=false
url=jdbc:mysql://localhost:3306/mybatis_plus?useSSL=true&useUnicode=true&useCharacter=UTF-8&serverTimezone=UTC
连接数据库:
先点“+”,再选择自己所用的数据库 ,然后点击Schemas,选择自己的数据库即可,连接完成之后,可以查看自己数据库中的表。
4、创建实体类
注意:实体类的变量名称要与数据库字段名一致,否者可能查询为Null
package com.pojo; public class User { private int userid; private String username; private String password; public User() { } public User(int userid, String username, String password) { this.userid = userid; this.username = username; this.password = password; } public int getUserid() { return userid; } public void setUserid(int userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "userid:" + userid + ", username:" + username + ", password:" + password; } }
5、Mybatis封装工具类
MybatisUtils.java:
package com.dao.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 MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { //使用Mybatis第一步:获取sqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } /*既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 SqlSession 提供了在数据库执行 SQL 命令所需的所有方法*/ public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } }
6、编写dao接口及接口配置文件
UserMapper:
package com.dao; import com.pojo.User; import java.util.List; public interface UserMapper { //查询全部用户 List<User> getUserList(); //根据ID查询用户 User getUserById(int userid); //增加一个用户 int addUser(User user); //修改用户 int updateUser(User user); //删除一个用户 void deleteUser(int userid); }
UserMapper.xml:
注:查询可以写参数类型(parameterType),也可以写返回结果类型(resultType),但返回结果类型必须得写。另外,增删改没有了resultType类型,但必须得写parameterType。这点通过源码可以看出来
<?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"> <!-- namespace=绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.dao.UserMapper"> <select id="getUserList" resultType="User"> select * from mybatis.user </select> <select id="getUserById" parameterType="int" resultType="com.pojo.User"> select * from mybatis.user where userid = #{id} </select> <!-- 对象中的属性,可以直接取出来 --> <insert id="addUser" parameterType="com.pojo.User"> insert into mybatis.user (userid, username, password) values (#{userid}, #{username}, #{password}) </insert> <update id="updateUser" parameterType="com.pojo.User"> update mybatis.user set username=#{username}, password=#{password} where userid = #{userid} </update> <delete id="deleteUser" parameterType="com.pojo.User"> delete from mybatis.user where userid = #{userid} </delete> </mapper>
7、编写Junit测试单元
package com.dao; import com.pojo.User; import com.dao.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserDaoTest { @Test public void test() { //第一步:获得SqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> userList = userMapper.getUserList(); for (User user : userList) { System.out.println(user); } //关闭SqlSession sqlSession.close(); } }
8、结果展示
查询到了全部用户,程序结束。
如遇错误 ,请参考下面文章: https://blog.csdn.net/qq_53860947/article/details/123452367