首先创建一个maven的Module,然后执行下面步骤:
1. 在pom.xml中添加依赖
<dependencies>
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.8</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version> <!-- 可以与自己电脑的mysql版本一致 -->
</dependency>
</dependencies>
2. 创建表
在studymybatis数据库下创建一个user表
CREATE TABLE `studymybatis`.`user` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(20) NULL, UNIQUE,
`password` VARCHAR(20) NULL,
`age` INT NULL,
`sex` CHAR(1) NULL,
`email` VARCHAR(20) NULL,
PRIMARY KEY (`id`),
3. 编写JavaBean
在main目录下的java目录下创建一个pojo目录(该目录用于存放所有实体类,每个实体类对应唯一的一张表),在pojo目录下创建一个关于user表的User类。
package pojo;
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private Character sex;
private String email;
public User() {
}
public User(Integer id, String username, String password, Integer age, Character sex, String email) {
this.id = id;
this.username = username;
this.password = password;
this.age = age;
this.sex = sex;
this.email = email;
}
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Character getSex() {
return sex;
}
public void setSex(Character sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
", sex=" + sex +
", email='" + email + '\'' +
'}';
}
}
4. 创建Mapper接口
在main目录下的java目录下创建一个mapper目录(该目录用于存放所有Mapper接口,每一个Mapper接口对应唯一的一个JavaBean),在mapper目录下创建一个UserMapper接口,在该接口中编写操作数据库的方法。
package mapper;
import org.apache.ibatis.annotations.Param;
import pojo.User;
import java.util.List;
public interface UserMapper {
//添加用户信息
void insertUser(User user);
//根据id修改用户信息
void updateUserById(@Param("id") Integer id, @Param("username") String username, @Param("password") String password, @Param("age") Integer age, @Param("sex") Character sex, @Param("email") String email);
//根据用户名删除用户信息
void deleteUserByName(@Param("username") String username);
//根据用户名查询用户信息
User queryUserByName(@Param("username") String username);
//根据用户名和密码查询用户信息
User queryUserByNameAndPassword(@Param("username") String username, @Param("password") String password);
//查询所有用户信息
List<User> queryAllUser();
//查询用户总数
Integer queryUserCount();
}
5. 创建Mapper接口的映射文件
映射文件与mapper接口、接口中的方法对应,并在映射文件中编写sql语句(相当于实现了Mapper接口中的方法)。
注:一个表 对应 一个实体类 对应 一个mapper接口 对应 一个映射文件
①在resources目录下创建一个mapper目录(该目录名需要与存放Mapper接口的包名一致,其用于存放每个Mapper接口所对应的映射文件)
②在resources目录下的mapper目录下创建一个映射文件:UserMapper.xml(映射文件的名字需要与Mapper接口同名)
③映射文件里的namespace要和Mapper接口的全类名保持一致,这里为:mapper.UserMapper
④映射文件里的SQL语句的id要和mapper接口中的方法名一致
⑤映射文件里查询功能的返回值类型是数据库表对应的JavaBean对象
<?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="mapper.UserMapper"> <!--为mapper接口的全类名-->
<insert id="insertUser">
insert into user values(null,#{username},#{password},#{age},#{sex},#{email})
</insert>
<update id="updateUserById">
update user set username=#{username}, password=#{password}, age=#{age}, sex=#{sex}, email=#{email} where id=#{id}
</update>
<delete id="deleteUserByName">
delete from user where username=#{username}
</delete>
<select id="queryUserByName" resultType="User">
select * from user where username=#{username} <!-- {}中使用@Param注解内的值-->
</select>
<select id="queryUserByNameAndPassword" resultType="User">
select * from user where username=#{username} and password=#{password} <!-- {}中使用@Param注解内的值-->
</select>
<select id="queryAllUser" resultType="User">
select * from user
</select>
<select id="queryUserCount" resultType="Integer">
select count(*) from user
</select>
</mapper>
6. 创建MyBatis核心配置文件
①在resources目录下创建一个jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/studymybatis
jdbc.username=root
jdbc.password=123456
②在resources目录下创建一个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>
<properties resource="jdbc.properties"/>
<!--设置别名,以包为单位设置别名,这样不管该包下有多少个JavaBean,其别名都为其自身的类名-->
<typeAliases>
<package name="pojo"/> <!-- name的值为实体对象类所在的包(全路径,只是这里只有一个目录pojo) -->
</typeAliases>
<!--设置连接数据库的环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<!-- 由于mapper下可以有多个映射文件,且映射文件名与mapper接口名一致,可以直接写包名,一次引入所有映射文件 -->
<mappers>
<package name="mapper"/>
</mappers>
</configuration>
7. 操作数据库(增删改查)
①编写一个工具类SqlSessionUtils,来获取SqlSession
package 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 SqlSessionUtils {
public static SqlSession getSqlSession(){
SqlSession sqlSession = null;
try {
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取SqlSession(Java程序和数据库之间的会话),为true表示自动提交事务,默认为false
sqlSession = sqlSessionFactory.openSession(true);
} catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}
}
②测试增删改查
import mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.SqlSessionUtils;
import java.util.List;
public class MybatisTest {
@Test
public void testInsertUser() {
//获取SqlSession
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
//获取Mapper接口(每个Mapper接口 对应 一个实体类 对应 一张表)
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//操作数据库
mapper.insertUser(new User(null,"王二","1357",22,'男',"Wang@qq.com"));
}
@Test
public void testUpdateUserById() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用方法操作数据库
mapper.updateUserById(6,"王二","2468",22,'男',"Wang@qq.com");
}
@Test
public void testDelete() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用方法操作数据库
mapper.deleteUserByName("王二");
}
@Test
public void testQueryUserByName() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用方法操作数据库
User user = mapper.queryUserByName("王二");
System.out.println(user);
}
@Test
public void testQueryUserByNameAndPassword() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用方法操作数据库
User user = mapper.queryUserByNameAndPassword("王二","1357");
System.out.println(user);
}
@Test
public void testQueryAllUser() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用方法操作数据库
List<User> list = mapper.queryAllUser();
list.forEach(user -> System.out.println(user));
}
@Test
public void testQueryUserCount() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用方法操作数据库
Integer count = mapper.queryUserCount();
System.out.println(count);
}
}