详解MyBatis的Dao层实现和配置文件深入
MyBatis是一款非常流行的ORM框架,在Java开发中被广泛应用。Dao层是MyBatis的核心层之一,负责实现与数据库的交互。本文将详解MyBatis的Dao层实现和配置文件的深入,包括Dao层的实现、配置文件的解析和使用等方面。
一、Dao层实现
在MyBatis的Dao层实现中,我们主要依赖以下三个方面:
- 接口定义
在MyBatis中,一个Dao接口对应一张数据库表,且每个方法对应着CRUD的操作。比如,一个UserDao接口通常应该有如下方法:
public interface UserDao {
User selectUserById(int id);
List<User> selectAllUser();
void insertUser(User user);
void updateUser(User user);
void deleteUserById(int id);
}
- Mapper XML文件
Mapper XML文件是Dao层的核心,它定义了与数据库交互的SQL语句和参数映射。比如,一个UserDao的Mapper文件应该如下所示:
<mapper namespace="com.example.dao.UserDao">
<select id="selectUserById" parameterType="int" resultType="com.example.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="selectAllUser" resultType="com.example.model.User">
SELECT * FROM user
</select>
<insert id="insertUser" parameterType="com.example.model.User">
INSERT INTO user(username, password) VALUES(#{username}, #{password})
</insert>
<update id="updateUser" parameterType="com.example.model.User">
UPDATE user SET password = #{password} WHERE id = #{id}
</update>
<delete id="deleteUserById" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
- SqlSessionFactory
SqlSessionFactory是用于创建SqlSession对象的工厂,它是Dao层实现的入口。我们需要使用MyBatis的配置文件来配置SqlSessionFactory。
二、配置文件深入
在MyBatis的配置文件中,我们主要关注以下5个部分:
- 数据源配置
在MyBatis中,我们需要配置数据源信息,以便能够连接到数据库。比如,下面是一个JDBC连接池的配置:
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
- Mapper文件配置
在MyBatis中,我们需要告诉MyBatis如何解析Mapper文件。比如下面是Mapper文件的配置:
<mappers>
<mapper resource="com/example/dao/UserDao.xml"/>
</mappers>
- 类型别名配置
在MyBatis中,我们可以给Java类型起一个别名,在Mapper文件中可以直接使用。比如下面是一个User类的别名配置:
<typeAliases>
<typeAlias type="com.example.model.User" alias="User"/>
</typeAliases>
- 插件配置
在MyBatis中,我们还可以使用插件来对SQL进行拦截和修改。比如下面是一个示例插件的配置:
<plugins>
<plugin interceptor="com.example.MyPlugin">
<property name="name" value="myPlugin"/>
</plugin>
</plugins>
- 其他配置
除了以上四个配置之外,我们还需要配置一些其他的配置,比如:
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="dialect" value="mysql"/>
</settings>
三、使用示例
在MyBatis的Dao层实现中,我们可以通过以下步骤来使用Dao层:
- 创建一个SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- 创建一个SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
- 获取Mapper接口对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
- 调用Mapper接口的方法
User user = userDao.selectUserById(1);
- 关闭SqlSession对象
sqlSession.close();
下面是一个完整的示例:
public class MyBatisDemo {
public static void main(String[] args) throws IOException {
// 1. 创建SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 2. 创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 3. 获取Mapper接口对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
// 4. 调用Mapper接口的方法
User user1 = userDao.selectUserById(1);
System.out.println(user1);
User user2 = new User();
user2.setUsername("zhangsan");
user2.setPassword("123456");
userDao.insertUser(user2);
System.out.println(user2);
List<User> userList = userDao.selectAllUser();
System.out.println(userList);
user2.setPassword("654321");
userDao.updateUser(user2);
System.out.println(user2);
userDao.deleteUserById(user2.getId());
// 5. 关闭SqlSession对象
sqlSession.close();
}
}
该示例中,我们首先创建SqlSessionFactory对象,然后通过SqlSessionFactory创建SqlSession对象。在获取Mapper接口对象后,我们依次调用了Mapper接口的各个方法,最后关闭SqlSession对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解MyBatis的Dao层实现和配置文件深入 - Python技术站