MyBatis 基础 一(环境搭建、基础使用)
开发环境:
- idea 专业版
- JDK 18
- mybatis-3.5.11
- MySQL Ver 8.0.29 for Win64 on x86_64 (MySQL Community Server - GPL)
- MySQL 用到的可视化开发软件
- IDEA 有很好的命令提示
- Navicat Premium 16 颜值高
- SQLyog - 64 bit 界面较为复古 功能和Navicat差不多
环境搭建
首先,我们需要一个Maven项目

把创建好的项目中的src目录删掉,剩下的文件就会看起来比较整洁,目前 项目中的文件有 .idea pom.xml 。编辑pom.xml 导入我们需要的依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId> <artifactId>MyBatisStudy</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging>
<properties> <maven.compiler.source>18</maven.compiler.source> <maven.compiler.target>18</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.11</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.33</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>3.0.0-alpha1</version> </dependency>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.28</version> <scope>provided</scope> </dependency>
</dependencies>
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>
</project>
|
然后我们新建一个模块:
新建完模块后,目录长这个样子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| mybatis-01 ├─ .gitignore ├─ pom.xml ├─ src │ ├─ main │ │ ├─ java 存放代码 │ │ └─ resources 资源文件(用来给java目录中的类读取) │ └─ test 存放测试代码 │ └─ java └─ target 编译好的文件 ├─ classes ├─ generated-sources ├─ generated-test-sources └─ test-classes
|
java下的目录如下:
1 2 3 4 5 6
| java └─ top └─ qwwq ├─ dao DAO层 数据库的操作 ├─ pojo POJO层 实体类 └─ utils 工具类
|
编写第一个MyBatis程序
在resources这个目录中新建文件mybatis-config.xml编辑如下:
这里的配置文件,填写数据库的配置 账号密码等,每写一个mapper.xml后都要在<mappers>标签中注册响应的xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://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?characterEncoding=UTF-8&useUnicode=true&serverTimezone=GMT"/> <property name="username" value="root"/> <property name="password" value="20021001"/> </dataSource> </environment> </environments>
<mappers> <mapper resource="top/qwwq/dao/UserMapper.xml"/> </mappers> </configuration>
|
在utils目录中定义MybatisUtils类:
这个类是一个工具类,用来获取SqlSession,这个类基本上不用修改,直接调用即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| package top.qwwq.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 final SqlSessionFactory sqlSessionFactory;
static { try { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { throw new RuntimeException(e); }
}
public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); }
}
|
在pojo目录中定义User类:
User类中的属性要和数据库中的属性一样,当数据库中某个表读取数据后可以直接返回一个User类型的对象,或List/Map
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| package top.qwwq.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 + '\'' + '}'; } }
|
在dao目录中新建接口UserMapper:
这个接口定义了多个方法,如 List<User> getUserList();等,定义了接口的返回值类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| package top.qwwq.dao;
import top.qwwq.pojo.User;
import java.util.List; import java.util.Map;
public interface UserMapper {
List<User> getUserLike(String name); List<User> getUserList(); User getUserById(int id); void addUser(User user); void addUser2(Map<String,Object> map); void updateUser(User user); void deleteUser(int id);
}
|
同样在在dao目录中新建UserMapper.xml文件:
UserMapper.xml文件是用来编写SQL语句,用来实现UserMapper接口的功能
<select> 标签 用来写 SELECT 语句
<insert>标签 用来写 INSERT 语句
<update>标签 用来写 UPDATE 语句
id 代表``UserMapper`接口中的方法名
resultType 返回的类型 后面的值要跟上类的包名(后面有方法给类取别名)
parameterType 给SQL语句传入参数的类型 Sql中接收参数用 #{}来接收参数#{}相当于预编译过了,可以防止SQL注入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="top.qwwq.dao.UserMapper">
<select id="getUserLike" resultType="top.qwwq.pojo.User"> select * from mybatis.user where name like "%"#{name}"%" </select>
<select id="getUserList" resultType="top.qwwq.pojo.User" > select * from mybatis.user </select>
<select id="getUserById" parameterType="int" resultType="top.qwwq.pojo.User"> select * from mybatis.user where id = #{id} </select>
<insert id="addUser" parameterType="top.qwwq.pojo.User"> insert into mybatis.user (id, name, pwd) values (#{id},#{name},#{pwd}); </insert>
<insert id="addUser2" parameterType="map"> insert into mybatis.user (id, name, pwd) values (#{userid},#{userName},#{password}); </insert>
<update id="updateUser" parameterType="top.qwwq.pojo.User"> update mybatis.user set id = #{id}, name = #{name}, pwd=#{pwd} where id = #{id}; </update>
<delete id="deleteUser" parameterType="int"> delete from mybatis.user where id = #{id} </delete> </mapper>
|
测试一下吧!
最后,让我们来编写一个测试类来测试一下吧!
在test的目录下创建测试类:
@Test 就是上面的测试用的依赖,可以运行任何方法,而不会只能运行main方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| package top.qwwq.dao;
import org.apache.ibatis.session.SqlSession; import org.junit.Test; import top.qwwq.pojo.User; import top.qwwq.utils.MybatisUtils;
import java.util.HashMap; import java.util.List; import java.util.Objects;
public class UserMapperTest { @Test public void test(){ try(SqlSession sqlSession = MybatisUtils.getSqlSession()){ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> userList = userMapper.getUserList(); List<User> objects = sqlSession.selectList("top.qwwq.dao.UserMapper.getUserList");
for (User user: userList) { System.out.println(user); }
for (User user: objects) { System.out.println(user); }
} }
@Test public void getUserById(){ try(SqlSession sqlSession = MybatisUtils.getSqlSession()){ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.getUserById(1); System.out.println(user); }
}
@Test public void addUser(){ User user = new User(4,"哈哈","12345");
try(SqlSession sqlSession = MybatisUtils.getSqlSession()){ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.addUser(user); sqlSession.commit(); } }
@Test public void updateUser(){ User user = new User(4,"呵呵","12345");
try(SqlSession sqlSession = MybatisUtils.getSqlSession()){ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.updateUser(user); sqlSession.commit(); } }
@Test public void deleteUser(){
try(SqlSession sqlSession = MybatisUtils.getSqlSession()){ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.deleteUser(4); sqlSession.commit(); } }
@Test public void addUser2(){ HashMap<String, Object> map = new HashMap<>();
try(SqlSession sqlSession = MybatisUtils.getSqlSession()){ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); map.put("userid",5); map.put("userName","乐乐"); map.put("password","qwer"); userMapper.addUser2(map); sqlSession.commit(); } } @Test public void getUserLike(){ try(SqlSession sqlSession = MybatisUtils.getSqlSession()){ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> userLike = userMapper.getUserLike("李"); System.out.println(userLike); sqlSession.commit(); } } }
|
测试结果:
1 2 3 4 5 6 7 8 9 10
| User{id=1, name='EnderKC', pwd='1234'} User{id=2, name='张三', pwd='1qwe4'} User{id=3, name='李四', pwd='1qwegda'} User{id=4, name='李五', pwd='qwetg'} User{id=5, name='乐乐', pwd='qwer'} User{id=1, name='EnderKC', pwd='1234'} User{id=2, name='张三', pwd='1qwe4'} User{id=3, name='李四', pwd='1qwegda'} User{id=4, name='李五', pwd='qwetg'} User{id=5, name='乐乐', pwd='qwer'}
|