一、Mybatis CRUD操作
CRUD操作指的是创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)数据库中的数据。在Mybatis中,我们使用Mapper接口和对应的XML文件来执行这些操作。
首先,创建一个User类来表示数据库中的用户表:
public class User {
private int id;
private String username;
private String password;
// getters and setters
}
接下来,创建一个UserMapper接口,定义CRUD操作的方法:
public interface UserMapper {
void insertUser(User user);
User getUserById(int id);
void updateUser(User user);
void deleteUser(int id);
}
然后,在对应的UserMapper.xml文件中实现这些方法:
<!-- 添加用户 -->
<insert id="insertUser" parameterType="User">
INSERT INTO user (username, password)
VALUES (#{username}, #{password})
</insert>
<!-- 根据ID获取用户 -->
<select id="getUserById" parameterType="int" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
<!-- 更新用户 -->
<update id="updateUser" parameterType="User">
UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}
</update>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
使用Mybatis的SqlSession来执行操作
// 创建SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 获取Mapper接口的实例
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 插入用户
User user = new User();
user.setUsername("john");
user.setPassword("password");
userMapper.insertUser(user);
System.out.println("插入后的用户ID:" + user.getId());
// 根据ID查询用户
User retrievedUser = userMapper.getUserById(user.getId());
System.out.println("查询到的用户:" + retrievedUser.getUsername());
// 更新用户
retrievedUser.setUsername("jane");
userMapper.updateUser(retrievedUser);
// 删除用户
userMapper.deleteUser(retrievedUser.getId());
// 提交事务并关闭SqlSession
sqlSession.commit();
sqlSession.close();
二、Mybatis多条件查询和模糊查询
多条件查询和模糊查询是在数据库查询时经常遇到的需求,Mybatis提供了相应的语法来实现这些功能。
假设我们有一个Book类来表示图书信息,包含id、title和author字段。
public class Book {
private int id;
private String title;
private String author;
// getters and setters
}
我们将创建一个BookMapper接口,定义多条件查询和模糊查询的方法。
public interface BookMapper {
List<Book> getBooksByCondition(Map<String, Object> condition);
List<Book> getBooksByKeyword(String keyword);
}
在对应的BookMapper.xml文件中实现这些方法:
<!-- 多条件查询 -->
<select id="getBooksByCondition" parameterType="java.util.Map" resultType="Book">
SELECT * FROM book
WHERE
<if test="id != null">
id = #{id}
</if>
<if test="title != null">
AND title = #{title}
</if>
<if test="author != null">
AND author = #{author}
</if>
</select>
<!-- 模糊查询 -->
<select id="getBooksByKeyword" parameterType="String" resultType="Book">
SELECT * FROM book
WHERE title LIKE CONCAT('%', #{keyword}, '%') OR author LIKE CONCAT('%', #{keyword}, '%')
</select>
三、Mybatis一对多关系
一对多关系是指一个实体关联多个实体的情况。在数据库中,我们可以通过外键关联来实现一对多关系。
假设我们有两个类,一个是Order类表示订单信息,另一个是OrderItem类表示订单项信息。一个订单可以包含多个订单项。
public class Order {
private int id;
private String orderNo;
private List<OrderItem> orderItems;
// getters and setters
}
public class OrderItem {
private int id;
private String product;
// getters and setters
}
我们将创建一个OrderMapper接口和一个OrderItemMapper接口来进行数据库操作。
public interface OrderMapper {
Order getOrderById(int id);
}
public interface OrderItemMapper {
List<OrderItem> getOrderItemsByOrderId(int orderId);
}
四、Mybatis多对一关系
多对一关系是指多个实体关联一个实体的情况。在数据库中,我们可以通过外键关联来实现多对一关系。
五、Mybatis多对多关系
多对多关系是指多个实体相互关联的情况。在数据库中,我们可以通过中间表来实现多对多关系。
在学习Mybatis过程中的体会和感受:
1. 灵活性和可扩展性:Mybatis提供了很高的灵活性,可以根据项目需求自由编写SQL语句,并将其与Java代码解耦。这种灵活性使得我能够更好地控制数据库操作,并且能够根据具体场景进行优化和扩展。
2. 简化数据库操作:通过使用Mybatis,我不再需要手动编写繁琐的JDBC代码,而是可以使用简单而直观的方式进行数据库操作。这样,我能够更加专注于业务逻辑的实现,而不用过多关注数据库底层细节。
3. 易于维护和调试:Mybatis的分层结构和清晰的配置使得代码的维护和调试变得更加容易。通过将SQL语句与Java代码分离,我可以更轻松地修改和优化SQL查询,而无需影响其他部分的代码。
学习Mybatis是一次有益的经历。通过掌握Mybatis,我能够更加高效地与数据库交互,提高开发效率,同时也提升了对数据库操作的灵活性和控制能力。