简单创建一个MyBatis项目

    科技2026-09-28  13

    文章目录

    MyBatis快速入门一.MyBatis 简介1.使用MyBatis


    MyBatis快速入门

    一.MyBatis 简介

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,是一个基于Java的持久层框架。

    持久层: 可以将业务数据存储到磁盘,具备长期存储能力,只要磁盘不损坏,在断电或者其他情况下,重新开启系统仍然可以读取到这些数据。优点: 可以使用巨大的磁盘空间存储相当量的数据,并且很廉价缺点:慢(相对于内存而言)

    为什么使用 MyBatis

    在我们传统的 JDBC 中,我们除了需要自己提供 SQL 外,还必须操作 Connection、Statment、ResultSet,不仅如此,为了访问不同的表,不同字段的数据,我们需要些很多雷同模板化的代码,闲的繁琐又枯燥。

    而我们在使用了 MyBatis 之后,只需要提供 SQL 语句就好了,其余的诸如:建立连接、操作 Statment、ResultSet,处理 JDBC 相关异常等等都可以交给 MyBatis 去处理,我们的关注点于是可以就此集中在 SQL 语句上,关注在增删改查这些操作层面上。

    并且 MyBatis 支持使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    1.使用MyBatis

    下载MyBatis所需要的jar包 打开链接https://github.com/mybatis/mybatis-3/releases 准备数据库并自己随机添加几条数据

    CREATE TABLE `master` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '序号', `name` varchar(20) DEFAULT NULL COMMENT '登录名', `password` varchar(20) DEFAULT NULL COMMENT '密码', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

    创建MyBatis项目


    a. 我们只是创建一个简单的普通项目,所以这里create from archetype 不用点,也不用选取其他模板,直接next就好了。

    创建一个lib包导入MyBatis 的jar包 配置MyBatis.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="mydev"> <!-- 环境变量配置--> <environment id="mydev"> <!-- 事务管理器配置--> <transactionManager type="JDBC"/> <!-- 数据源--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <!-- test为数据库名--> <property name="username" value="root"/> <!-- 数据用户名--> <property name="password" value="123"/> <!-- 数据库密码--> </dataSource> </environment> </environments> <!-- 映射到层的DogDao.xml配置文件--> <mappers> <!--<mapper resource="RuaMapper.xml"/>--> <package name="com.java.ym.dao"/> <!-- 这里使用的package跟接口层的层次需要一样 --> </mappers> </configuration>

    创建实体类

    package com.java.ym.entity; /** * @Author: YuMi * @Date: 2020/9/22 10:56 * ---------------------- * @Comments: */ public class Master { private Integer id; private String name; private String password; public Master() { } public Master(Integer id, String name, String password) { this.id = id; this.name = name; this.password = password; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "Master{" + "id=" + id + ", name='" + name + '\'' + ", password='" + password + '\'' + '}'; } }

    创建接口

    package com.java.ym.dao; import com.java.ym.entity.Master; import com.java.ym.entity.Pet; import com.java.ym.entity.Rua; import java.util.List; /** * @Author: YuMi * @Date: 2020/9/21 14:59 * ---------------------- * @Comments: */ public interface RuaMapper { /* List<Rua> seletRua(); int addRua(Rua rua); List<Rua> likeSelectRua(String name); List<Pet> selectPet(int pid);*/ /** * 查询 * @return */ List<Master> selectMaster(); }

    编写SQL.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.java.ym.dao.RuaMapper"> <!-- 查询--> <!--<select id="seletRua" resultType="com.java.ym.entity.Rua"> select * from rua; </select> <insert id="addRua"> <selectKey keyColumn="id" keyProperty="id" order="AFTER" resultType="int"> select LAST_INSERT_ID(); </selectKey> INSERT INTO rua VALUES(null,#{name},#{age},#{love}); </insert> <select id="likeSelectRua" parameterType="String" resultType="com.java.ym.entity.Rua"> SELECT * FROM rua WHERE NAME LIKE '%${value}%' </select>--> <!-- Master --> <!-- id: 唯一标识符 type: 对应实体类 --> <resultMap id="masterResult" type="com.java.ym.entity.Master"> <!-- property: 实体类的属性名 column: 数据库的字段名(可以不分大小写) --> <id property="id" column="id"/> <result property="name" column="name"/> </resultMap> <!-- 查询 id: 跟接口里的方法名对应 resultMap: 对应上面的resultMap的id --> <select id="selectMaster" resultMap="masterResult"> SELECT id,name,password FROM MASTER </select> <!--<select id="selectPet" parameterType="int" resultType="com.java.ym.entity.Pet"> select * from pet where pid=#{pid}; </select>--> </mapper>

    创建MyBatisUtils工具类

    package com.java.ym.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; /** * @Author: YuMi * @Date: 2020/9/23 19:18 * ---------------------- * @Comments: MyBatis工具类 */ public class MyBatisUtils { static SqlSessionFactory build; static { // 读取config表示配置文件 InputStream inputStream; try { inputStream = Resources.getResourceAsStream("MyBatis.xml"); // 创建SqlSessionFactoryBuilder对象,SqlSessionFactory接收 build = new SqlSessionFactoryBuilder().build(inputStream); // 获取SqlSession对象,从SqlSessionFactory中获取SqlSession } catch (IOException e) { e.printStackTrace(); } } /** * 这里build.openSession(true) 括号里给true是自动提交事务 * @return */ public static SqlSession getSqlSession(){ return build.openSession(true); } }

    测试

    package com.java.ym; import com.java.ym.dao.RuaMapper; import com.java.ym.entity.Master; import com.java.ym.entity.Pet; import com.java.ym.entity.Rua; 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; import java.util.List; /** * @Author: YuMi * @Date: 2020/9/21 15:04 * ---------------------- * @Comments: */ public class MyBatisRuaTest { public static void main(String[] args) throws IOException { // 这里运用了先前创建的MYBatisUtils工具类 RuaMapper mapper = MyBatisUtils.getSqlSession().getMapper(RuaMapper.class); List<Master> masters = mapper.selectMaster(); for (Master master:masters){ System.out.println(master); } } }

    运行结果

    Processed: 0.010, SQL: 9