在使用 MyBatis 进行开发时,我们可以选择从前向后或从后向前的两种方式来构建代码。
本文将Mybatis开发的实际流程分为从前向后和从后向前进行讲解
从前向后
从前向后的方式适合于初期设计阶段,或者对数据库结构和业务逻辑有清晰的理解的情况下。
1. 定义实体类 (Entity)
首先,你需要定义与数据库表结构对应的实体类。例如,对于一个名为 user
的数据库表,你需要创建一个 User
类,包含 id
、name
、age
等属性:
public class User {
private Integer id;
private String name;
private Integer age;
// getter and setter methods
}
2. 创建 Mapper 接口
定义一个接口,用于声明对数据库的操作方法,例如 insertUser
、getUserById
、updateUser
、deleteUser
等。接口方法名通常对应数据库操作的类型,例如 insert
、select
、update
、delete
:
public interface UserMapper {
int insertUser(User user);
User getUserById(Integer id);
int updateUser(User user);
int deleteUser(Integer id);
}
3. 编写 Mapper XML 文件
为每个 Mapper 接口创建一个 XML 文件,在文件中定义 SQL 语句,并与 Mapper 接口的方法进行映射。
<?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.mapper.UserMapper">
<insert id="insertUser" parameterType="com.example.entity.User">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
<select id="getUserById" parameterType="java.lang.Integer" resultType="com.example.entity.User">
SELECT id, name, age FROM user WHERE id = #{id}
</select>
<update id="updateUser" parameterType="com.example.entity.User">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="java.lang.Integer">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
4. 配置 MyBatis
创建一个 MyBatis 配置文件 mybatis-config.xml
,配置数据源、事务管理器、Mapper 文件路径等信息:
<?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>
<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/mydatabase"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
5. 创建 Service 接口和实现类
定义一个 Service 接口,用于提供业务逻辑,并在 Service 接口的实现类中调用 Mapper 接口的方法来执行数据库操作:
public interface UserService {
int insertUser(User user);
User getUserById(Integer id);
int updateUser(User user);
int deleteUser(Integer id);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public int insertUser(User user) {
return userMapper.insertUser(user);
}
@Override
public User getUserById(Integer id) {
return userMapper.getUserById(id);
}
@Override
public int updateUser(User user) {
return userMapper.updateUser(user);
}
@Override
public int deleteUser(Integer id) {
return userMapper.deleteUser(id);
}
}
6. 使用 Service (Service Usage)
在你的应用程序中,通过注入 Service 实现类,就可以调用 Service 接口的方法来完成对数据库的增删改查操作:
@Controller
public class UserController {
@Autowired
private UserService userService;
// ... other methods
}
总结
MyBatis 的开发流程可以概括为:
- 定义实体类
- 创建 Mapper 接口
- 编写 Mapper XML 文件
- 配置 MyBatis
- 创建 Service 接口和实现类
- 使用 Service
当你想要增加某个SQL操作的时候,可以通过从后(Service)向前写的方法。根据需求,比如添加通过名字查找员工信息
从后向前
1.创建 Service 接口 :
首先,你需要定义一个 Service 接口,用于提供业务逻辑,例如 UserService
,包含 insertUser
、getUserById
、updateUser
、deleteUser
等方法。
public interface UserService {
int insertUser(User user);
User getUserById(Integer id);
int updateUser(User user);
int deleteUser(Integer id);
User getUserByName(String name); // 新增方法
}
2.创建 Service 实现类 :
创建 Service 接口的实现类,例如 UserServiceImpl
,在实现类中调用 Mapper 接口的方法来执行数据库操作。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public int insertUser(User user) {
return userMapper.insertUser(user);
}
@Override
public User getUserById(Integer id) {
return userMapper.getUserById(id);
}
@Override
public int updateUser(User user) {
return userMapper.updateUser(user);
}
@Override
public int deleteUser(Integer id) {
return userMapper.deleteUser(id);
}
@Override
public User getUserByName(String name) {
return userMapper.getUserByName(name); // 调用新的 Mapper 方法
}
}
3.创建 Mapper 接口:
定义一个接口,用于声明对数据库的操作方法,例如 UserMapper
,包含 insertUser
、getUserById
、updateUser
、deleteUser
等方法。
public interface UserMapper {
int insertUser(User user);
User getUserById(Integer id);
int updateUser(User user);
int deleteUser(Integer id);
User getUserByName(String name); // 新增方法
}
4.编写 Mapper XML 文件 :
为每个 Mapper 接口创建一个 XML 文件,在文件中定义 SQL 语句,并与 Mapper 接口的方法进行映射。
<?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.mapper.UserMapper">
<insert id="insertUser" parameterType="com.example.entity.User">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
<select id="getUserById" parameterType="java.lang.Integer" resultType="com.example.entity.User">
SELECT id, name, age FROM user WHERE id = #{id}
</select>
<update id="updateUser" parameterType="com.example.entity.User">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="java.lang.Integer">
DELETE FROM user WHERE id = #{id}
</delete>
<select id="getUserByName" parameterType="java.lang.String" resultType="com.example.entity.User">
SELECT id, name, age FROM user WHERE name = #{name}
</select>
</mapper>
解释:
- 首先,我们在
UserService
接口中添加了getUserByName
方法,用于通过名字获取用户信息。 - 然后,在
UserServiceImpl
中实现了getUserByName
方法,并调用了新的UserMapper
方法。 - 最后,在
UserMapper
接口中添加了getUserByName
方法,并在UserMapper.xml
文件中编写了对应的 SQL 语句。
总结
在初期设计阶段,可以先使用从前向后的方式构建代码框架,然后在开发过程中,根据需求使用从后向前的方式添加新的功能。