Mybatis的CRUD操作
一、新建一个数据库
CREATE DATABASE `student`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(25) CHARACTER SET utf8,
`age` int(11) NULL DEFAULT NULL,
`sex` varchar(25) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `user`(name,age,sex) VALUES ('小李', 21, '男');
INSERT INTO `user`(name,age,sex) VALUES ('小红', 20, '女');
INSERT INTO `user`(name,age,sex) VALUES ('小黄', 22, '男');
效果如下:
二、IDEA新建一个Maven项目导入依赖
pom.xml导入依赖如下:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
三、写一个简单的Mybatis项目
3.1.项目目录
其中MybatisTest为测试类
3.2.mybatis配置文件(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>
<!--修改别名-->
<typeAliases>
<typeAlias type="top.upstudy.pojo.User" alias="user"/>
</typeAliases>
<!--配置环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/student?useSSL=false&useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--绑定mapper-->
<mappers>
<mapper resource="Mapper/Mapper.xml"/>
</mappers>
</configuration>
其中username、password为连接数据库的账号与密码,mappers中绑定操作数据库mapper文件
3.3.操作数据库文件Mapper.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="top.upstudy.dao.UserMapper">
<!--查询所有用户-->
<select id="showUser" resultType="user">
select * from user
</select>
<!--查询单个用户-->
<select id="getUser" parameterType="int" resultType="user">
select * from user where id = #{id}
</select>
<!--添加用户-->
<insert id="addUser" parameterType="user">
insert into user (name,age,sex) values (#{name},#{age},#{sex})
</insert>
<!--更新用户信息-->
<update id="updateUser" parameterType="user">
update user set name = #{name},age = #{age} where id = #{id}
</update>
<!--删除用户信息-->
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
</mapper>
在这里写sql语句id名与接口中的方法名相对应
3.4.写对应的操作接口UserMapper(类似jdbc中的dao)
package top.upstudy.dao;
import top.upstudy.pojo.User;
import java.util.List;
public interface UserMapper {
//查询所有用户
List<User> showUser();
//按id查询用户
User getUser(int id);
//添加一个用户
boolean addUser(User user);
//修改用户信息
boolean updateUser(User user);
//删除用户
boolean deleteUser(int id);
}
方法由mybatis用mapper实现,我们只需要写个接口
3.5.用户类User(用作参数传入/返回类型)
package top.upstudy.pojo;
public class User {
private int id; //id
private String name; //姓名
private int age;//年龄
private String sex; //性别
public User() {
}
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public User(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
由于只是用作测试,故不添加get/set方法了
3.6.写配置文件MybatisUtils
package top.upstudy.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 {
//绑定配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取SqlSession连接
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
mybatis使用了工厂模式建立了数据库的操作,方便直接使用,至此配置完成
四、测试CRUD(其中增、删、改需提交事务)
1.查询用户
所有用户:
对应mapper.xml中的
<!--查询所有用户-->
<select id="showUser" resultType="user">
select * from user
</select>
对应接口中的
//查询所有用户
List<User> showUser();
代码(供直接增、改、删调用,故不做测试)
//查询所有用户方法
public void selectAll(UserMapper mapper){
//查看当前用户数据
List<User> allUser = mapper.showUser();
//遍历返回数据
for (User oneUser:allUser) {
System.out.println(oneUser);
}
}
单个用户:
对应mapper.xml中的
<!--查询单个用户-->
<select id="getUser" parameterType="int" resultType="user">
select * from user where id = #{id}
</select>
对应接口中的
//按id查询用户
User getUser(int id);
测试代码
@Test
public void findUser(){
//获取连接
SqlSession session = MybatisUtils.getSession();
//绑定mapper接口
UserMapper mapper = session.getMapper(UserMapper.class);
//以id查询查询用户数据
User user = mapper.getUser(1);
System.out.println(user);
//关闭连接
session.close();
}
绑定接口,进行操作,实现通过id值查询用户信息
junit运行该方法后,效果:
2.添加用户
对应mapper.xml中的
<!--添加用户-->
<insert id="addUser" parameterType="user">
insert into user (name,age,sex) values (#{name},#{age},#{sex})
</insert>
对应接口中的
//添加一个用户
boolean addUser(User user);
添加用户方法
@Test
public void add(){
//获取连接
SqlSession session = MybatisUtils.getSession();
//绑定mapper接口
UserMapper mapper = session.getMapper(UserMapper.class);
//添加用户
User user = new User("李四",22,"男");
if (mapper.addUser(user))
System.out.println("添加成功!");
else
System.out.println("添加失败!");
//提交事务
session.commit();
//查看所有用户
selectAll(mapper);
//关闭连接
session.close();
}
效果如下:
3.修改用户信息
对应mapper.xml中的
<!--更新用户信息-->
<update id="updateUser" parameterType="user">
update user set name = #{name},age = #{age} where id = #{id}
</update>
对应接口中的
//修改用户信息
boolean updateUser(User user);
测试代码:
@Test
public void update(){
//获取连接
SqlSession session = MybatisUtils.getSession();
//绑定mapper接口
UserMapper mapper = session.getMapper(UserMapper.class);
//修改id为1的用户信息
User user = new User(1,"张三",18);
if (mapper.updateUser(user))
System.out.println("修改成功!");
else
System.out.println("修改失败!");
//提交事务
session.commit();
//查看所有用户
selectAll(mapper);
//关闭连接
session.close();
}
效果:
4.删除用户
<!--删除用户信息-->
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
对应接口中的
//删除用户
boolean deleteUser(int id);
测试代码(删除id为3的用户):
@Test
public void delete(){
//获取连接
SqlSession session = MybatisUtils.getSession();
//绑定mapper接口
UserMapper mapper = session.getMapper(UserMapper.class);
//删除id为3的用户
if (mapper.deleteUser(3))
System.out.println("删除成功!");
else
System.out.println("删除失败!");
//提交事务
session.commit();
//查看所有用户
selectAll(mapper);
//关闭连接
session.close();
}
效果:
5.整个测试代码
package top.upstudy;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import top.upstudy.dao.UserMapper;
import top.upstudy.pojo.User;
import top.upstudy.utils.MybatisUtils;
import java.util.List;
public class MybatisTest {
//查询所有用户方法
public void selectAll(UserMapper mapper){
//查看当前用户数据
List<User> allUser = mapper.showUser();
//遍历返回数据
for (User oneUser:allUser) {
System.out.println(oneUser);
}
}
@Test
public void findUser(){
//获取连接
SqlSession session = MybatisUtils.getSession();
//绑定mapper接口
UserMapper mapper = session.getMapper(UserMapper.class);
//以id查询查询用户数据
User user = mapper.getUser(1);
System.out.println(user);
//关闭连接
session.close();
}
@Test
public void add(){
//获取连接
SqlSession session = MybatisUtils.getSession();
//绑定mapper接口
UserMapper mapper = session.getMapper(UserMapper.class);
//添加用户
User user = new User("李四",22,"男");
if (mapper.addUser(user))
System.out.println("添加成功!");
else
System.out.println("添加失败!");
//提交事务
session.commit();
//查看所有用户
selectAll(mapper);
//关闭连接
session.close();
}
@Test
public void update(){
//获取连接
SqlSession session = MybatisUtils.getSession();
//绑定mapper接口
UserMapper mapper = session.getMapper(UserMapper.class);
//修改id为1的用户信息
User user = new User(1,"张三",18);
if (mapper.updateUser(user))
System.out.println("修改成功!");
else
System.out.println("修改失败!");
//提交事务
session.commit();
//查看所有用户
selectAll(mapper);
//关闭连接
session.close();
}
@Test
public void delete(){
//获取连接
SqlSession session = MybatisUtils.getSession();
//绑定mapper接口
UserMapper mapper = session.getMapper(UserMapper.class);
//删除id为3的用户
if (mapper.deleteUser(3))
System.out.println("删除成功!");
else
System.out.println("删除失败!");
//提交事务
session.commit();
//查看所有用户
selectAll(mapper);
//关闭连接
session.close();
}
}
五、总结
mybatis让我们不需要编写jdbc代码,我们只需要关注sql的编写以及mapper文件的对应即可,配置完成后是进行增删改查操作是十分方便的。