Mybatis是一款常用的ORM框架,提供了Mapper代理模式来替代直接使用JDBC操作数据库,可以大大简化代码量和提高开发效率。
下面是实现Mybatis的Mapper代理模式的步骤:
1. 定义Mapper接口
首先,我们需要定义一个Mapper接口,该接口下面定义了一些操作数据库的方法,这些方法的名称和参数与SQL语句的内容一一对应。例如:
public interface UserMapper {
User findUserById(Integer id);
List<User> findAllUsers();
void addUser(User user);
void updateUser(User user);
void deleteUser(Integer id);
}
2. 在Mapper.xml配置文件中定义SQL语句
在Mybatis中,我们需要使用Mapper.xml文件来存放SQL语句。对于每个Mapper接口方法,都需要在相应的Mapper.xml文件中定义一个对应的SQL语句。例如:
<!-- 根据ID查询用户 -->
<select id="findUserById" parameterType="int"
resultType="com.example.mybatis.pojo.User">
select * from user where id = #{id}
</select>
<!-- 查询所有用户 -->
<select id="findAllUsers" resultType="com.example.mybatis.pojo.User">
select * from user
</select>
<!-- 新增用户 -->
<insert id="addUser" parameterType="com.example.mybatis.pojo.User">
insert into user (id, username, password, email, sex)</sql>
values (#{id}, #{username}, #{password}, #{email}, #{sex})
</insert>
<!-- 修改用户 -->
<update id="updateUser" parameterType="com.example.mybatis.pojo.User">
update user set username = #{username},
password = #{password},
email = #{email},
sex = #{sex}
where id = #{id}
</update>
<!-- 根据ID删除用户 -->
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
3. 定义SqlSessionFactory
SqlSessionFactory是Mybatis进行数据库操作的核心,需要在配置文件中定义数据源和相关配置。例如:
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="111111" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mybatis/mapper/UserMapper.xml"/>
</mappers>
</configuration>
4. 创建SqlSession
SqlSession是Mybatis操作数据库的入口,用来执行Mapper接口方法。例如:
public class UserDaoImpl implements UserDao {
private SqlSession sqlSession;
public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSession = sqlSessionFactory.openSession();
}
public User findUserById(Integer id) throws Exception {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
return userMapper.findUserById(id);
}
}
在这段代码中,我们首先通过SqlSessionFactory创建了一个SqlSession实例,再通过getMapper方法获取一个指定Mapper接口的实例。然后就可以像调用本地方法一样调用Mapper接口中的方法来访问数据库了。
示例一:查询用户信息
现在我们来看如何使用Mybatis实现查询用户信息的功能。先定义一个User类:
public class User {
private Integer id;
private String username;
private String password;
private String email;
private Integer sex;
...
}
然后定义一个UserMapper接口:
public interface UserMapper {
public User findUserById(Integer id);
}
在UserMapper.xml配置文件中定义findUserById的SQL语句:
<!-- 根据ID查询用户 -->
<select id="findUserById" parameterType="int"
resultType="com.example.mybatis.pojo.User">
select * from user where id = #{id}
</select>
最后,在我们的代码中创建SqlSession并调用Mapper接口方法:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findUserById(1);
System.out.println(user);
sqlSession.close();
示例二:新增用户信息
下面我们来看如何使用Mybatis实现新增用户信息的功能。假设在之前的UserMapper接口中新增以下两个方法:
public interface UserMapper {
public void addUser(User user);
public void updateUser(User user);
}
在UserMapper.xml配置文件中分别定义addUser和updateUser的SQL语句:
<!-- 新增用户 -->
<insert id="addUser" parameterType="com.example.mybatis.pojo.User">
insert into user (id, username, password, email, sex)
values (#{id}, #{username}, #{password}, #{email}, #{sex})
</insert>
<!-- 修改用户 -->
<update id="updateUser" parameterType="com.example.mybatis.pojo.User">
update user set username = #{username},
password = #{password},
email = #{email},
sex = #{sex}
where id = #{id}
</update>
最后,在我们的代码中创建SqlSession并调用Mapper接口方法:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setId(4);
user.setUsername("test");
user.setPassword("test");
user.setEmail("test@test.com");
user.setSex(1);
userMapper.addUser(user);
sqlSession.commit();
sqlSession.close();
在这段代码中,我们首先通过SqlSessionFactory创建了一个SqlSession实例,然后通过getMapper方法获取了一个UserMapper实例。然后我们创建一个User对象,设置用户信息并调用addUser方法将用户信息插入到数据库中。最后,我们提交SqlSession并关闭它。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mybatis实现mapper代理模式的方式 - Python技术站