这篇文章是一篇关于使用MyBatis进行基本的数据增删改查操作的入门指南,同时还将介绍当数据库字段名和实体类属性名不一致时的解决方法。整个过程将分为以下几个部分:
1.环境搭建
2.创建数据库和表格
3.编写实体类
4.编写Mapper接口
5.编写Mapper对应的SQL语句
6.测试代码
7.数据库字段与实体字段不一致处理方法
环境搭建
首先,在进行本教程之前,你需要确保已经正确安装了JDK和MyBatis的环境。并且将MyBatis的jar包以及连接数据库的驱动包加入到项目依赖中。
创建数据库和表格
接下来,我们需要新建一个数据库和一张表来存储我们的数据。在本篇文章中,我们将创建一个名为“test”的数据库,并在其中创建一张名为“users”的表格,表格中包含以下字段:
- id:自增长的id,主键
- name:用户姓名,varchar型,长度为20
- age:用户年龄,int型
- sex:用户性别,int型,0表示男性,1表示女性
- address:用户住址,varchar型,长度为100
创建SQL语句如下:
CREATE DATABASE test; -- 创建数据库
USE test; -- 选择要使用的数据库
CREATE TABLE users (
id INT(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', -- 自增长的ID
name VARCHAR(20) NOT NULL COMMENT '姓名', -- 用户姓名,长度为20
age INT(3) NOT NULL COMMENT '年龄', -- 用户年龄
sex INT(1) NOT NULL COMMENT '性别(0:男,1:女)', -- 用户性别,0表示男,1表示女
address VARCHAR(100) NOT NULL COMMENT '住址', -- 用户住址,长度为100
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
编写实体类
我们需要创建一个对应于表格中每个字段的Java类。因为表格中有五个字段,因此我们需要同时创建一个名为“Users”的类,我们可以将其存储在src/main/java/目录下。
Users.java内容如下:
public class Users {
private int id;
private String name;
private int age;
private int sex;
private String address;
// 省略get和set方法
}
代码中的类属性名需要与表格中的字段名一一对应,并且需要有对应的get和set方法,因为在MyBatis中会自动调用这些方法来映射数据库和Java对象。
编写Mapper接口
Mapper接口是MyBatis框架中的一个重要的部分,它用于定义这个类将要进行的CRUD操作。
我们需要创建一个名为UserMapper.java的接口,并将其置于src/main/java/目录下。Mapper接口中包含了增删改查的操作,并且每个操作都需要定义对应的SQL语句。
UserMapper.java内容如下:
import java.util.List;
public interface UserMapper {
void addUser(Users user);
void deleteUserById(int userId);
void updateUserById(Users user);
Users getUserById(int userId);
List<Users> getAllUsers();
}
可以看到在这个Mapper接口中,我们为增删改查操作分别定义了一个方法。这些方法的名称需要与XML文件中定义的SQL语句名称一一对应,因为在MyBatis中,系统会按照方法名自动寻找对应的SQL语句。
编写Mapper对应的SQL语句
接下来,我们将为每个Mapper方法编写对应的SQL语句。这些SQL语句将被存储在XML文件中,并且将文件存储在src/main/resources/mapper/目录下。
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.example.demo.dao.UserMapper">
<insert id="addUser" parameterType="com.example.demo.entity.Users">
INSERT INTO users VALUES(
#{id},
#{name},
#{age},
#{sex},
#{address}
)
</insert>
<delete id="deleteUserById" parameterType="int">
DELETE FROM users WHERE id=#{userId}
</delete>
<update id="updateUserById" parameterType="com.example.demo.entity.Users">
UPDATE users SET
name=#{name},
age=#{age},
sex=#{sex},
address=#{address}
WHERE id=#{id}
</update>
<select id="getUserById" parameterType="int" resultType="com.example.demo.entity.Users">
SELECT * FROM users WHERE id=#{userId}
</select>
<select id="getAllUsers" resultType="com.example.demo.entity.Users">
SELECT * FROM users
</select>
</mapper>
这里需要注意的是,Mapper中定义的方法与XML文件中的SQL语句名称也需要一一对应,并且XML文件中的parameterType和resultType需要与Mapper接口中的方法参数类型和返回值类型一致。
测试代码
我们已经完成了包括实体类、Mapper接口和XML文件中的代码编写了。现在,我们将编写测试代码,并用它来测试系统在使用MyBatis框架时是否能够正确地执行CRUD操作。代码应该类似于下面的内容:
import com.example.demo.dao.UserMapper;
import com.example.demo.entity.Users;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserService {
@Resource
private UserMapper userMapper;
@Resource
private SqlSessionFactory sqlSessionFactory;
public void addUser(Users user) {
userMapper.addUser(user);
// sqlSessionFactory.openSession().commit(); // 提交事务
}
public void deleteUserById(int userId) {
userMapper.deleteUserById(userId);
// sqlSession.commit();
}
public void updateUserById(Users user) {
userMapper.updateUserById(user);
// sqlSession.commit();
}
public Users getUserById(int userId) {
return userMapper.getUserById(userId);
}
public List<Users> getAllUsers() {
return userMapper.getAllUsers();
}
}
这个测试类中,我们注入了UserMapper接口,然后使用它的方法来进行增删改查操作。
数据库字段与实体字段不一致处理方法
有时候,数据库中的字段名与Java类中属性名并不完全一致。在这种情况下,我们需要修改Mapper.xml中的SQL语句,以使其正确地映射到Java类属性上。
例如,在上面的例子中,我们的实体类属性名都是小写字母,而数据库中所有字段名都是大写字母。因此我们需要手动修改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.example.demo.dao.UserMapper">
<insert id="addUser" parameterType="com.example.demo.entity.Users">
INSERT INTO users VALUES(
#{id},
#{name,jdbcType=VARCHAR},
#{age,jdbcType=INTEGER},
#{sex,jdbcType=INTEGER},
#{address,jdbcType=VARCHAR}
)
</insert>
<delete id="deleteUserById" parameterType="int">
DELETE FROM users WHERE id=#{userId}
</delete>
<update id="updateUserById" parameterType="com.example.demo.entity.Users">
UPDATE users SET
name=#{name,jdbcType=VARCHAR},
age=#{age,jdbcType=INTEGER},
sex=#{sex,jdbcType=INTEGER},
address=#{address,jdbcType=VARCHAR}
WHERE id=#{id}
</update>
<select id="getUserById" parameterType="int" resultType="com.example.demo.entity.Users">
SELECT * FROM users WHERE id=#{userId}
</select>
<select id="getAllUsers" resultType="com.example.demo.entity.Users">
SELECT * FROM users
</select>
</mapper>
通过在Mapper.xml中使用“jdbcType”属性来设置类型,即可解决字段名不一致的问题。
这就是一个关于使用MyBatis框架进行基本CRUD操作的指南,同时解决了当数据库字段名和Java类属性名不一致时的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis入门之增删改查+数据库字段和实体字段不一致问题处理方法 - Python技术站