MyBatis实践之DAO与Mapper攻略
MyBatis是一个流行的ORM框架。它使用XML文件或注释映射Java对象到数据库,并提供了一组强大的特性来处理数据库操作。本文将详细讲解MyBatis中的DAO和Mapper,并提供两个示例以演示它们的使用。
DAO
DAO(Data Access Object)是一种数据访问设计模式,它将数据访问从业务逻辑中分离出来。在MyBatis中,DAO通常用于封装数据库的操作。DAO通常由接口和实现类组成,它们之间的关联是通过MyBatis的Mapper实现的。以下是一个简单的DAO接口示例:
public interface UserDAO {
User selectUserById(int id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
如上所示,这个DAO接口包含了一些简单的CRUD方法,它们是:通过id选择用户,插入用户,更新用户和删除用户。这些方法的实现将会被封装到Mapper映射文件中,并由MyBatis框架负责调用。
Mapper
Mapper是MyBatis的一个重要概念,它是Mapper接口中方法的映射描述文件。Mapper文件中描述了SQL语句以及将这些语句参数映射到Java对象的规则。以下是UserMapper.xml文件的示例:
<mapper namespace="com.myapp.mapper.UserMapper">
<select id="selectUserById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insertUser" parameterType="User">
INSERT INTO user(username, password) VALUES(#{username}, #{password})
</insert>
<update id="updateUser" parameterType="User">
UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id}
</update>
<delete id="deleteUser">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
如上所示,这个Mapper文件中包含了用于查询、插入、更新和删除用户的SQL语句。使用resultType和parameterType属性,将Java对象和数据库表之间建立映射关系。
请注意:上文中的User是一个简单的POJO类,它表示了我们要在数据库中保存的数据。
示例
以下是一个演示如何在MyBatis中使用DAO和Mapper的示例:
1.创建User实体类
public class User {
private int id;
private String username;
private String password;
// 省略getter和setter...
}
2.创建UserDAO接口
public interface UserDAO {
User selectUserById(int id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
3.创建UserMapper.xml文件
<mapper namespace="com.myapp.mapper.UserMapper">
<select id="selectUserById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insertUser" parameterType="User">
INSERT INTO user(username, password) VALUES(#{username}, #{password})
</insert>
<update id="updateUser" parameterType="User">
UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id}
</update>
<delete id="deleteUser">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
4.配置MyBatis
在MyBatis中,我们需要配置SqlSessionFactory和Mapper文件。
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/myapp/mapper/UserMapper.xml" />
</mappers>
</configuration>
5.编写测试类
public class UserDAOTest {
private static SqlSessionFactory sqlSessionFactory;
@BeforeClass
public static void init() {
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testSelectUserById() {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
User user = userDAO.selectUserById(1);
System.out.println(user);
sqlSession.close();
}
@Test
public void testInsertUser() {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
User user = new User();
user.setUsername("TestUser");
user.setPassword("123456");
userDAO.insertUser(user);
System.out.println(user.getId()); // 输出插入的用户ID
sqlSession.commit();
sqlSession.close();
}
}
如上所示,我们创建了一个UserDAOTest测试类来测试我们的代码。在其中,我们先使用SqlSessionFactoryBuilder创建SqlSessionFactory,然后通过SqlSessionFactory创建SqlSession,并获取到UserMapper代理对象,最后使用代理对象进行CRUD操作。
使用以上步骤即可完成MyBatis中DAO与Mapper的使用。
另外再提供一个示例,如何使用注解的方式来进行Mapper映射。
示例2:使用注解映射
如果你使用的是MyBatis3以上的版本,则可以使用注解来简化Mapper映射。以下是使用注解的示例:
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User selectUserById(int id);
@Insert("INSERT INTO user(username, password) VALUES(#{username}, #{password})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insertUser(User user);
@Update("UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id}")
void updateUser(User user);
@Delete("DELETE FROM user WHERE id = #{id}")
void deleteUser(int id);
}
如上所示,我们使用了@Select、@Insert、@Update和@Delete等注解来标记方法,同时也定义了SQL语句。使用@Options注解,我们可以得到插入数据后的自增主键。
使用以上这些注解即可在MyBatis中定义Mapper接口。注解的使用方式非常方便,如果你不想使用XML文件进行映射,可以选择直接使用注解也可。
总结
本文介绍了MyBatis中的DAO和Mapper的使用,同时提供了两个示例来演示它们的使用方式。对于初学者来说,MyBatis的学习曲线可能比较陡峭。但是,一旦你掌握了它的使用方法,它将会为你带来很多便利。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis实践之DAO与Mapper - Python技术站