MyBatis(二)对表执行CRUD操作
程序员文章站
2022-05-23 17:54:01
...
上一篇博文MyBatis(一配置文件),我们讲了如何配置MyBatis配置文件,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对t_user表执行CRUD操作。本文中使用到的测试环境是上一篇博文中的测试环境。
使用MyBatis对表执行CRUD操作
1、创建数据库,新建一个t_user表,并添加数据
SQL脚本如下:
create database db_user;
use db_user;
CREATE TABLE t_user(usre_id INT PRIMARY KEY AUTO_INCREMENT, user_name VARCHAR(20), user_age INT);
INSERT INTO t_user(user_name, user_age) VALUES('张三', 21);
INSERT INTO t_user(user_name, user_age) VALUES('李四', 22);
INSERT INTO t_user(user_name, user_age) VALUES('王五', 23);
2、新建工具类,用于获取SqlSession会话
public class DBUtil {
/**
* 每个数据库对应一个SqlSessionFactory
*/
private static SqlSessionFactory sqlSessionFactory;
/**
* 1、静态块初始化,通过字节输入流读取配置文件
*/
static {
InputStream is=null;
try {
is=Resources.getResourceAsStream("sqlMapConfig.xml");
/**
* 2、获得SqlSessionFactory
*/
sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 3、通过SqlSessionFactory获得SqlSession会话
*/
public static SqlSession getsqlsession() {
return sqlSessionFactory.openSession();
}
}
3、新建实体类:User
public class User {
private int userId; //用户ID
private String userName; //用户名
private int userAge; //密码
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
@Override
public String toString() {
return "User [userId=" + userId + ", userName=" + userName + ", userAge=" + userAge + "]";
}
}
4、创建一个mapper包,专门用于存放定义操作user表的UserMapper接口和sql映射文件UserMapper.xml,如下图所示:
UserMapper接口:用于定义CRUD操作的方法
public interface UserMapper {
/**
* 根据ID查询单条用户信息
* @param id 用户ID
* @return User对象
*/
public User getUserInfoById(int id);
/**
* 添加一条用户信息
* @param name 用户名
* @param age 用户年龄
* @return 受影响行数,1 添加成功
*/
public int addUser(@Param("name")String name,@Param("age")int age);
/**
* 根据ID删除用户
* @param id 用户ID
* @return 受影响行数,1 删除成功
*/
public int delUserById(int id);
/**
* 根据ID修改用户信息
* @param name 修改的用户名
* @param id 需要修改用户的ID
* @return 受影响行数,1 修改成功
*/
public int updateUserByID(@Param("name")String name,@Param("id")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.zh.mapper.UserMapper">
<resultMap type="User" id="userInfo">
<id property="userId" column="user_id" javaType="int"></id>
<result property="userName" column="user_name" javaType="java.lang.String"/>
<result property="userAge" column="user_age" javaType="int"></result>
</resultMap>
<!-- 查询单条用户信息 ,id为Mapper接口的方法名,-->
<select id="getUserInfoById" resultMap="userInfo">
select * from t_user where user_id=#{id}
</select>
<!-- 添加用户 -->
<insert id="addUser">
insert into t_user(user_name,user_age) VALUES(#{name},#{age})
</insert>
<!-- 根据ID删除用户 -->
<delete id="delUserById">
delete from t_user where user_id=#{id}
</delete>
<!-- 根据ID修改用户信息 -->
<update id="updateUserByID">
update t_user set user_name=#{name} where user_id=#{id}
</update>
</mapper>
5、创建一个业务层包,用于存放Service接口和ServiceImpl实现类,如下图:
UserService:定义CRUD方法,作用与UserMapper一致
public interface UserService {
/**
* 根据ID查询单条用户信息
* @param id 用户ID
* @return User对象
*/
public User getUserInfoById(int id);
/**
* 添加一条用户信息
* @param name 用户名
* @param age 用户年龄
* @return 受影响行数,1 添加成功
*/
public int addUser(String name,int age);
/**
* 根据ID删除用户
* @param id 用户ID
* @return 受影响行数,1 删除成功
*/
public int delUserById(int id);
/**
* 根据ID修改用户信息
* @param name 修改的用户名
* @param id 需要修改用户的ID
* @return 受影响行数,1 修改成功
*/
public int updateUserByID(String name,int id);
UserServiceImpl:业务实现类,重写UserService接口内的方法:
public class UserServiceImpl implements UserService{
//获取sqlSession对象
SqlSession sqlSession=DBUtil.getsqlsession();
//通过sqlSession对象得到Mapper对象
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
@Override
public User getUserInfoById(int id) {
User user = mapper.getUserInfoById(id);
return user;
}
@Override
public int addUser(String name, int age) {
int result=mapper.addUser(name, age);
//会话提交
sqlSession.commit();
return result;
}
@Override
public int delUserById(int id) {
int result = mapper.delUserById(id);
sqlSession.commit();
return result;
}
@Override
public int updateUserByID(String name, int id) {
int result = mapper.updateUserByID(name, id);
sqlSession.commit();
return result;
}
}
6、创建一个测试类,用于测试方法较多,主方法用于麻烦,这里我们创建一个工具类:
public class UserAction extends TestCase{
//获取业务层对象
private static UserService service=new UserServiceImpl();
/**
* 获取单条用户信息
*/
public void TestgetUserInfoById() {
int id=1;
User user=service.getUserInfoById(id);
System.out.println(user);
}
/**
* 添加数据
*/
public void TestAddUser() {
String name="马六";
int age = 24;
int result=service.addUser(name, age);
if(result==1) {
System.out.println("数据添加成功");
}else {
System.out.println("数据添加失败");
}
}
/**
* 删除数据
*/
public void TestDelUser() {
int id=4;
int result=service.delUserById(id);
if(result==1) {
System.out.println("数据删除成功");
}else {
System.out.println("数据删除失败");
}
}
/**
* 修改数据
*/
public void TestUpdateUser() {
String name="羊七";
int id=5;
int result=service.updateUserByID(name, id);
if(result==1) {
System.out.println("数据修改成功");
}else {
System.out.println("数据修改失败");
}
}
}
测试结果如下,控制台打印:
User [userId=1, userName=张三, userAge=21]
数据添加成功
数据删除成功
数据修改成功
推荐阅读
-
操作系统学习(二)--进程描述和执行
-
【MyBatis】MyBatis实现CRUD操作
-
Mybatis实现CRUD操作
-
Mybatis常用的注解开发CRUD&&复杂关系映射(一对一,一对多)&&mybatis 基于注解的二级缓存
-
gradle + spring4 + springmvc4 + mybatis3 + driud1 + logback1(CRUD操作)
-
拼多多二面:Mybatis是如何执行一条SQL命令的?
-
MyBatis中注解实现CRUD以及其他操作
-
mybatis 通过拦截器打印完整的sql语句以及执行结果操作
-
Mybatis-Plus 通用CRUD的详细操作
-
详解Mybatis-plus(MP)中CRUD操作保姆级笔记