1.什么是 MyBatis?
-
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了[google code](https://baike.baidu.com/item/google code/2346604),并且改名为MyBatis 。
-
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
-
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
2.MyBatis的特点
- 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
- 灵活:MyBatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
- 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的orm字段关系映射
- 提供对象关系映射标签,支持对象关系组建维护
- 提供xml标签,支持编写动态sql。
3.使用MyBatis实现增删改查操作
-
创建一个maven工程
-
导入maven依赖
<!-- mybatis依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <!-- junit单元测试依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <!-- mysql数据库驱动依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> </dependency>
-
创建数据库mybatis
CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(20) NOT NULL, `password` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
-
创建实体User类
package com.demo.entity; public class User { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } 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 "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
-
创建UserMapper接口
package com.demo.mapper; import com.demo.entity.User; import java.util.List; public interface UserMapper { List<User> getAll(); User getOneById(int id); int add(User user); int update(User user); int deleteOneById(int id); }
-
创建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="com.demo.mapper.UserMapper"> <select id="getAll" resultType="com.demo.entity.User"> select * from mybatis.user </select> <select id="getOneById" resultType="com.demo.entity.User" parameterType="int"> select * from mybatis.user where id = #{id} </select> <insert id="add" parameterType="com.demo.entity.User"> insert into mybatis.user (username,password) values (#{username},#{password}) </insert> <update id="update" parameterType="com.demo.entity.User"> update mybatis.user set username = #{username},password = #{password} where id = #{id} </update> <delete id="deleteOneById" parameterType="int"> delete from mybatis.user where id = #{id} </delete> </mapper>
-
创建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="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> <!--注册resources下mapper--> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration>
-
创建MybatisUtil工具类
package com.demo.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 MybatisUtil { private static SqlSessionFactory sqlSessionFactory; static { //获取resource下的mybatis-config.xml配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource); } catch (IOException e) { e.printStackTrace(); } //构建sqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } /** * 获得 SqlSession 的实例。 * 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 * SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 * 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。 * @return */ public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
-
测试
package com.demo; import com.demo.entity.User; import com.demo.mapper.UserMapper; import com.demo.utils.MybatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class TestMybatis { @Test public void getAll(){ //获取SqlSession SqlSession sqlSession = MybatisUtil.getSqlSession(); ///获取UserMapper UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //调用方法 List<User> userList = userMapper.getAll(); for (User user: userList){ System.out.println(user); } //关闭SqlSession sqlSession.close(); } @Test public void getOne(){ //获取SqlSession SqlSession sqlSession = MybatisUtil.getSqlSession(); ///获取UserMapper UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //调用方法 User user = userMapper.getOneById(2); System.out.println(user); //关闭SqlSession sqlSession.close(); } //增删改需要提交事务 @Test public void add(){ //获取SqlSession SqlSession sqlSession = MybatisUtil.getSqlSession(); ///获取UserMapper UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user =new User(); user.setUsername("root"); user.setPassword("123456"); //调用方法 int result = userMapper.add(user); if (result>0) { System.out.println("操作成功"); } //提交事务 sqlSession.commit(); //关闭SqlSession sqlSession.close(); } //增删改需要提交事务 @Test public void update(){ //获取SqlSession SqlSession sqlSession = MybatisUtil.getSqlSession(); ///获取UserMapper UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.getOneById(2); user.setPassword("7845154"); //调用方法 int result = userMapper.update(user); if (result>0) { System.out.println("操作成功"); } //提交事务 sqlSession.commit(); //关闭SqlSession sqlSession.close(); } //增删改需要提交事务 @Test public void delete(){ //获取SqlSession SqlSession sqlSession = MybatisUtil.getSqlSession(); ///获取UserMapper UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //调用方法 int result = userMapper.deleteOneById(2); if (result>0) { System.out.println("操作成功"); } //提交事务 sqlSession.commit(); //关闭SqlSession sqlSession.close(); } }
4.demo下载地址
- https://download.csdn.net/download/weixin_43817709/19152159