下面详细讲解使用注解开发MyBatis的完整攻略。
简介
MyBatis是一种面向关系型数据库的持久层框架,使用这种框架,可以实现SQL与代码的解耦,并且能够灵活的控制SQL的执行过程。MyBatis同时也支持XML映射文件和注解两种方式来进行SQL配置。下面将会介绍使用注解方式进行MyBatis开发的流程。
创建数据库表和实体类
创建数据库表的操作可以使用类似如下的SQL语句来进行:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后我们需要定义一个对应该数据库表的User类,其中包含三个属性:id、username和password,以及对应的getter和setter方法。类定义如下:
public class User {
private int id;
private String username;
private String password;
// getters and setters
}
配置MyBatis
在项目中配置MyBatis,我们需要引入相关的依赖和配置文件。具体步骤如下:
- 在项目的pom.xml文件中添加MyBatis的依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
</dependencies>
- 配置数据源,这里以MySQL数据源为例:
<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?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
- 配置MyBatis的Mapper文件:
<mappers>
<mapper resource="com/example/mappers/UserMapper.xml"/>
</mappers>
注意:该步骤是为了引入XML文件,使用注解方式开发可以省略该步骤。
定义Mapper接口和SQL语句
在MyBatis中,SQL语句可以直接在Mapper接口中进行定义。下面我们定义一个对User表进行操作的Mapper接口:
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User selectById(int id);
@Insert("INSERT INTO user(username, password) VALUES(#{username}, #{password})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
void insert(User user);
}
该接口中分别定义了selectById和insert两个方法,分别对应了SELECT和INSERT语句。在方法上使用@Select和@Insert注解,指定对应的SQL语句,并使用#{id}和#{username}等占位符号来表示SQL语句中的参数。@Options注解用于自动生成主键。
执行Mapper接口中的SQL语句
最后,我们需要在代码中执行Mapper接口中定义的SQL语句。这可以通过以下的方式来完成:
public static void main(String[] args) {
SqlSessionFactory sessionFactory = getSessionFactory();
SqlSession session = sessionFactory.openSession();
try {
UserMapper userMapper = session.getMapper(UserMapper.class);
// 使用selectById方法查询用户数据
User user = userMapper.selectById(1);
System.out.println(user.getUsername());
// 使用insert方法插入一条新的用户数据
User newUser = new User();
newUser.setUsername("test");
newUser.setPassword("password");
userMapper.insert(newUser);
int newUserId = newUser.getId();
System.out.println(newUserId);
session.commit();
} catch (Exception e) {
session.rollback();
} finally {
session.close();
}
}
private static SqlSessionFactory getSessionFactory() {
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
InputStream resource = Main.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
return builder.build(resource);
}
使用以上代码,我们可以分别执行selectById和insert方法,从而实现对数据的查询和插入操作。
示例
下面给出两个实例来进一步展示如何使用注解方式开发Mybatis。
示例1:统计某个用户的文章总数
public interface ArticleMapper {
@Select("SELECT COUNT(*) FROM article WHERE user_id=#{userId}")
int countByUserId(int userId);
}
public static void main(String[] args) {
SqlSessionFactory sessionFactory = getSessionFactory();
SqlSession session = sessionFactory.openSession();
try {
ArticleMapper articleMapper = session.getMapper(ArticleMapper.class);
int count = articleMapper.countByUserId(1);
System.out.println(count);
session.commit();
} catch (Exception e) {
session.rollback();
} finally {
session.close();
}
}
示例2:分页查询某类文章
public interface ArticleMapper {
@Select("SELECT * FROM article WHERE category=#{category} LIMIT #{offset}, #{limit}")
List<Article> findByCategory(@Param("category") int category, @Param("offset") int offset, @Param("limit") int limit);
}
public static void main(String[] args) {
SqlSessionFactory sessionFactory = getSessionFactory();
SqlSession session = sessionFactory.openSession();
try {
ArticleMapper articleMapper = session.getMapper(ArticleMapper.class);
List<Article> articles = articleMapper.findByCategory(1, 0, 10);
for (Article article : articles) {
System.out.println(article.getTitle());
}
session.commit();
} catch (Exception e) {
session.rollback();
} finally {
session.close();
}
}
感谢阅读本文,希望对使用注解开发MyBatis的同学有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis使用注解开发实现过程详解 - Python技术站