一、mybatis入门
首先创建数据库,创建表,然后导入数据。
然后我配置并启动Web服务器,以确保应用程序能够运行,接着将所需的JAR包下载到项目中,并在构建脚本中添加依赖项。配置MyBatis:添加MyBatis依赖和配置mybatis-config.xml文件,指定数据源和映射器等信息。
<!-- mybatis-config.xml -->
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_test" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/UserMapper.xml" />
</mappers>
</configuration>
编写实体类来定义需要存储到数据库中的实体类,并在其中添加属性和对应的getter、setter方法。创建一个Java接口,用于定义访问数据库的各种操作。例如,定义一个UserMapper接口来提供增删改查等方法。使用@Select、@Insert、@Update、@Delete等注解,编写相应的SQL语句。
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
<insert id="insert" parameterType="com.example.User">
insert into user(name, age)
values(#{name}, #{age})
</insert>
<select id="selectById" parameterType="int" resultType="com.example.User">
select * from user where id=#{id}
</select>
<update id="update" parameterType="com.example.User">
update user set name=#{name}, age=#{age} where id=#{id}
</update>
<delete id="delete" parameterType="int">
delete from user where id=#{id}
</delete>
</mapper>
二、动态sql+分页
userMapper.xml文件:<mapper namespace="com.example.mapper.UserMapper">
<select id="getUsers" resultType="User">
SELECT * FROM users
<where>
<if test="id != null">
AND id = #{id}
</if>
<if test="username != null">
AND username = #{username}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
</mapper>
在这个例子中,我们定义了一个getUsers()方法来查询用户数据。该方法接收一个User对象作为参数,并根据传入的参数动态生成SQL语句中的WHERE条件。如果传入的User对象中没有某个属性,那么对应的if语句就会被忽略。最后,我们可以通过以下代码执行动态SQL查询:public class MyApp {
public static void main(String[] args) throws IOException {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
SqlSession session = sqlSessionFactory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = new User();
user.setUsername("John");
List<User> users = userMapper.getUsers(user);
for (User u : users) {
System.out.println(u.getId() + " - " + u.getUsername() + " - " + u.getAge());
}
session.close();
}
}
在这个例子中,我们首先构建了一个SqlSessionFactory对象,然后使用它打开一个SqlSession。接着,我们获取了一个UserMapper的实例,并调用了getUsers()方法来执行动态SQL查询。最后,我们遍历查询结果并输出每个用户的信息。
MyBatis提供了一种方便的分页插件PageHelper,它可以帮助我们快速实现分页查询。首先需要在pom.xml文件中添加pagehelper-spring-boot-starter依赖,在application.properties或application.yml文件中配置分页插件,在Mapper接口中定义一个带有分页参数的查询方法,在Mapper XML文件中编写SQL查询语句,并使用分页插件,最后,在Service层调用查询方法并传入分页参数:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public PageInfo<User> getAllUsers(int pageNum, int pageSize) {
// 开启分页插件
PageHelper.startPage(pageNum, pageSize);
// 执行分页查询
List<User> users = userMapper.getAllUsers((pageNum - 1) * pageSize, pageSize);
// 封装查询结果为PageInfo对象
PageInfo<User> pageInfo = new PageInfo<>(users);
return pageInfo;
}
}
在这个例子中,我们首先调用PageHelper.startPage()方法开启分页插件。然后执行查询方法,将查询结果封装为PageInfo对象并返回。
注意,在startPage()方法中传入的参数是当前页码和每页显示的记录数,而不是MySQL数据库中的LIMIT参数中的偏移量和行数。因此,在实际使用时需要根据当前页码和每页显示的记录数计算出MySQL限制参数中的偏移量和行数。
三、练习