在使用 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 "-////DTD Mapper 3.0//EN" "/dtd/">
<mapper namespace="">
<insert parameterType="">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
<select parameterType="" resultType="">
SELECT id, name, age FROM user WHERE id = #{id}
</select>
<update parameterType="">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete parameterType="">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
4. 配置 MyBatis
创建一个 MyBatis 配置文件 ,配置数据源、事务管理器、Mapper 文件路径等信息:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN" "/dtd/">
<configuration>
<environments default="development">
<environment >
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value=""/>
<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/"/>
</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 (user);
}
@Override
public User getUserById(Integer id) {
return (id);
}
@Override
public int updateUser(User user) {
return (user);
}
@Override
public int deleteUser(Integer id) {
return (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 (user);
}
@Override
public User getUserById(Integer id) {
return (id);
}
@Override
public int updateUser(User user) {
return (user);
}
@Override
public int deleteUser(Integer id) {
return (id);
}
@Override
public User getUserByName(String name) {
return (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 "-////DTD Mapper 3.0//EN" "/dtd/">
<mapper namespace="">
<insert parameterType="">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
<select parameterType="" resultType="">
SELECT id, name, age FROM user WHERE id = #{id}
</select>
<update parameterType="">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete parameterType="">
DELETE FROM user WHERE id = #{id}
</delete>
<select parameterType="" resultType="">
SELECT id, name, age FROM user WHERE name = #{name}
</select>
</mapper>
解释:
- 首先,我们在
UserService
接口中添加了getUserByName
方法,用于通过名字获取用户信息。 - 然后,在
UserServiceImpl
中实现了getUserByName
方法,并调用了新的UserMapper
方法。 - 最后,在
UserMapper
接口中添加了getUserByName
方法,并在文件中编写了对应的 SQL 语句。
总结
在初期设计阶段,可以先使用从前向后的方式构建代码框架,然后在开发过程中,根据需求使用从后向前的方式添加新的功能。